以在虚拟机中安装lubuntu24.04和使用lubuntu编译WRFV4和WPS
写在前面
1.为什么要以lubuntu为基础linux系统编译wrf和wps?
当然是有趣首要的目的是基于mpi编译而言,lubuntu相较于其他的linux系统而言最为合适。相比于Centos系,Centos7已经失去了支持,Centos8太新,且gcc最低版本仅可以选择11,通过本人的测试其无法完成对mpich编译(经过本人测试gcc13又可以编译了,估计是bug给修好了)。对于Ubuntu系来说,其最大的一个优点就是可以自由选择gcc和g++的版本(最低支持到gcc-9),但Ubuntu太过臃肿,对于新入门的初学者而言配置要求较高(特别是在虚拟机环境中运行)。
简而言之,使用lubuntu有以下几个优点:
- 轻量化
- 依托于apt包管理器,构建较为简单(如果有root权限,大多包可以直接安装而不用编译安装)
- gcc版本可自由选择
- 拥有教程(本教程)
2. 本教程使用的编译器
本教程使用mpich编译器对相关的库和wps、wrf进行编译。当然,各位读者也可以使用别的编译器(如Intel的ifort或者英伟达的HPC等),但相关的参数可能因为编译器不同而需要额外调节,本教程能力有限,请有相关需要的读者参考对应的资料。
3. 编译wrf和wps的步骤
- 下载安装必要的依赖库和编译软件(gcc、g++、make等等)
- 下载指定版本的zlib、mpich、HDF5、netCDF(C & Fortran)和JASPER以及LIBPNG包,并分别进行编译安装。
- 分别下载WRFV4和WPS并进行编译
- 下载GEOG数据,并在namelist.wps中启用
教程正文
说明
- 本教程的除了zlib、mpich、HDF5、netCDF以及最终的WPS和WRFV4外,其他库和依赖均采用lubuntu自带的或conda包管理器进行安装,如果读者采用的是大型机,没有管理员权限且缺失相应的包,请自行搜索相应的包的编译安装方法代替使用包管理器进行安装,本教程不再赘述。
- 本教程不涉及虚拟机的安装等步骤,如有需要,请自行搜索相应的教程,且本教程仅使用于虚拟机的安装,未测试使用实体机安装的效果,如果采用实体机,请自行测试教程安装效果。
如何开始
关于虚拟机软件的安装这里就不再赘述,不过请务必留至少50G的存储空间供给虚拟机使用,因为就地形数据而言就需要占29G的空间,太少可能后期不够用。推荐80G及以上,才不用担心后期的储存不够用而扩容的问题。且虚拟机设置的内存推荐大于8G,处理器核心数量推荐大于8核。
1. 安装lubuntu和设置安装虚拟机工具
1.1. 安装lubuntu
将下载好的lubuntu镜像文件地址输入到VM虚拟机中的虚拟光驱中。
配置好后启动虚拟机,进入安装引导界面,此时之间敲回车即可
此时耐心等待进入安装界面即可。
选择语言为中文并点击”Install Lubuntu“以进行下一步
此时耐心等待,即可进入正式安装步骤。
进入安装界面后,点击下一步,地点和键盘布局设置也不需要更改,接着点击下一步。进入Customize选项后勾选如下的选项并点击下一步。
如果你目前是Linux初学者,请直接选择第一项,将硬盘分为一个区并初始化挂载点,如果你已经有了一定的Linux使用经验的化可以自己手动分区并设置挂载点(不过老手应该早就跳过这个Linux 的安装步骤了)
下一步为设置用户信息和密码,这里根据你自己的喜好设置即可,但请一定要记住你设置的密码,之后登陆和使用sudo获取管理员权限均使用的是这个密码,设置完后点击下一步。
然后点击安装,等待安装完成即可。
完成后按照提示点击重启,重启过程中可能会提示按enter键继续,按照提示操作即可。
1.2. 虚拟机vmtool配置
进入系统后输入之前设置的密码登陆系统(所以设置的密码一定要记住)。成功进入系统后即可开始虚拟机工具的配置。
点击Vmware顶部的窗口的“虚拟机-安装VMware Tools工具”并点击弹出窗口的“是”加载安装虚拟光驱。
此时打开lubuntu自带的文件管理器即可发现多出了一个虚拟光驱,将光驱中的VMwareTools-10.3.23-16594550.tar.gz(可能名字有所不同,就是第一层目录里的.tar.gz文件)复制到工作文件夹中(/home/用户名/ 文件夹)中,并在该目录中打开终端。
运行下列命令解压并安装VMTools:
$ tar -xzvf VMwareTools-10.3.23-16594550.tar.gz # 换成你复制的文件的名字
$ cd vmware-tools-distrib/
$ sudo ./vmware-install.pl # 需要输入密码
建议重启虚拟机再进行下一步。
安装open-vm-tools-desktop最终完成对虚拟机的配置。
$ sudo apt-get install open-vm-tools-desktop
安装过程中会提示是否替换原配置文件,均选择y。配置完成后重启,此时在虚拟机上复制的内容可以直接粘贴到物理机上,文件也可以直接拖拽,反之亦然。
自此完成了lubuntu的安装和虚拟机的配置。
2. 编译前准备
在进行编译前,可以先安装相应的gcc和g++并启用,以及make等编译必须的依赖,同时创建wrf的构建文件夹等初始工作以便后续步骤可以顺利进行。
2.1 安装依赖
首先安装必要依赖
$ sudo apt-get install gcc g++ # 安装gcc和g++
$ sudo apt-get install make # 安装make
$ sudo apt-get install gfortran # 安装gfortran
$ sudo apt-get install csh ksh m4 # 安装csh、ksh、和m4
$ sudo apt-get install libxml2
$ sudo apt-get install libxml2-dev #安装libxml2
若安装成功,执行gcc --version
则会有如下的打印内容:
官方版本的WRF安装手册此时将会有个对gcc等编译工具的测试步骤,但经由apt包管理器安装的gcc和gfortran一般不会出现错误,因此该步骤可以忽略。
2.2 创建目录和下载依赖源文件
回到工作目录,创建WRF_BUILD
、WRF_LIBS
以及Source
三个目录,其中WRF_BUILD
是最后构建的WRF、WPS所在的目录。WRF_LIBS
存放编译安装好的依赖文件。Source
存放下载来的源文件。
$ cd ~
$ mkdir WRF_BUILD WRF_LIBS Source
$ cd ./Source
进入到Source目录后,使用wget下载所需要的所有依赖,这里建议下载和教程中一致的版本,否则很有可能在编译时出现问题。
$ wget https://www.zlib.net/zlib-1.3.1.tar.gz # 下载zlib
$ wget https://www.mpich.org/static/downloads/3.4/mpich-3.4.tar.gz # 下载mpich
$ wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.5/src/hdf5-1.10.5.tar.gz # 下载hdf
$ wget https://downloads.unidata.ucar.edu/netcdf-c/4.9.2/netcdf-c-4.9.2.tar.gz # 下载netCDF-c
$ wget https://downloads.unidata.ucar.edu/netcdf-fortran/4.5.3/netcdf-fortran-4.5.3.tar.gz # 下载netCDF-Fortran
$ wget http://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/jasper-1.900.1.tar.gz # 下载jasper
$ wget http://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/libpng-1.2.50.tar.gz #下载libpng
$ for item in *.tar.gz;do tar -xzvf $item;done # 解压所有压缩包
2.3 加载必要的环境变量
在所有编译工作进行前,需要先加载一些环境变量,以便编译可以顺利进行。
$ vim ~/.bashrc # 打开当前用户的依赖配置文件
# 不会使用vim的也可以使用更简单的nano代替,或是学习一下vim的使用
# 接着在打开的文件最下面加入如下的命令
export LIBBASE=$HOME/WRF_LIBS
export NETCDF=$LIBBASE
export ZLIB=$LIBBASE
export HDF5=$LIBBASE
export JASPER=$LIBBASE
export PHDF5=$LIBBASE
#退出vim后执行下列命令来立刻应用环境变量
$ source ~/.bashrc
自此,便完成了编译之前的所有准备
3.编译和安装依赖
3.1 编译mpich
mpich 并不是WRF运行的必须库文件,也有例如HPC和ifor等竞品,甚至WRF可以直接使用gfortran进行编译安装(但是这样编译就不能计算多层嵌套了),但由于其开源、免费以及便于编译安装,能够使用WRF全功能等原因,本教程使用mpich进行对其他依赖以及WRF和WPS的编译安装。下面将开始安装此并行计算库。
$ cd mpich-3.4/ #进入目录
$ ./configure \-prefix=$LIBBASE/mipch --with-device=ch4:ofi --with-device=ch3 FFLAGS=-fallow-argument-mismatch --with-included-apr #进行编译前的配置
$ make # 编译
$ make install # 编译安装
在编译安装好后还需要导入mpich的环境变量,以便在下面的编译中使用。
$ vim ~/.bashrc
# 打开文件,在最后加入下列命令
export PATH=$LIBBASE/mpich/bin:$PATH
export FC=mpifort
export CC=mpicc
export CXX=mpicc
export F77=mpif77
# 退出vim
$ source ~/.bashrc #记得在当前终端生效
若构建和安装顺利,则此时执行mpicc --version
会显示下面的信息:
zlib的编译安装较为简单,不需要额外的参数即可编译安装成功。
$ cd ../zlib-1.3.1/
$ ./configure --prefix=${LIBBASE}
$ make
$ make install
编译安装hdf5需要在make后单独做一步检查,以确定编译正确。
$ cd ../hdf5-1.10.5/
$ ./configure --prefix=${HDF5} --enable-parallel --with-zlib=${ZLIB} --enable-fortran --enable-shared
$ make
$ make check #编译后检查,如果出现问题,可以试试重新编译
$ make install #安装
然后开始安装netCDF-C和netCDF-Fortran,从某个版本开始,netCDF分为了这两个版本,该教程将从netCDF-C先开始安装。
在编译之前,需要先通过apt安装curl-dev依赖,不然netCDF不能正确编译。
$ sudo apt-get install libcurl4-openssl-dev # 安装依赖
接着开始正式编译安装。
$ cd ../netcdf-c-4.9.2/
$ ./configure --enable-shared --enable-parallel-tests --enable-netcdf4 --disable-filter-testing --disable-dap --prefix=${NETCDF} CC=mpicc CPPFLAGS="-I${HDF5}/include" LDFLAGS="-L${HDF5}/lib" # 配置编译内容,请不需要在可以编译的情况下随意修改,不然在编译构建WRF时很可能出错
$ make
$ make install
若安装成功,会显示下面的提示:
接着编译netCDF-Fortran
$ cd ../netcdf-fortran-4.5.3/
$ ./configure --enable-parallel-tests --enable-shared --prefix=${NETCDF} CPPFLAGS="-I${NETCDF}/include" LDFLAGS="-L${NETCDF}/lib" LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${NETCDF}/lib LIBS="-lnetcdf -lhdf5_hl -lhdf5 -lz" # 同样非必要别乱改
$ make #注意如果make check则会测试失败,进而导致编译失败,但正常make可以通过,且对后续安装没有影响
$ make install
同样安装成功会有如下信息:
Jasper和Libpng的安装较为简单,与上面一致。
$ cd ../jasper-1.900.1/ # 编译安装jasper
$ ./configure --prefix=$LIBBASE
$ make
$ make install
$ vim ~/.bashrc #这时需要添加环境变量,同上
export JASPERLIB=$LIBBASE/lib
export JASPERINC=$LIBBASE/include
$ source ~/.bashrc # 同上
$ cd ../libpng-1.2.50/ #开始安装libpng
$ ./configure --prefix=$LIBBASE
$ make
$ make install
全部安装完毕后需要先对netCDF和HDF5进行测试,确认功能正常后再正式进入WRF和WPS的安装。
3.2 测试依赖可用性
由于netCDF和mpi在WPS和WRF的构建中至关重要,因此需要有一定的方法测试这两个依赖编译安装的正确性,好在WRF给我们提供了相关的测试文件,仅需下载运行即可进行测试
$ cd ~ # 回到工作目录
$ mkdir TEST # 创建测试文件夹
$ wget http://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/Fortran_C_NETCDF_MPI_tests.tar # 下载提供的测试样例
$ tar xvf Fortran_C_NETCDF_MPI_tests.tar # 解包测试文件
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${LIBBASE}/lib #临时导入环境变量
$ cp ${NETCDF}/include/netcdf.inc . # 复制依赖到当前目录
$ gfortran -c 01_fortran+c+netcdf_f.f
$ gcc -c 01_fortran+c+netcdf_c.c
$ gfortran 01_fortran+c+netcdf_f.o 01_fortran+c+netcdf_c.o -L${NETCDF}/lib -lnetcdff -lnetcdf
$ ./a.out #测试
若执行完后出现如下的信息,则表示netCDF编译安装正确:
接着进行对mpi的测试
$ mpif90 -c 02_fortran+c+netcdf+mpi_f.f
$ mpicc -c 02_fortran+c+netcdf+mpi_c.c
$ mpif90 02_fortran+c+netcdf+mpi_f.o 02_fortran+c+netcdf+mpi_c.o -L${NETCDF}/lib -lnetcdff -lnetcdf
$ mpirun ./a.out #同样输入命令进行测试
同样如果编译安装成功会有如下显示:
若netCDF和mpi均测试成功,则可以进入最重要的WPS和WRF的编译安装步骤。
4. 编译和安装WPS和WRF
4.1 下载WPS和WRFV4
本教程将编译安装WPS4.4和WRF4.4.2,其他版本由于作者本人并未测试过,但若大版本不变步骤应该是一致的
$ cd ~/WRF_BUILD/ #进入之前创建的WRF构建目录
$ wget https://github.com/wrf-model/WRF/releases/download/v4.4.2/v4.4.2.tar.gz # 下载 WRF4.4.2
$ wget https://codeload.github.com/wrf-model/WPS/tar.gz/refs/tags/v4.4 # 下载 WPS4.4
首先进行WRF的编译安装,在编译前,需要一些前期准备,否则将会编译失败
$ sudo apt-get install libtirpc-dev # 安装WRF所需依赖
$ tar xzvf v4.4.2.tar.gz #解压WRF
然后编译安装WRF
cd WRF
./configure #配置编译方式
此时会出现如下界面:
鉴于本教程以mpich为编译器,因此选择34作为编译方式,然后选择1(基础设置)。配置完成后,输入命令./compile em_real >& compile.log
即可开始编译,此时编译可能需要一定的时间,时间视给虚拟机的配置而定,若编译不成功,可以去compile.log中寻找出错原因,若编译正确完成,则cat compile.log
后有如下信息:
或者也可以使用ls查看是否有生成相应的exe文件
最后编译WPS,在此之前,需要导入WRF的环境变量。自此,本教程的主要部分就完成了:
$ vim ~/.bashrc #末尾加上环境变量
export WRF_DIR=$HOME/WRF_BUILD/WRF #导入环境变量
#退出vim
$ source ~/.bashrc
$ cd .. # 从wrf目录中出来
$ tar xzvf v4.4 #解压下载好的WPS
$ cd WPS-4.4/ # 进入WPS目录
$ ./configure
和WRF编译一样,会出现选择界面让你选择,这时候需要选择第3项
最后进行WPS编译
$ ./compile >& compile.log
该编译较快,若编译成功,ls -l | grep .exe
查看生成的exe文件会出现如下信息:
即生成了geogrid、ungrib和metgrid三个WPS预处理数据的程序。
若你能够做到这里,恭喜你,对于WRF和WPS的安装已经完成,后文的下载地形数据以及安装ncl均为非必须项,你可以使用自己的地形数据,也可以使用wrf-python等进行后处理。
5.(附) 下载地形数据
首先进入WRF和WPS同级目录,即为WRF_BUILD
目录之中
$ cd ~/WRF_BUILD/
$ wget http://www2.mmm.ucar.edu/wrf/src/wps_files/geog_high_res_mandatory.tar.gz # 下载地形数据,该数据比较大(29G),需要耐心等待
$ tar xzvf geog_high_res_mandatory.tar.gz #解压文件
解压完成后配置WPS的namelist.wps文件,找到geog_data_path
项,将其改成geog_high_res_mandatory解压后的WPS_GEOG
目录的位置即可。
6. (附)使用MiniConda安装ncl
ncl是对WRF输出数据进行后处理较为好用的程序,在linux中,可以使用MiniConda安装该程序
$ cd ~ # 进入工作目录
$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh # 下载miniconda
$ sh Miniconda3-latest-Linux-x86_64.sh # 运行安装程序
此时叫你按Enter键继续,然后还需要看完所有条款才能继续,可以使用PgDn键翻页到最下方,输入yes回车继续,然后回车安装到默认位置即可。
在使用之前,需要先配置环境变量
vim ~/.bashrc #把下面的内容粘在最末尾
export PATH=$HOME/miniconda3/bin:$PATH
# 退出vim
$ source ~/.bashrc
$ conda init # 初始化conda
此时输入conda -V
即可显示出其版本号。
最后开始安装ncl
$ conda update -n root --all #更新包
$ conda create -n ncl_stable -c conda-forge ncl # 创建名为ncl_stable 环境并安装ncl
自此ncl就安装完成了,如果以后需要运行ncl绘图代码,则需要先进入ncl_stable环境,具体进入方法为:
source activate ncl_stable #激活环境
此时在命令行最左侧会有显示环境名的括号存在,如下图所示:
自此全部安装均已完成,WPS和WRF均可使用。恭喜!
参考文章
https://github.com/agumartina/WRFv-4.1.2-Configure-on-CentOS8
https://beltxman.com/3874.html