Автоматическая настройка исходного кода при запуске контейнера Singularity с помощью команды «shell» - PullRequest
0 голосов
/ 10 октября 2019

Я использую контейнер сингулярности (сборка из файла определения) для сборки кода моего проекта. Я использую его для запуска контейнера с singularity shell my_container.sif таким образом, чтобы мое рабочее пространство было смонтировано в контейнере, а затем запустил команду для сборки там.

Чтобы сборка работала, мне сначала нужно получить исходный кодфайл конфигурации, который устанавливает среду, создает псевдонимы и т. д. Этот файл конфигурации является частью контейнера. Так что в настоящее время внутри контейнера я делаю следующее:

> source /setup.bash
> build_command

Мне интересно, есть ли способ автоматически заставить сингулярность получить этот файл /setup.bash при запуске контейнера с singularity shell. Я попытался с разделом %environment в файле определения, но не представляется возможным создать псевдонимы там.

1 Ответ

0 голосов
/ 13 октября 2019

Псевдонимы не наследуются между подоболочками, поэтому в настоящее время невозможно передать их через $SINGULARITY_ENVIRONMENT или %environment.

Один из вариантов - преобразовать псевдонимы в функции:

From:

alias build_command='pushd build_dir && ./configure && make && make install && popd'

To:

build_command() { pushd build_dir && ./configure && make && make install && popd ; }
export -f build_command

Однако Singularity по умолчанию использует /bin/sh для начальной обработки среды, а в системах на основе Debian /bin/sh имеет символическую ссылку на /bin/dash и dash не поддерживает функции экспорта в подоболочки, которые я нашел. Возможно, вы застряли в поиске файла с псевдонимами / функциями вручную, если используете ОС семейства Debian.


В разделе %post вашего определения вы можете повторить в $SINGULARITY_ENVIRONMENT.

Из документов :

%post
    apt-get update && apt-get install -y netcat
    NOW=`date`
    echo "export NOW=\"${NOW}\"" >> $SINGULARITY_ENVIRONMENT

В вашем случае вы бы сделали echo "alias something='something else' >> $SINGULARITY_ENVIRONMENT. Важно выполнить перенаправление добавления >>, так как вы не хотите загромождать существующий файл среды.

...