资讯详情

CentOS 7 离线部署 Singularity 容器并安装 Code-Aster 2021

📅 2026/9/17 8:53:24 | 华诺云谱 👁 阅读
CentOS 7 离线部署 Singularity 容器并安装 Code-Aster 2021
简介面向需要在 CentOS 环境部署 Salome_Meca 2021 并集成 Code-Aster 开源仿真软件的用户这是一份安装配置类文档包。内容以图文并茂的安装教程为主覆盖离线场景下的依赖准备、RPM 批量安装方法、Go 环境与 DEP 管理工具配置等关键环节并针对 --nodeps、--force 等常用参数作了说明适合有一定 Linux 基础、希望避开反复排错的工程师和科研人员。压缩包共 1 个文件为 docx 格式大小 1.2MB便于按步骤查阅或打印对照。已有 761 人浏览学习说明该教程对同类安装问题具有普适参考价值。通过资源可获得系统化的安装顺序梳理、前置条件检查清单以及实际操作中的注意点提示可显著缩短搭建仿真环境所需时间。1. Singularity 容器里的 Salome_Meca 2021CentOS 7 上的 Code-Aster 安装路线拿到salome_meca-lgpl-2021.0.0-2-20211014-scibian-9.sif这个文件时如果还按老思路在 CentOS 7.9 上找 rpm 或 deb 包方向就错了。Code-Aster 2021 在 Linux 上的官方分发形式是 Singularity 容器镜像整个安装链路其实是在解决容器运行时的问题而不是求解器本体。链路是Golang 1.18.1 - dep v0.5.4 - Singularity 3.9.9 - sif 镜像导入。每一环都有明确验证点并且全部可以在离线环境下完成。对需要在无外网环境部署仿真工作站、又要兼容 HPC 作业调度器的团队来说这套流程比传统源码编译多了一层隔离也避免了同一台机器上多个版本的 MPI、BLAS 互相覆盖。下面按依赖链完整走一遍命令和参数都验证过。2. 离线依赖准备Golang 1.18、dep v0.5.4 与 rpm 批量装2.1 为什么 Singularity 的构建链从 Golang 开始Singularity v3 开始用 Go 重写编译过程交给自己的 makeit 构建系统由mconfig生成 Makefile。Golang 版本不能低于 1.18这里固定用 go1.18.1这个版本对 Singularity 3.9.9 的代码库和 CGO 编译足够往上的 1.20 也能构建但 1.18.1 是这条路线验证过的最稳组合。dep 是 Go 早期的依赖锁定工具Singularity 3.9.9 的源码里仍然保留了 vendor 目录结构构建脚本对 GOPATH 有路径约定所以需要把 dep 的可执行文件放进 GOPATH/bin 或 /usr/local/go/bin确保dep ensure能被直接调用。2.2 Golang 1.18.1 解压与三处环境变量配置离线环境下先把go1.18.1.linux-amd64.tar.gz传到节点上解压到 /usr/local。~/.bashrc里写 GOPATH 和 PATH/etc/profile里写全局 PATH两者职责不同bashrc 带上 GOPATH/bin 是给当前用户后续编译用的profile 是给所有登录 shell 兜底。# 解压 Go 到 /usr/local tar -C /usr/local -xzf go1.18.1.linux-amd64.tar.gz # 配置 GOPATH 与当前用户 PATH mkdir -p ~/go/bin echo export GOPATH${HOME}/go ~/.bashrc echo export PATH/usr/local/go/bin:${PATH}:${GOPATH}/bin ~/.bashrc source ~/.bashrc # 全局 PATH给非交互登录 shell 兜底 echo export PATH$PATH:/usr/local/go/bin /etc/profile source /etc/profiletar -C /usr/local -xzf把 Go 解压到 /usr/local/goGOPATH指向用户家目录下的 go 目录后面 Singularity 源码要放进$GOPATH/src/github.com/sylabsPATH 里把 /usr/local/go/bin 放在最前避免系统残留的旧版 Go 抢先。修改 /etc/profile 后 source 一次就能在当前会话生效新开的 SSH 会话也不需要再手动 source。2.3 dep 的三种安装方式与 release 二进制推荐dep 有脚本安装、go get 编译、GitHub releases 下载二进制三种方式。前两种需要有外网环境且能访问 GitHub离线或网络受限时不现实。第三种直接把dep-linux-amd64下载后重命名是离线部署最稳妥的做法版本固定 v0.5.4这是 dep 最后一个稳定 release。# 方式一release 二进制安装离线环境推荐 chmod x dep-linux-amd64 mv dep-linux-amd64 /usr/local/go/bin/dep # 方式二go get 安装需要能访问 GitHub go get -u github.com/golang/dep/cmd/dep # 方式三官方 install.sh需要外网环境 curl https://raw.githubusercontent.com/golang/dep/master/install.sh | shmv到 /usr/local/go/bin 的原因是该目录已经在 PATH 里dep 命令全局可用chmod x确保二进制有执行权限。方式二go get -u会拉取源码并编译网络慢或 CGO 依赖不全会失败这也是离线环境推荐方式一的直接原因。2.4 rpm 依赖包批量安装与参数语义离线包里的 libdb4-devel、libseccomp-devel、squashfs-tools 等第三方依赖是以 rpm 形式提供的。单个安装用rpm -Uvh xxxx.rpm批量安装用通配符。--nodeps --force的组合要理解清楚前者跳过依赖关系检查后者忽略版本冲突强制覆盖。命令参数行为rpm -Uvh xxxx.rpm --nodeps --force单个包升级安装跳过依赖解析强制覆盖rpm -Uvh *.rpm --nodeps --force批量包目录下所有 rpm 按顺序安装带进度显示--nodeps依赖关系不检查被依赖的包是否存在--force冲突策略包已安装时也强制重装cd /root/rpms rpm -Uvh *.rpm --nodeps --force-U是升级与安装二合一即使包未安装过也会装入-v显示详细信息-h用 # 号显示进度。批量安装时 rpm 逐个处理某个包格式损坏会中断当前包但不会回滚已经装好的部分所以装完后用rpm -qa | grep libseccomp核验关键库。这一步装的只是 Singularity 编译运行所需的基础库真正的大件在后面。3. 编译 Singularity 3.9.9GOPATH 目录约束与 mconfig 参数3.1 源码为什么必须放进 GOPATH/src/github.com/sylabsSingularity 3.9.9 的构建系统对源码位置有约定。官方构建脚本里把singularity-ce-3.9.9.tar.gz移动并解压到$GOPATH/src/github.com/sylabs不是形式主义mconfig生成的 Makefile 会引用内部模块的导入路径路径不对会在编译阶段找不到内部包。mkdir -p $GOPATH/src/github.com/sylabs mv singularity-ce-3.9.9.tar.gz $GOPATH/src/github.com/sylabs/ cd $GOPATH/src/github.com/sylabs tar -xzf singularity-ce-3.9.9.tar.gz cd singularity-ce-3.9.9$GOPATH在上一章已经配置到用户目录的 go 目录mkdir -p一次性创建两级目录防止 mv 时目录不存在导致 tar 包被直接改名。解压后pwd确认当前路径后面所有构建命令都必须在这个解压目录里执行。3.2 mconfig 生成 Makefile 与 --prefix 定制Singularity 的 makeit 构建机制核心是./mconfig它扫描源码树并生成 builddir 目录下的构建脚本。默认安装前缀是 /usr/local二进制最终在 /usr/local/bin/singularity。想装到独立目录就用--prefix指定。make -C ./builddir是关键区别构建目录是独立的不污染源码树。# 默认前缀装到 /usr/local ./mconfig \ make -C ./builddir \ make -C ./builddir install # 自定义前缀装到 /opt/singularity ./mconfig --prefix/opt/singularity \ make -C ./builddir \ make -C ./builddir install./mconfig不加参数时使用默认配置make -C ./builddir指定进入 builddir 执行 make而不是在源码根目录直接 make。串联三个步骤中间任意一步失败都会停止方便判断是配置阶段还是编译阶段出错。3.3 mconfig 常用参数与 bash 补全参数作用--prefix/opt/singularity指定安装根目录--localstatedir/mnt强制本地状态目录替代默认 /var安装完成后先确认版本再 source bash 补全脚本。补全脚本位于 /usr/local/etc/bash_completion.d/singularitysource 后当前终端即可 TAB 补全如果要永久生效把 source 命令追加到 ~/.bashrc。# 验证版本 singularity version # 当前会话启用 bash 补全 . /usr/local/etc/bash_completion.d/singularity # 永久生效 echo . /usr/local/etc/bash_completion.d/singularity ~/.bashrc source ~/.bashrc.是 source 的缩写让补全脚本在当前 shell 生效。bash 补全依赖 bash-completion 包CentOS 7 上如果 TAB 没反应先rpm -qa | grep bash-completion确认包已装。补全配置不影响 singularity 本身运行但能减少长参数输错概率对后续频繁使用singularity run/exec/shell很有帮助。3.4 用 rpmbuild 打安装包多节点批量部署如果要在多台同版本 CentOS 7 节点上部署不必每台都编译一次用 rpmbuild 把源码包打成 rpm 再统一分发。rpmbuild -tb直接从 tar 包构建输出在 ~/rpmbuild/RPMS/x86_64 下。# 常规构建 rpmbuild -tb singularity-ce-3.9.9.tar.gz # 指定状态目录到 /mnt rpmbuild -tb --define_localstatedir /mnt singularity-ce-3.9.9.tar.gz # 安装生成的 rpm 包 cd ~/rpmbuild/RPMS/x86_64 rpm -ivh singularity-ce-3.9.9-1.el7.x86_64.rpm-tb告诉 rpmbuild 从 tar 包构建--define_localstatedir /mnt把状态目录指向 /mnt适合把运行状态放到持久化数据盘的场景。生成的 debuginfo 包建议一起装上后续如果 singularity 崩溃能用 gdb 直接跟栈。rpm -ivh首次安装即可不需要加--force。边界情况也说明一下官方提供了静态编译的 singularity 二进制看起来可以跳过 Go 环境直接运行但静态包会丢失 libseccomp 的运行时策略支持沙箱隔离强度会下降我不建议在 HPC 共用节点上这么做。自己从源码构建这条路线虽然编译时间长一点但行为可预期。4. 导入 sif 镜像并补齐 Python 3 缺口4.1 sif 文件结构与 --app 参数的作用sif 是 Singularity Image Format把只读根文件系统、运行元数据和签名打包成一个文件。它可以直接被执行也可以被singularity run调用。salome_meca-lgpl-2021.0.0-2-20211014-scibian-9.sif是 Code-Aster 官方基于 SciBian 9 构建的镜像里面预置了求解器本体和网格划分、后处理等模块所需的全部运行库。SciBian 9 对应 Debian 9 用户态med、HDF5、MUMPS 这些求解依赖都锁在镜像内部宿主系统只需要提供 Singularity 运行时和一个能执行启动脚本的解释器。4.2 singularity run --app install 完成安装把 .sif 文件放到根目录或指定目录后执行安装命令。这一步做两件事准备容器环境生成与镜像同名的启动器。singularity run --app install ./salome_meca-lgpl-2021.0.0-2-20211014-scibian-9.sif--app install调用的是镜像内定义好的 App 标签执行的是环境准备和启动器生成逻辑。启动器生成在 sif 同目录下文件名不含 .sif 后缀之后直接执行./salome_meca-lgpl-2021.0.0-2-20211014-scibian-9即可。执行这条命令时必须在 sif 文件所在目录或者给出完整路径启动器后续会按相对路径去找镜像。4.3 CentOS 7 找不到 python3 的根源CentOS 7 默认只有 Python 2.7而镜像内的 Solver 启动脚本通过 shebang 引用/usr/bin/env python3。启动器是在宿主系统上执行的会先经过宿主的 PATH 找 python3找不到就直接报错。所以即便 sif 里面有完整的求解环境宿主这一侧仍然要补一个 Python 3。这里的版本选择是 Python 3.7.2与 sif 镜像内部依赖兼容性最好也是这条安装路线上验证过的组合。4.4 Python 3.7.2 编译安装与软链接# 安装编译依赖 yum -y groupinstall Development tools yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel \ sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libffi-devel yum -y install zlib* # 下载解压 wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz tar -xvJf Python-3.7.2.tar.xz mkdir -p /usr/local/python3 cd Python-3.7.2 # 配置编译 ./configure --prefix/usr/local/python3 --enable-optimizations --with-ssl make make install # 创建软链接 ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3 ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3configure 参数说明--prefix/usr/local/python3指定安装目录避免污染系统 /usr/bin--enable-optimizations开启 profile-guided optimization运行性能更好编译更久--with-ssl编入 ssl 模块保证 pip 能走 HTTPS 下载依赖zlib 系列包必须装全否则 configure 阶段会报 zlib 缺失后面 make install 出来没有 pip。--enable-optimizations编译大约需要 20 分钟CPU 核数多会明显快一些。软链接指向 /usr/local/bin/python3这是启动脚本默认查找路径之一。5. 安装验证与离线排错版本确认、rpm 重装与 singularity exec5.1 三个版本命令一次性验证python3 -V pip3 -V singularity --version正常输出是 Python 3.7.2、pip 对应版本和 singularity version 3.9.9。如果 python3 -V 报 no such file先检查软链接是否存在再看 /usr/local/python3/bin/python3 是否真实存在不要急着重新编译多半是 ln -s 时源路径写错。5.2 批量 rpm 部分失败的处理离线环境批量 rpm 安装时某个包损坏会中断当前安装但前面已装的不回滚。处理方式是找到失败包单独重新装# 强制重装单个包 rpm -Uvh libseccomp-devel-2.3.1-4.el7.x86_64.rpm --nodeps --force # 卸载后重装 rpm -e --nodeps 包名 rpm -ivh 包名.rpm--nodeps跳过依赖检查不意味着缺失的库会自己出现后续编译 Singularity 时make阶段才会暴露真正缺什么报错信息比 rpm 阶段更明确。所以批量 rpm 装完先跑一遍singularity version能出版本号就说明依赖闭环了。5.3 用 singularity exec 直接验证求解器启动器生成的下一步验证是用singularity exec进入镜像直接跑求解器版本信息singularity exec salome_meca-lgpl-2021.0.0-2-20211014-scibian-9.sif \ salome_meca --version这条命令绕过启动器的 python3 依赖直接验证 sif 镜像本身是否完整。如果这条能出版本而启动器还是报错问题就锁定在宿主 python3 或环境变量上如果这条也失败镜像文件在传输过程中可能损坏重新上传 sif 再跑一次singularity run --app install即可。本文还有配套的精品资源点击获取
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。