一种集群非root用户编译OpenFOAM的方法-基于CentOS7



  • 近期尝试了在集群环境下,使用非root用户编译OpenFOAM-7,成功了。
    主要参考了这个教程:集群系统centos7上OpenFOAM6的安装

    非root用户在集群上采用编译安装的方法往往会失败,失败的原因基本上是因为缺乏必要的运行库。:135:
    因此成功编译安装OpenFOAM的关键就是解决非root用户无法在集群上安装自己想要的库的问题。
    上述引用教程里介绍了两种方法,这里主要介绍第一种方法——依赖库方法。
    同时根据实际操作我对教程内容也进行了一点内容补充与修改。

    一、 依赖库方法编译安装OpenFOAM的思路

    建立一个与集群系统版本一致的虚拟机,将编译OpenFOAM需要的库下载到虚拟机上,将下载下来的库从虚拟机中上传到集群系统,安装库,然后就能顺利编译OpenFOAM。

    二、建立虚拟机并下载所需库

    1)建立一个与集群系统版本一致的虚拟机。查看系统版本指令:

    uname -a
    

    这个是我的集群系统的内核版本,CentOS-7
    image001.jpg
    这是虚拟机内核版本
    image002.jpg
    (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
    

    下载完成后就能在当前操作路径里看见这两个文件
    image003.png
    可以看见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的编译安装了。:chitang:

    四、编译安装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
    
    • 找到以下内容
      image004.jpg
      我的集群版本的gcc是5.3.0,因此就写成WM_COMPILER=Gcc53。

    (4)编译ThirdParty

    • 打开ThirdParty-7目录
    ./Allwmake
    

    这里我们不在集群上安装paraview,下一步直接进行本体编译。

    (5)编译OpenFOAM本体

    • 打开OpenFOAM-7目录
    ./Allwmake
    

    耐心等待,过程比较漫长,应该能顺利编译完成。:142:



  • 感谢分享!!!



  • 谢谢李老师!:yes:


Log in to reply