Я занимаюсь созданием контейнера сингулярности с PLINK v 1.9 (программное обеспечение для генетики, а не интерфейс PuTTY, https://www.cog-genomics.org/plink/1.9/dev) внутри него. Я могу успешно скомпилировать программное обеспечение в контейнере, и я могу видеть файлы и функции PLINK, когда я вставляю контейнер. Чтобы облегчить жизнь моим конечным пользователям, я пытаюсь добавить основную папку программного обеспечения в сингулярность $PATH, чтобы они могли просто вызывать plink из командной строки, но я не могу этого добиться.
До сих пор я пробовал:
Ни один из этих методов не работает. Единственный способ получить доступ к этому пакету — указать полный путь в моей команде 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:
%runscript
exec "$@"
Затем вы можете запустить:
singularity run test.simg plink --version
В первой части вашего сообщения упоминается «чтобы они могли просто вызвать plink из командной строки, но я не могу этого добиться». В таком случае, почему бы просто не:
apt-get install -y plink1.9
В вашем файле определения?
И в моем случае, если я попытаюсь singularity exec imgfile.sif plink --version
, это явно не сработает, так как вы должны вызвать plink1.9
так: singularity exec imagfile.sif plink1.9 --version
.