2

我正在使用 PLINK v 1.9(一种遗传学软件,而不是 PuTTY 界面,https: //www.cog-genomics.org/plink/1.9/dev )制作一个奇点容器。我能够在容器中成功编译软件,并且当我进入容器时可以看到 PLINK 文件和函数。为了让我的最终用户更轻松,我正在尝试将软件的主文件夹添加到奇点 $PATH 以便他们可以从命令行调用 plink ,但我无法实现这一点。

到目前为止,我已经尝试过:

  1. 在我的奇点配方文件的 %runscript 部分分配 SINGULARITYENV_APPEND_PATH=path/to/plink。
  2. 将 Plink 的源代码文件夹移动到 Singularity 的 /usr/local/bin
  3. 设置变量 PLINKDIR=/path/to/plink 并将其导出到我的配方文件的 %environment 部分,类似于他们在此处所做的。

这些方法都不起作用。我可以访问这个包的唯一方法是在我的奇异 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 从命令行调用它们?任何帮助,将不胜感激!

4

2 回答 2

1

您消息的第一部分提到“这样他们就可以从命令行调用 plink,但我无法实现这一点。” 在那种情况下,为什么不只是:

apt-get install -y plink1.9

在您的定义文件中?

就我而言,如果我尝试singularity exec imgfile.sif plink --version它显然是行不通的,因为你必须这样称呼plink1.9singularity exec imagfile.sif plink1.9 --version

于 2019-07-04T08:12:27.340 回答
0

您应该能够将其添加到您的路径中:

%environment
    PATH=$PATH:/path/to/plink/

另外,编辑您的运行脚本:

%runscript
    exec "$@"

然后你可以运行:

singularity run test.simg plink --version
于 2019-02-28T21:28:44.430 回答