微生物基因體核心研究室

Microbial Genomics Core Laboratory, Graduate Institute of Genomics and Bioinformatics, NCHU, Taiwan

blog

安裝Singularity然後Go compiler not found!

這是有關Singularity https://github.com/sylabs/singularity 在Ubuntu上安裝的筆記

關於安裝culebrONT的作法在這裡,安裝singularity必須要用到Go compiler,我們遇到一個小問題,就是明明似乎已經安裝好了Go 1.20.4,但是在執行sigularity安裝的時候,它還是出現了像這樣的錯誤:

Configuring for project `singularity' with languages: C, Golang
=> running pre-basechecks project specific checks ...
=> running base system checks ...
checking: host C compiler... cc
checking: host C++ compiler... c++
checking: host Go compiler (at least version 1.17)... not found!

這不是1.20.4 該換回去裝 1.17的問題(版本比它新)

有一種說法是更新Go的時候必須把舊的清乾淨,不能直接把新的裝到同一個位置,否則也可能會出問題。但我們是新安裝,所以也不是這樣的狀況。

上網找了一下,在這裡看到了類似的問題(雖然他是好幾年前,Singularity跟Go的版本都比我們早):https://github.com/apptainer/singularity/issues/5099

裡面有人提供了解法,我們可以修改一下來用,以下是他們的做法加上ChatGPT的說明,還有我們修改的地方:

更新apt套件管理器的套件列表。&& \ 表示如果第一個指令成功執行,才會執行下一個指令。安裝一組基本的編譯工具和庫,這些工具和庫對於編譯大多數軟體都是必需的。這些可能是Singularity所需的依賴庫和工具。

sudo apt-get update && \
sudo apt-get install -y build-essential libseccomp-dev pkg-config squashfs-tools cryptsetup

刪除先前已安裝在/usr/local/go路徑下的Go語言安裝目錄(這很重要,不同版本的Go直接複寫到原本的同一個路徑有時會出問題)。

sudo rm -r /usr/local/go

設置三個環境變數:VERSION(Go語言的版本)、OS(作業系統)、ARCH(CPU架構)。我們在這裡VERSION是1.20.4

export VERSION=1.13.15 OS=linux ARCH=amd64

從Google的下載鏡像站點下載特定版本的Go語言安裝包,並存儲在/tmp目錄下。

wget -O /tmp/go${VERSION}.${OS}-${ARCH}.tar.gz https://dl.google.com/go/go${VERSION}.${OS}-${ARCH}.tar.gz

解壓縮Go語言安裝包並安裝到/usr/local目錄下。

sudo tar -C /usr/local -xzf /tmp/go${VERSION}.${OS}-${ARCH}.tar.gz

GOPATH環境變數設置為使用者的$HOME/go目錄,並將該設置添加到.bashrc檔案中。

echo 'export GOPATH=${HOME}/go' >> ~/.bashrc

將Go語言的執行路徑(bin)添加到PATH環境變數中,以便於命令行中直接執行Go語言的Binary可執行文件。

echo 'export PATH=/usr/local/go/bin:${PATH}:${GOPATH}/bin' >> ~/.bashrc

如此一來會在使用者的~/.bashrc增加以下內容:

讓現有的shell使用更新後的.bashrc設置。

source ~/.bashrc

使用curl下載和安裝GolangCI-Lint工具,這裡我們稍微修改了,叫他抓1.58.0

curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.58.0

創建一個目錄結構,以將Singularity的原始碼放在正確的位置。然後cd切換到Singularity原始碼的目錄。

mkdir -p ${GOPATH}/src/github.com/sylabs && \
cd ${GOPATH}/src/github.com/sylabs

從GitHub上克隆Singularity的原始碼庫。

git clone https://github.com/sylabs/singularity.git
後來安裝有遇到問題,說是需要裝submodules,所以應該是這樣才對:
git clone --recurse-submodules https://github.com/sylabs/singularity.git

進入剛剛克隆的Singularity原始碼目錄。檢查到Singularity的特定版本。我們要裝新的版本(4.1.2)

cd singularity
git checkout v4.1.2

再次進入Singularity原始碼目錄。配置Singularity原始碼。進入Singularity的編譯目錄。使用make命令編譯Singularity。

cd ${GOPATH}/src/github.com/sylabs/singularity && \
./mconfig && \
cd ./builddir && \
make
這裡可能會遇到一些問題,他需要autoconf跟libtool,沒裝的話sudo apt-get install autoconf,sudo apt-get install libtool就可以解決
此外根據你的系統,你可能還會需要安裝glib-2.0, fuse, libfuse-dev 或 fuse3, libfuse3 等等套件。

如果以上都順利通過,那就是最後一步!將Singularity安裝到系統中。

sudo make install

用singularity version看看:

4.1.2