奇异容器:将自定义包添加到$ PATH并将其传递给奇异执行程序

时间:2019-02-27 21:13:31

标签: path exec command-line-arguments singularity-container

我正在用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的源代码文件夹移动到奇点的/ usr / local / bin
  3. 设置变量PLINKDIR = / path / to / plink并将其导出到我的配方文件的%environment部分,类似于他们所做的here.

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

2 个答案:

答案 0 :(得分:0)

您应该可以将其添加到您的路径中:

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

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

%runscript
    exec "$@"

然后您可以运行:

singularity run test.simg plink --version

答案 1 :(得分:0)

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

apt-get install -y plink1.9

在您的定义文件中?

就我而言,如果我尝试singularity exec imgfile.sif plink --version,则显然不起作用,因为您必须致电plink1.9,所以:singularity exec imagfile.sif plink1.9 --version