CentOS环境Singularity容器中Quantum Espresso编译失败问题
问题描述
在CentOS 7.9的Singularity容器中构建包含libxc 5.2.3和Quantum Espresso 7.0的环境时遇到如下问题:
- 自定义
base.def构建沙箱容器后,手动编译安装libxc成功 - QE的
./configure阶段成功检测到所有依赖库(BLAS、LAPACK、FFTW、LIBXC)及并行环境,生成makefile - 执行
sudo make all时,在UtilXlib编译阶段报错:make[1]: mpif90: Command not found
相关配置与操作步骤
容器定义文件base.def
Bootstrap: docker From: centos:7.9.2009 #################### %help This container contains the base image for QE with libxc for HPC. #################### %post ##### # proxy settings sudo yum install -y sudo git wget vim which tree sudo yum install -y hostname lscpu uptime redhat-lsb numactl #Install needed dependencies yum install -y epel-release centos-release-scl && yum -y update && yum clean all sudo yum groupinstall -y "Development Tools" && yum clean all sudo yum install open-ssl-devel bzip2-devel libffi-devel -y sudo yum makecache sudo yum -y install gcc-gfortran sudo yum -y install blas-devel sudo yum -y install fftw-devel sudo yum -y install lapack-devel sudo yum -y install openmpi-devel ############### %environment ############## source /etc/profile.d/modules.sh module load mpi/openmpi-x86_64 export PATH=/usr/lib64/openmpi/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin export LD_LIBRARY_PATH=/usr/lib64/openmpi/bin:/usr/lib64
编译操作步骤
sudo singularity build --sandbox QE7-libxcm base.def sudo singularity shell --writable QE7-libxcm # Libxc编译和安装 wget http://www.tddft.org/programs/libxc/down.php?file=5.2.3/libxc-5.2.3.tar.gz tar -xvf libxc-5.2.3.tar.gz cd libxc-5.2.3 sudo ./configure --prefix=/opt/libxc-5.2.3 # 使用CFLAGS=-std=c99避免编译问题 sudo make CFLAGS=-std=c99 sudo make check sudo make install # QE编译 wget https://github.com/QEF/q-e/archive/refs/tags/qe-7.0.tar.gz tar -xvf qe-7.0.tar.gz cd qe-7.0 ./configure --with-libxc --with-libxc-prefix='/opt/libxc-5.2.3'
./configure输出片段
The following libraries have been found: BLAS_LIBS= -lblas LAPACK_LIBS=-L/usr/lib64 -llapack -lblas FFT_LIBS= -lfftw3 LIBXC_LIBS= -L/opt/libxc-5.2.3/lib -lxcf03 -lxc Please check if this is what you expect. If any libraries are missing, you may specify a list of directories to search and retry, as follows: ./configure LIBDIRS="list of directories, separated by spaces" Parallel environment detected successfully. Configured for compilation of parallel executables.
报错信息
... make[1]: Entering directory `/opt/qe-7.0/UtilXlib' mpif90 -O3 -g -cpp -D__FFTW3 -D__LIBXC -D__MPI -I/opt/qe-7.0/external/devxlib/src -I/opt/qe-7.0/include -I/opt/qe-7.0/FoX/finclude -I/opt/libxc-5.2.3/include -I/usr/lib64 -I. -c parallel_include.f90 make[1]: mpif90: Command not found make[1]: *** [parallel_include.o] Error 127 make[1]: Leaving directory `/opt/qe-7.0/UtilXlib' make: *** [libutil] Error 1
解决方案
1. 直接执行make(无需sudo)
容器以--writable模式启动,当前用户已有足够权限修改容器内文件,无需使用sudo:
make all
2. 若必须用sudo,保留环境变量
sudo默认会重置PATH等环境变量,需添加-E参数保留当前环境:
sudo -E make all
3. 手动指定编译器路径到configure
在configure阶段直接指定MPI编译器的绝对路径,规避环境变量加载问题:
./configure --with-libxc --with-libxc-prefix='/opt/libxc-5.2.3' FC=/usr/lib64/openmpi/bin/mpif90 CC=/usr/lib64/openmpi/bin/mpicc
4. 修复容器环境变量配置
原base.def中LD_LIBRARY_PATH错误指向了/usr/lib64/openmpi/bin,应改为/usr/lib64/openmpi/lib,修改后的%environment部分:
%environment source /etc/profile.d/modules.sh module load mpi/openmpi-x86_64 export PATH=/usr/lib64/openmpi/bin:$PATH export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH
修改后重新构建容器即可生效。
内容的提问来源于stack exchange,提问作者Roxana Sida
相关产品推荐
相关产品推荐

