目录
前言
在Linux安装软件,经常因为权限或者其他问题导致依赖环境难以安装。即使是普通用户通过
Spack也可以实现自动化安装软件及其依赖,而Spack自己的spack load反响不如environment module方便,两者搭配,干活不累。
本文将带你从头安装这两个软件,并设置相关配置。
一、软件介绍
1.Spack
Spack是一款高性能包管理工具,支持软件不同版本,不同编译其及编译选项对安装包进行安装。
关于Spack的使用参考Spack官方文档。
2.Environment Modules
Environment Modules是一款环境变量管理工具,通过module实现软件环境变量的管理,快速加载和切换软件环境。
关于Environment Modules的使用参考 Environment Modules官方文档。
二、Spack安装
1.依赖环境
以Ubuntu22.04为例
sudo apt update
sudo apt install build-essential ca-certificates coreutils curl environment-modules gfortran git gpg lsb-release python3 python3-distutils python3-venv unzip zip
2.安装
从github下载软件包
# 这里我把软件安装到 $HOME/software中
mkdir software && cd software
git clone -c feature.manyFiles=true https://github.com/spack/spack.git
3.激活Spack
. $HOME/software/spack/share/spack/setup-env.sh # 注意开头的 . 后边有个空格
# 或者
source $HOME/software/spack/share/spack/setup-env.sh # 也可以把这句加到 ~/.bashrc中,登录自动激活Spack
4.测试安装软件
这里我安装了两个软件bedtools和gatk,而gatk有4.4.0.0和4.5.0.0两个不同的软件版本。
spack install -j 8 bedtools2 # -j 8 多线程运行,加速安装过程
spack install -j 8 gatk@4.5.0.0
spack install -j 8 gatk@4.4.0.0
5.配置
1)修改module配置
spack config edit modules
# 编辑内容如下
modules:
default:
enable: [tcl] # 以后用Spack安装的软件都会自动用tcl生成对应的Module的文件
tcl:
hide_implicits: true # 隐藏依赖包,module av就只显示主要的软件,不会显示依赖包
all:
autoload: direct # or `run`
conflict:
- '{name}' # 同名软件冲突,检测同名软件是否已经加载
lmod:
hide_implicits: true # 隐藏依赖包,module av就只显示主要的软件,不会显示依赖包
all:
autoload: direct # or `run`
conflict:
- '{name}' # 同名软件冲突,检测同名软件是否已经加载
详细配置参考官方Spack Module配置。
2)生成Environment Modules可用的module 文件。
spack module tcl refresh --delete-tree
会出现以下内容。红线框起来的部分,每个人可能不一样,记住你自己是什么样的。
# 提示
Do you want to proceed? [y/n] y # 输入y确认
如果你以后又修改了spack的module配置,都需要重新运行这个命令,才能让新配置生效。
二、Environment Modules安装
1.下载软件包
此处建议用最新版,module 3.x配置的时候有些问题。
curl -LJO https://github.com/cea-hpc/modules/releases/download/v5.4.0/modules-5.4.0.tar.gz
tar xfz modules-5.4.0.tar.gz
2.安装依赖
如果后边安装报错,参考官网安装说明“Requirements”,看看你缺哪项
一般大概率会缺失tcl-devel>=8.5
sudo apt-get install tcl-devel
3.安装
./configure # 可以设置--prefix=/path/to/your/file指定安装位置
make -j 4 # -j 4 代表多线程编译,可以加快安装速度
make install
如果你没修改位置的话,Environment Modules默认安装在 /usr/local/Modules
4.初始化modules软件
在shell启动时启用modules初始化,将其链接到/etc/profile.d/
ln -s /usr/local/Modules/init/profile.sh /etc/profile.d/modules.sh
ln -s /usr/local/Modules/init/profile.csh /etc/profile.d/modules.csh
# 或者
source /usr/local/Modules/init/bash # 可以添加到 ~/.bashrc实现登录自动激活
如果module命令没生效,重新登录终端,让配置生效。
注意,module初始化后,使用which module是找不到module命令的,这是正常现象。
5.配置
添加Spack生成的module文件
# linux-ubuntu22.04-skylake这个目录因人而异,改成你自己实际的目录
module use $HOME/software/spack/share/spack/modules/linux-ubuntu22.04-skylake/
三、结果
1.列出软件
1)查看我们通过Spack安装的软件,是不是能被module识别。
module av
如果这步没看到spack的module,重新登录终端,让之前的配置生效。
2)这里还可以发现,它只列出了我安装的三个软件,没有列出依赖软件,这就是我想要的结果。看着简练。这就是之前配置spack module中hide_implicits: true的结果。
否则,你看到的是这样的情况,所有依赖包都会显示,让人眼花缭乱。
2.加载软件
module load gatk/4.4.0.0-gcc-11.4.0-zzhq6bf
3.列出当前加载的软件
比较这两个命令的结果差异
module list
module list -a
module list -a是实际加载的内容,可以发现,除了主程序gatk之外,它还加载了很多依赖软件、库
4.冲突检测
我这里安装两个版本的gatk软件,一个是4.4.0.0版本,一个是4.5.0.0。我们试着同时加载这两个软件,看看会发生什么。
前边我们已经加载了4.4.0.0那个了,现在加载4.5.0.0这个版本。
可以发现,它提示我们已经加载了gatk/4.4.0.0这个版本了,如果你要用4.5.0.0这个版本,需要先unload gatk/4.4.0.0
module unload gatk/4.4.0.0-gcc-11.4.0-zzhq6bf # unload 4.4.0.0版本
module load gatk/4.5.0.0-gcc-11.4.0-sjvcslh # 载入4.5.0.0版本
module list # 查看当前载入的软件
这样我们就切换到4.5.0.0版本了
总结
以上就是今天要讲的内容,本文讲解了Spack和Environment modules的安装和配置。这样我们就可以通过Spack安装软件,搭配module的环境管理,轻松使用各种软件。