当科研人员需要在纯净的Linux环境中部署CESM2(Community Earth System Model)时,往往会遇到各种依赖库版本冲突和环境变量配置问题。本文将详细介绍如何在CentOS 7系统上从零开始搭建CESM2的完整编译环境,特别针对那些刚接触气候模型的研究生和科研人员。
在开始之前,确保你的CentOS 7系统已经更新到最新状态。执行以下命令更新系统:
bash复制sudo yum update -y
sudo yum groupinstall "Development Tools" -y
接下来安装一些基础依赖库:
bash复制sudo yum install -y wget git curl gcc gcc-c++ gcc-gfortran make cmake \
perl perl-devel perl-ExtUtils-Embed libxml2-devel zlib-devel \
bzip2-devel openssl-devel ncurses-devel readline-devel
提示:建议使用普通用户而非root用户进行后续的安装操作,避免权限问题
CESM2依赖于多个科学计算库,这些库需要按照特定顺序编译安装。以下是推荐的安装顺序和配置方法:
HDF5是CESM2依赖的核心库之一,建议使用1.8.x或1.10.x版本:
bash复制wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8/hdf5-1.8.21/src/hdf5-1.8.21.tar.gz
tar -xzvf hdf5-1.8.21.tar.gz
cd hdf5-1.8.21
./configure --prefix=/usr/local/hdf5-1.8.21 --enable-fortran --enable-cxx
make -j$(nproc)
make check
sudo make install
安装完成后,将以下内容添加到~/.bashrc文件中:
bash复制# HDF5环境变量
export HDF5=/usr/local/hdf5-1.8.21
export PATH=$HDF5/bin:$PATH
export LD_LIBRARY_PATH=$HDF5/lib:$LD_LIBRARY_PATH
export CPPFLAGS="-I$HDF5/include $CPPFLAGS"
export LDFLAGS="-L$HDF5/lib $LDFLAGS"
执行source ~/.bashrc使配置生效。
NetCDF需要先安装C库再安装Fortran库:
bash复制# 安装NetCDF-C
wget https://github.com/Unidata/netcdf-c/archive/v4.7.4.tar.gz
tar -xzvf v4.7.4.tar.gz
cd netcdf-c-4.7.4
./configure --prefix=/usr/local/netcdf-c-4.7.4 --disable-dap
make -j$(nproc)
make check
sudo make install
# 安装NetCDF-Fortran
wget https://github.com/Unidata/netcdf-fortran/archive/v4.5.3.tar.gz
tar -xzvf v4.5.3.tar.gz
cd netcdf-fortran-4.5.3
export LD_LIBRARY_PATH=/usr/local/netcdf-c-4.7.4/lib:$LD_LIBRARY_PATH
./configure --prefix=/usr/local/netcdf-fortran-4.5.3
make -j$(nproc)
make check
sudo make install
将以下环境变量添加到~/.bashrc:
bash复制# NetCDF环境变量
export NETCDF_C=/usr/local/netcdf-c-4.7.4
export NETCDF_F=/usr/local/netcdf-fortran-4.5.3
export PATH=$NETCDF_C/bin:$NETCDF_F/bin:$PATH
export LD_LIBRARY_PATH=$NETCDF_C/lib:$NETCDF_F/lib:$LD_LIBRARY_PATH
export CPPFLAGS="-I$NETCDF_C/include -I$NETCDF_F/include $CPPFLAGS"
export LDFLAGS="-L$NETCDF_C/lib -L$NETCDF_F/lib $LDFLAGS"
CESM2的构建系统依赖Perl和一些XML处理模块:
bash复制# 安装Perl
wget https://www.cpan.org/src/5.0/perl-5.32.1.tar.gz
tar -xzvf perl-5.32.1.tar.gz
cd perl-5.32.1
./Configure -des -Dprefix=/usr/local/perl-5.32.1
make -j$(nproc)
sudo make install
配置Perl环境变量:
bash复制export PERL=/usr/local/perl-5.32.1
export PATH=$PERL/bin:$PATH
export PERL5LIB=$PERL/lib:$PERL/lib/perl5:$PERL5LIB
安装XML相关Perl模块:
bash复制sudo $PERL/bin/cpan install XML::NamespaceSupport XML::SAX XML::SAX::Base XML::LibXML
ESMF(Earth System Modeling Framework)是CESM2的重要组件:
bash复制git clone -b ESMF_8_0_0 https://github.com/esmf-org/esmf.git esmf-8.0.0
cd esmf-8.0.0
export ESMF_DIR=$(pwd)
export ESMF_INSTALL_PREFIX=/usr/local/esmf-8.0.0
export ESMF_NETCDF="split"
export ESMF_NETCDF_INCLUDE=$NETCDF_C/include
export ESMF_NETCDF_LIBPATH=$NETCDF_C/lib
make -j$(nproc)
make check
sudo make install
配置ESMF环境变量:
bash复制export ESMF=$ESMF_INSTALL_PREFIX
export PATH=$ESMF/bin:$PATH
export LD_LIBRARY_PATH=$ESMF/lib:$LD_LIBRARY_PATH
现在可以获取CESM2源码并进行配置:
bash复制mkdir -p ~/cesm && cd ~/cesm
git clone -b release-cesm2.1.3 https://github.com/ESCOMP/CESM.git
cd CESM
./manage_externals/checkout_externals
创建自定义机器配置文件:
bash复制cd cime/config/cesm/machines
cp config_machines.xml config_machines.xml.backup
编辑config_machines.xml,添加以下内容(根据你的实际路径修改):
xml复制<machine MACH="custom">
<DESC>Custom CentOS 7 build</DESC>
<OS>LINUX</OS>
<COMPILERS>gnu</COMPILERS>
<MPILIBS>openmpi</MPILIBS>
<CIME_OUTPUT_ROOT>/path/to/cesm/cases</CIME_OUTPUT_ROOT>
<DIN_LOC_ROOT>/path/to/input/data</DIN_LOC_ROOT>
<GMAKE>make</GMAKE>
<GMAKE_J>8</GMAKE_J>
<environment_variables>
<env name="NETCDFROOT">/usr/local/netcdf-c-4.7.4</env>
<env name="HDF5_PATH">/usr/local/hdf5-1.8.21</env>
</environment_variables>
</machine>
在编译过程中可能会遇到以下问题:
依赖库版本冲突:
环境变量配置错误:
echo $PATH和echo $LD_LIBRARY_PATH检查路径权限问题:
--prefix指定用户目录sudo,但要注意后续使用权限内存不足:
bash复制make -j$(nproc) LDFLAGS="-Wl,--no-as-needed"
Fortran模块问题:
FC和F77环境变量设置正确完成所有安装后,可以通过以下命令验证环境:
bash复制# 检查HDF5
h5cc -showconfig
# 检查NetCDF
ncdump -h /usr/local/netcdf-c-4.7.4/share/man/man3/netcdf.3
# 检查ESMF
ESMF_RegridWeightGen --help
如果所有命令都能正常执行并显示版本信息,说明环境配置成功,可以开始使用CESM2进行模型运行和研究了。