奇点容器:将自定义包添加到 $PATH 并将其传递给奇点执行程序
Singularity containers: adding custom packages to $PATH and pass it to singularity exec
我正在制作一个奇点容器,其中装有 PLINK v 1.9(一种遗传学软件,不是 PuTTY 界面,https://www.cog-genomics.org/plink/1.9/dev)。我能够在容器内成功编译软件,当我 shell 进入容器时,我可以看到 PLINK 文件和函数。为了让我的最终用户更轻松,我试图将软件的主文件夹添加到奇点 $PATH,以便他们可以从命令行调用 plink,但我无法实现这一点。
到目前为止我已经尝试过:
- 在我的奇点配方文件的 %运行 脚本部分分配 SINGULARITYENV_APPEND_PATH=path/to/plink。
- 将 Plink 的源代码文件夹移动到 Singularity
的 /usr/local/bin
- 设置变量 PLINKDIR=/path/to/plink 并将其导出到我的配方文件的 %environment 部分,类似于他们所做的 here.
None 这些方法有效。我可以访问此包的唯一方法是在我的 singularity exec 命令中拼出完整路径。
singularity exec test.simg /path/to/plink/plink --version
我只想 运行
singularity exec test.simg plink --version
我的奇点配方文件的内容:
BootStrap: docker
From: ubuntu:16.04
%labels
Plink Version 1.9
%runscript
# Allows us to run the versions of the packages installed in the post
# section
exec plink19 "$@"
%environment
export SINGULARITYENV_PLINKDIR="/plink-ng-b15c19f/1.9/"
%post
# Make some directories for storage
mkdir /new_folder_1 /new_folder_2
apt-get update
apt-get -y upgrade
apt-get install -y --no-install-recommends \
software-properties-common \
build-essential \
apt-transport-https \
curl \
git \
wget \
libfreetype6-dev \
pkg-config \
python \
python-dev \
dh-autoreconf \
libarchive-dev \
libatlas-dev \
libatlas-base-dev \
zlib1g-dev
# Install PLINK
wget https://github.com/chrchang/plink-ng/archive/b15c19f.tar.gz
tar xvf b15c19f.tar.gz
cd /plink-ng-b15c19f/1.9/
./plink_first_compile
ln -s plink plink19
%test
echo $PLINKDIR
echo 语句不输出任何内容。我如何将这样的自定义包(意味着不是使用 apt-get 安装)添加到奇点环境,以便可以从命令行使用奇点 exec 调用它们?任何帮助,将不胜感激!
您应该可以将它添加到您的路径中:
%environment
PATH=$PATH:/path/to/plink/
另外,编辑您的运行脚本:
%runscript
exec "$@"
那么你可以运行:
singularity run test.simg plink --version
您消息的第一部分提到了 "so that they can just call plink from the command line, but I'm not able to achieve this." 在这种情况下,为什么不直接:
apt-get install -y plink1.9
在你的定义文件中?
在我的例子中,如果我尝试 singularity exec imgfile.sif plink --version
它显然不起作用,因为你必须调用 plink1.9
所以:singularity exec imagfile.sif plink1.9 --version
。
我正在制作一个奇点容器,其中装有 PLINK v 1.9(一种遗传学软件,不是 PuTTY 界面,https://www.cog-genomics.org/plink/1.9/dev)。我能够在容器内成功编译软件,当我 shell 进入容器时,我可以看到 PLINK 文件和函数。为了让我的最终用户更轻松,我试图将软件的主文件夹添加到奇点 $PATH,以便他们可以从命令行调用 plink,但我无法实现这一点。
到目前为止我已经尝试过:
- 在我的奇点配方文件的 %运行 脚本部分分配 SINGULARITYENV_APPEND_PATH=path/to/plink。
- 将 Plink 的源代码文件夹移动到 Singularity 的 /usr/local/bin
- 设置变量 PLINKDIR=/path/to/plink 并将其导出到我的配方文件的 %environment 部分,类似于他们所做的 here.
None 这些方法有效。我可以访问此包的唯一方法是在我的 singularity exec 命令中拼出完整路径。
singularity exec test.simg /path/to/plink/plink --version
我只想 运行
singularity exec test.simg plink --version
我的奇点配方文件的内容:
BootStrap: docker
From: ubuntu:16.04
%labels
Plink Version 1.9
%runscript
# Allows us to run the versions of the packages installed in the post
# section
exec plink19 "$@"
%environment
export SINGULARITYENV_PLINKDIR="/plink-ng-b15c19f/1.9/"
%post
# Make some directories for storage
mkdir /new_folder_1 /new_folder_2
apt-get update
apt-get -y upgrade
apt-get install -y --no-install-recommends \
software-properties-common \
build-essential \
apt-transport-https \
curl \
git \
wget \
libfreetype6-dev \
pkg-config \
python \
python-dev \
dh-autoreconf \
libarchive-dev \
libatlas-dev \
libatlas-base-dev \
zlib1g-dev
# Install PLINK
wget https://github.com/chrchang/plink-ng/archive/b15c19f.tar.gz
tar xvf b15c19f.tar.gz
cd /plink-ng-b15c19f/1.9/
./plink_first_compile
ln -s plink plink19
%test
echo $PLINKDIR
echo 语句不输出任何内容。我如何将这样的自定义包(意味着不是使用 apt-get 安装)添加到奇点环境,以便可以从命令行使用奇点 exec 调用它们?任何帮助,将不胜感激!
您应该可以将它添加到您的路径中:
%environment
PATH=$PATH:/path/to/plink/
另外,编辑您的运行脚本:
%runscript
exec "$@"
那么你可以运行:
singularity run test.simg plink --version
您消息的第一部分提到了 "so that they can just call plink from the command line, but I'm not able to achieve this." 在这种情况下,为什么不直接:
apt-get install -y plink1.9
在你的定义文件中?
在我的例子中,如果我尝试 singularity exec imgfile.sif plink --version
它显然不起作用,因为你必须调用 plink1.9
所以:singularity exec imagfile.sif plink1.9 --version
。