容器与旧版代码运行
学习目标
- 了解如何使用容器来运行需要旧版操作系统的代码。
在 LHCb运行代码时,存在几种场景,用户可能需要运行为旧版操作系统编写的遗留代码。当前使用的最新操作系统是红帽企业 Linux 9(RHEL9)。不过,也有其他大致等效的替代操作系统,比如 AlmaLinux 9、Rocky Linux 9 。
存在一些可能需要运行遗留代码的情况,例如:
- 运行来自旧分析的代码
- 通常,模拟工作组使用的代码也需要旧版操作系统
lxplus 之前使用过的操作系统如下所列。如果不是 RHEL9,您需要的操作系统几乎肯定是以下两者之一:
- Centos7------2023 年停用
- 科学 Linux CERN 6(SLC6)------2018 年停用
运行模拟程序
模拟框架是经常需要旧版操作系统的地方,具体如下:
| 模拟框架 | 所需操作系统 |
| -------------------- | ----------- |
| Sim10 | Centos7 |
| Sim09 | SLC6 |
运行遗留代码时,无需寻找运行旧版操作系统的机器,也无需使用旧版操作系统创建虚拟机。相反,我们可以使用容器!容器是一种 虚拟化 软件,允许多个操作系统在同一台机器上运行,这样一来,在本例中,运行 RHEL9 的机器就能临时使用另一种操作系统,就如同使用另一种环境一样。
lxplus 上用于在不同操作系统间切换的软件叫做 apptainer 。要在运行 RHEL9
的机器上运行 Centos7 软件,可使用并调整以下命令:
apptainer exec --env LBENV_SOURCED= -B /afs/cern.ch/user -B /afs/cern.ch/work -B /cvmfs -e /cvmfs/lhcb.cern.ch/containers/os-base/centos7-devel/prod/amd64 bash --rcfile /cvmfs/lhcb.cern.ch/lib/LbEnv
| 命令 | 解释 |
| -------------------------------------- | --------------------------------------------------------------- |
| Apptainer | 要运行的命令 |
| exec -e <the centos7 environment> bash | 启动一个使用 Centos7 的 bash 会话. |
| -B <directory> | 这些是"绑定",任何需要在容器内可见的目录(及其子目录)都需要指定 |
| --rcfile <group_login> | 指定应加载 LbEnvS |
| --env LBENV_SOURCED= | 重置 LBENV_SOURCED 环境变量以重新加载 LbEnv |
可在此查看可用平台的完整列表1:
| 平台 | 位置 |
| -------- | --------------------------------------------------------------- |
| slc5 | /cvmfs/lhcb.cern.ch/containers/os-base/slc6-devel/prod/amd64 |
| slc6 | /cvmfs/lhcb.cern.ch/containers/os-base/slc6-devel/prod/amd64 |
| centos7 | /cvmfs/lhcb.cern.ch/containers/os-base/centos7-devel/prod/amd64 |
| el9 | /cvmfs/lhcb.cern.ch/containers/os-base/alma9-devel/prod/amd64 |
检查操作系统
无论何时,都可以使用cat /etc/system-release命令检查当前使用的操作系统。
- 现在就在 RHEL9 环境和运行 Centos7 的容器(singularity)中试试,看看操作系统的变化!
警告:尽量少用及稳定性问题
使用容器时需要注意的一点是,它们的稳定性不如机器上的默认操作系统。因此,建议仅在容器中运行需要特定旧版操作系统的代码,其他操作(如git 相关操作)则在容器外进行。对于 SLC5 和 SLC6 等旧系统的容器,这点尤为重要。
-
也可以获取 el9(即 RHEL9 )平台。这使得本地运行不同 Linux 发行版(如 Ubuntu、Fedora、Arch 等 )的系统能够运行为 EL9 编译的软件! ↩