Spack
spack (https://github.com/spack/spack) 是一个用于编译 HPC 软件及其依赖项的工具。编译后的软件作为环境 提供,以便可以同时存在应用程序的多个版本。检测到最相关的 CPU 架构,并且编译后的软件会自动针对其进行优化。
对于 openSUSE Leap、Tumbleweed 和 SLES,提供了一个 系统软件包,其优点是可以安装所有必要的依赖项并使核心工具可用于 spack。其他与 spack 相关的系统软件包也会在安装后添加到 spack 配置中。
此外,spack 作为 root 用户调用时与作为普通用户调用时表现不同。以 root 用户构建的所有软件包对系统上的所有用户可用,而作为普通用户构建的软件包仅对该用户可用。
快速入门
spack 可以使用以下命令安装:
sudo zypper install spack
为了加载所有相关的环境变量,应该重新登录并使用以下命令获取 spack 环境:
source /usr/share/spack/setup-env.sh
可以使用以下命令检查安装:
spack spec netcdf-c
这显示了为了从源代码编译 netccdf-c 将要安装的所有软件包。输出中的插入符号 '^' 表示对特定软件包的依赖关系,可以在命令行中更改。例如
spack spec netcdf-c^mpich
将显示构建 netcdf-c 所需的所有软件包,而不是默认的 openmpi,而是使用 mpich。
现在可以使用以下命令安装软件包:
spack install netcdf-c^mpich
这将构建并安装带有所有必需依赖项的软件包。可以使用以下命令加载/使用生成的软件包:
spack load netcdf-c@4.7.4
或者使用环境模块:
module load netcdf-c-4.7.4-gcc-11.1.1-tlfohef
其中模块的确切名称可以使用以下命令显示:
module av
SUSE 包
SUSE 包和标准安装之间存在一些差异。
- 如果用户可以写入 /usr/lib/spack,则软件包和生成的模块将存储在该位置下。如果用户是 root 或在 spack 组中,则为真。生成的模块安装在 /usr/share/spack/modules/linux-<distribution>-<arch> 下
- 外部软件包,如 M4 或 autoconf,在 spack 安装时检测到,并且在安装相关软件包时(例如,新的 gcc 版本)也会检测到。
软件包搜索和信息
可以使用以下命令显示使用 spack 安装的已安装软件包:
spack find
并使用以下命令显示所有可用软件包:
spack list [regexp]
可以使用以下命令获取有关软件包的详细信息:
spack info <packagename>
这将打印构建软件包的所有版本和选项。
软件包构建
使用 'install' 命令完成软件包编译和安装。但建议先使用 'spec' 命令列出软件包的所有依赖项。因此,命令
spack install/spec <package-name>
将安装/列出 <package-name> 所需的所有软件包。可以使用 '@' 设置软件包版本:
spack install/spec <package-name>@<version>
并且可以使用 '%' 设置编译:
spack install/spec <package-name>@<version>%gcc@7.5.0
将使用 'gcc7' 构建软件包。使用 '+' 启用软件包的二进制构建和安装选项,使用 '~' 禁用。使用 '^' 设置构建依赖项。
示例
hdf5 hdf5 configuration, when used as depdency
hdf5 @1.10.1 hdf5 version 1.10.1
hdf5 @1.8: hdf5 1.8 or higher
hdf5 @1.8: %gcc hdf5 1.8 or higher built with gcc
hdf5 +mpi hdf5 with mpi enabled
hdf5 ~mpi hdf5 with mpi disabled
hdf5 +mpi ^mpich hdf5 with mpi, using mpich
hdf5 +mpi ^openmpi@1.7 hdf5 with mpi, using openmpi 1.7
boxlib dim=2 boxlib built for 2 dimensions
libdwarf %intel ^libelf%gcc
libdwarf, built with intel compiler, linked to libelf built with gcc
mvapich2 %gcc fabrics=psm,mrail,sock
mvapich2, built with gcc compiler, with support for multiple fabrics, default version
编译器
编译器不被视为普通依赖项,因此必须使用 '%' 强制使用特定编译器,而不是像普通依赖项一样使用 '^'。可以使用 'spack' 的编译器可以列出:
spack compiler list
当使用 spack 安装或编译新编译器时,必须使用以下命令将其告知 spack:
spack compiler find
请注意,编译器必须在 $PATH 中,因此如果编译器是使用 spack 构建的,则必须先加载模块,然后才能使用 find 命令。
外部程序
spack 可以使用以下命令找到外部程序,如 autoconf、cmake:
spack external find
外部查找由 rpm 在安装 spack 或安装新相关软件包时执行。