Centos安装Singularity记录

环境依赖

sudo yum update -y && \
yum groupinstall -y 'Development Tools' && \
yum install -y \
    openssl-devel \
    libuuid-devel \
    libseccomp-devel \
    wget \
    squashfs-tools\
    cryptsetup

golang安装

sudo export VERSION=1.16.5 OS=linux ARCH=amd64 && \
wget https://studygolang.com/dl/golang/go$VERSION.$OS-$ARCH.tar.gz && \
tar -C /usr/local -xzvf go$VERSION.$OS-$ARCH.tar.gz && \
rm go$VERSION.$OS-$ARCH.tar.gz

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

Singularity安装

export VERSION=3.8.0 && export REL=rc.2 && # adjust this as necessary \
wget https://github.com/hpcng/singularity/releases/download/v${VERSION}-${REL}/singularity-${VERSION}-${REL}.tar.gz && \
tar -xzf singularity-${VERSION}-${REL}.tar.gz && \
cd singularity

sudo ./mconfig && \
make -C ./builddir && \
make -C ./builddir install

直接在默认路径上编译会报错,显示Go没有找到,可是明明能运行go:

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.13)... not found!
mconfig: could not complete configuration

删除整个singularity目录,重新解压安装(普通用户即可):

export VERSION=3.8.0
tar -xzf singularity-ce-${VERSION}.tar.gz
cd singularity-ce-${VERSION}
./mconfig --prefix=/opt/singularity/${VERSION}
cd builddir/
make && make install
echo "export PATH=/opt/singularity/${VERSION}/bin:\$PATH" >> ~/.bashrc

常用命令

singularity -h
singularity build  #构建镜像
singularity run    #容器内启动执行脚本
singularity exec   #镜像内执行命令
singularity shell  #执行一个 shell 脚本

Ref:
https://www.jianshu.com/p/b081c9622dda
https://www.jianshu.com/p/b46ee066806b


后续

以上表面上是安装成功了,但实际上运行singularity容器时,出现setuid的错误,说明有些容器普通用户安装的singularity不行,最好用root安装。问题来了,root安装默认路径编译显示如上的go错误。

ERROR  : No setuid installation found, for unprivileged installation use: ./mconfig --without-suid

重装了几次仍然不行,网上说明了go和singularity版本需要对应。

最后看了个回答:使用go version 1.13.15对应singularity version 3.6.3是可以的。

sudo rm -r /usr/local/go

export VERSION=1.13.15 OS=linux ARCH=amd64  # change this as you need

wget -O /tmp/go${VERSION}.${OS}-${ARCH}.tar.gz https://dl.google.com/go/go${VERSION}.${OS}-${ARCH}.tar.gz && \
sudo tar -C /usr/local -xzf /tmp/go${VERSION}.${OS}-${ARCH}.tar.gz

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

curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh |
sh -s -- -b $(go env GOPATH)/bin v1.21.0

github上已经不能直接找到v3.6.3,可在此下载:https://github.com/apptainer/singularity/releases/tag/v3.6.3

如下:

wget https://github.com/apptainer/singularity/releases/download/v3.6.3/singularity-3.6.3.tar.gz
tar -xzf singularity-3.6.3.tar.gz
cd singularity
./mconfig &&     make -C ./builddir &&     sudo make -C ./builddir install
singularity

这时,再运行容器,显示正常了。

Ref:
https://github.com/apptainer/singularity/issues/5099
https://blog.csdn.net/weixin_62940906/article/details/128586498

posted @ 2023-05-17 12:53  生物信息与育种  阅读(292)  评论(0编辑  收藏  举报