跳转至

容器与旧版代码运行

学习目标

  • 了解如何使用容器来运行需要旧版操作系统的代码。

在 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 等旧系统的容器,这点尤为重要。


  1. 也可以获取 el9(即 RHEL9 )平台。这使得本地运行不同 Linux 发行版(如 Ubuntu、Fedora、Arch 等 )的系统能够运行为 EL9 编译的软件!