存在问题
目前超算linux系统CentOS7.x的glibc版本为2.17,许多软件的作者经常会在glibc版本非常高的Linux系统上编译软件然后在github上发布,用户下载之后由于系统的glibc版本较低而无法运行,报如下错误(本文示例基于已安装好的Node.js 18):
解决方案
使用singularity容器
- 获取glibc版本较高的singularity镜像,如 Ubuntu,镜像拉取可参考超算用户手册-运行计算程序-运行Singularity
- 加载预装singularity容器

- 申请所需超算资源
#本次测试申请1节点4核资源,最长运行一小时,可根据自己情况来申请 salloc -p hpib -N 1 -n 6 -t 1:00:00 以可写的方式运行高版本GLIBC的singularity容器,并将宿主机文件与容器中文件进行绑定
test #home目录默认会被绑定,此时将自己的project目录与容器中的/mnt目录进行绑定 singularity shell --bind /project2/{自己的用户名}:/mnt -w ubuntu.sif #若有需要,可以将scratch目录也进行绑定 singularity shell --bind /project2/{自己的用户名}:/mnt --bind /scratch/{自己的用户名}:/opt -w ubuntu.sif绑定的目录名与自己home目录下project(scratch)的软连接指向保持一致

- 进入容器后创建project目录,若你绑定了scratch目录则也要创建对应的scratch目录,并创建对应软连接
#有的账号可能是/project,请参考自己home目录下的软连接实际指向 mkdir /project2 ln -s /mnt /project2/xiajunjie
- 运行node命令

singularity结合脚本运行程序
将上述进入singularity容器后,所要执行的准备操作写成一个脚本
#本示例该脚本创建在自己的project下 #此脚本考虑了project和scratch均与容器绑定的情况,用户可根据自己的实际情况进行调整 vim preparation.sh #脚本内容 #!/bin/bash mkdir {/project2,/scratch} ln -s /mnt /project2/xiajunjie ln -s /opt /scratch/xiajunjie source ~/.bashrc node --version #保存后添加权限 chmod +x preparation.sh准备提交脚本submit.sbatch
#!/bin/bash #SBATCH --partition=hpib #SBATCH --nodes=1 #SBATCH --account=xiajunjie #SBATCH --cpus-per-task=4 module load singularity/3.10 singularity exec --bind /project2/xiajunjie:/mnt --bind /scratch/xiajunjie:/opt -w ubuntu.sif /mnt/preparation.sh- 提交脚本并查看运行结果

备注
- 若在软件安装过程中,遇到需要高版本glibc的问题或者文件数过大问题,强烈建议自己在虚拟机上制作打包好singularity镜像,然后上传至超算使用。
具体示例可参考超算用户手册
- 若只想使用超算singularity环境完成软件编译安装,也可以参考本文使用singularity容器的思路