singularity-container - 使用“shell”命令运行 Singularity 容器时自动源配置
问题描述
我使用奇异容器(从定义文件构建)来构建我的项目的代码。我使用它的方式是运行容器,singularity shell my_container.sif
使我的工作空间安装在容器中,然后运行命令以在那里构建。
为了使构建工作,我首先需要获取一个配置文件来设置环境,创建一些别名等。这个配置文件是容器的一部分。所以目前在容器内我执行以下操作:
> source /setup.bash
> build_command
我想知道/setup.bash
当我使用singularity shell
. 我尝试使用%environment
定义文件中的部分,但似乎无法在那里创建别名。
解决方案
别名不会在子 shell 之间继承,因此目前无法通过$SINGULARITY_ENVIRONMENT
or传递这些别名%environment
。
一种选择是将别名转换为函数:
从:
alias build_command='pushd build_dir && ./configure && make && make install && popd'
至:
build_command() { pushd build_dir && ./configure && make && make install && popd ; }
export -f build_command
但是,Singularity/bin/sh
默认使用初始环境处理,并且基于 Debian 的系统已/bin/sh
符号链接到/bin/dash
,并且 dash 不支持将函数导出到我发现的子 shell。如果使用 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
。执行附加重定向很重要>>
,因为您不想破坏现有的环境文件。
推荐阅读
- paypal - PayPal 辅助帐户创建无效的 client_id 或 redirect_uri
- android-studio - 安装后无法打开 Android Studio
- python - 使用单个元素或列表作为值构建字典
- arrays - 如何按值对打字稿中的数组进行排序
- postgresql - 使用 postgres 存储后端时,Vault 报告缺少客户端令牌
- python - 使用 python 请求获取网站登录的同意 cookie (CMP euconsent-v2)
- unit-testing - 单元测试 FastAPI CRUD 无法按预期工作
- python - 用户输入只能是字母字符并包含空格
- laravel - 如何更改 spatie 标签 slug 生成器方法
- c# - 从 dmcmnutils.dll 读取带参数的导出函数