一种集群非root用户编译OpenFOAM的方法-基于CentOS7
-
近期尝试了在集群环境下,使用非root用户编译OpenFOAM-7,成功了。
主要参考了这个教程:集群系统centos7上OpenFOAM6的安装。非root用户在集群上采用编译安装的方法往往会失败,失败的原因基本上是因为缺乏必要的运行库。
因此成功编译安装OpenFOAM的关键就是解决非root用户无法在集群上安装自己想要的库的问题。
上述引用教程里介绍了两种方法,这里主要介绍第一种方法——依赖库方法。
同时根据实际操作我对教程内容也进行了一点内容补充与修改。一、 依赖库方法编译安装OpenFOAM的思路
建立一个与集群系统版本一致的虚拟机,将编译OpenFOAM需要的库下载到虚拟机上,将下载下来的库从虚拟机中上传到集群系统,安装库,然后就能顺利编译OpenFOAM。
二、建立虚拟机并下载所需库
1)建立一个与集群系统版本一致的虚拟机。查看系统版本指令:
uname -a
这个是我的集群系统的内核版本,CentOS-7
这是虚拟机内核版本
(2)使用yum-utils的yumdownloader下载依赖库到虚拟机,所需的库应该有gcc, openmpi, binutils, cmake, hwloc, m4, scotch, zlib, libtool, flex, bison, boost, glibc
(ps:这是根据我集群上成功编译之后所列出的OpenFOAM-7所需的依赖库列表,在实际操作的时候,集群只缺少了glibc和binutils,因此我只安装了这两个库)(这里的操作都需要root权限)
- 安装yum-utils,指令:
yum -y install yum-utils
- 使用yumdownloader下载库,这里以下载boost和binutils为例
su root yumdownloader boost binutils
下载完成后就能在当前操作路径里看见这两个文件
可以看见boost有下载了两个包,根据步骤(1)我们可以知道系统内核版本,这里是x86_64,因此保留此版本的包并上传到集群即可。三、上传依赖包至集群并安装(以binutils为例)
(1)将依赖库上传到集群并解包。
- 集中选择一个目录,比如~/packages/binutils,在里面解压包:
rpm2cpio binutils-2.27-44.base.el7.x86_64.rpm | cpio idvm
(2)将依赖包添加至~/.bashrc,添加binutils路径至文件底部
vi ~/.bashrc export PATH=$PATH:/gpfs/<username>/packages/binutils/usr/bin/
- 保存退出vim并
source ~/.bashrc
至此,第三方依赖库在集群上就安装全了,可以进行OpenFOAM的编译安装了。
四、编译安装OpenFOAM-7
编译安装的步骤与普通步骤并无区别。
(1)从官网下载OpenFOAM-7的源码包并放到主目录里的OpenFOAM目录文件夹下,即~/OpenFOAM/OpenFOAM-7/ 和~/OpenFOAM/ThirdParty-7/。
(2)将OpenFOAM-7安装路径写入~/.bashrc并source ~/.bashrc。
(3)根据集群上安装的gcc版本指定OpenFOAM的gcc编译器版本。
- 在OpenFOAM-7目录下
vi etc/bashrc
- 找到以下内容
我的集群版本的gcc是5.3.0,因此就写成WM_COMPILER=Gcc53。
(4)编译ThirdParty
- 打开ThirdParty-7目录
./Allwmake
这里我们不在集群上安装paraview,下一步直接进行本体编译。
(5)编译OpenFOAM本体
- 打开OpenFOAM-7目录
./Allwmake
耐心等待,过程比较漫长,应该能顺利编译完成。