Контейнеры Singularity: добавление пользовательских пакетов в $ PATH и передача его в execularity exec - PullRequest
0 голосов
/ 28 февраля 2019

Я нахожусь в процессе создания контейнера для сингулярности с PLINK v 1.9 (генетическое программное обеспечение, а не интерфейс PuTTY, https://www.cog -genomics.org / plink / 1.9 / dev ) внутри него,Я могу успешно скомпилировать программное обеспечение в контейнере, и я вижу файлы и функции PLINK, когда я выполняю оболочку в контейнере.Чтобы упростить задачу для моих конечных пользователей, я пытаюсь добавить основную папку программного обеспечения в особенность $ PATH, чтобы они могли просто вызывать plink из командной строки, но я не могу этого добиться.

До сих пор я пытался:

  1. Назначение SINGULARITYENV_APPEND_PATH = путь / к / plink в разделе% runcript моего файла рецепта сингулярности.
  2. Перемещение папки с исходным кодом для Plink в / usr / local / bin в Singularity
  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), в среду Singularity, чтобы их можно было вызывать из командной строки с помощью Singularity Exec?Любая помощь будет оценена!

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

В первой части вашего сообщения упоминается "чтобы они могли просто вызывать plink из командной строки, но я не могу этого добиться".В таком случае, почему бы просто:

apt-get install -y plink1.9

В вашем файле определения?

И в моем случае, если я попытаюсь singularity exec imgfile.sif plink --version, это, очевидно, не сработает, поскольку вы должны вызвать plink1.9 так: singularity exec imagfile.sif plink1.9 --version.

0 голосов
/ 01 марта 2019

Вы можете просто добавить его в свой путь:

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

Кроме того, отредактируйте свой скрипт запуска:

%runscript
    exec "$@"

Затем вы можете запустить:

singularity run test.simg plink --version
...