毕设需要用到OpenFoam进行数值模拟,但是在虚拟机上运行非常卡顿,因此在集群上申请账号,并着手安装OpenFoam。但是在集群上安装有几点特殊:
集群不可以连外网
没有root权限
刚接触Linux系统,很多指令不熟悉,还面临诸多安装限制,因此在此记录,以此备忘。
OpenFoam有两种安装方式,第一,直接安装,采用直接安装步骤较简单,但是没有办法自定义编辑求解器,后期使用很麻烦;第二,源码编译安装,安装过程耗时长,但是支持自定义求解器,另外通过内网VPN传输源码包(30M)比传输安装包在网络不稳定的家里更为现实。因此采用编译安装
编译安装的基础上,还有两种思路,一种是在虚拟机上通过yum-utils中的yumdownloader下载好依赖包,传到集群上安装完成,再安装thirdparty和OpenFoam本体;另一种是在新建centos虚拟机,在虚拟机上完全安装完成后,打包移植到集群上,确保路径和用户名等一样。此次安装两种方法都试过,重点记录依赖包法,打包移植法亲测不可行,在最后略述。
从官网下载,操作步骤见源码编译安装,最好下载在主目录下,即~/OpenFOAM/
wget -O OpenFOAM-6-version-6.tar.gz http://dl.openfoam.org/source/6
wget -O ThirdParty-6-version-6.tar.gz http://dl.openfoam.org/third-party/6
解压,改名,如同官网,在此不赘述
tar -xzvf OpenFOAM-6-version-6.tar.gz
tar -xzvf ThirdParty-6-version-6.tar.gz
在~/.bashrc中添加路径source $HOME/OpenFOAM/OpenFOAM-6/etc/bashrc,完后source ~/.bashrc,但是可能会出现mpicc command not found 或者gcc的问题,先放一边。
cd ~/OpenFOAM/ThirdParty-6
./Allwmake
在执行allwmake之前最好执行一下allclean
按照官网步骤本应执行完allwmake后编译paraview,但是在编译paraview时需要临时下载安装包,在集群上下载不了。但paraview主要是负责后处理,这部分工作可以在本地操作,并且paraview的编译不影响OpenFoam本体的编译,因此略去。(在编译paraview的时候需要先安装qmake和cmake依赖包)
进入到~/OpenFOAM/OpenFOAM-6/文件夹下,执行./Allwmake
此时大概率会报错,因为缺少依赖包,在此罗列大概需要的依赖包(因为不从虚拟机传依赖包到集群再安装,步骤复杂,不确定这些是否都是必须的依赖包),其中openmpi是很重要的包,而且安装方式与其他包不同。
boost
flex
gcc
g++(gcc-c++)
glibc
zlib
openmpi
a)虚拟机上利用yum-utils下载包,再传上集群;
b)集中选择一个目录,比如~/packages/boost,在里面解压包;
rpm2cpio boost-1.53.0-27.el7.i686.rpm |cpio -idvm
rpm2cpio boost-1.53.0-27.el7.x86_64.rpm |cpio -idvm
c)添加路径;
vim ~/.bashrc
export PATH=$PATH:$HOME/packages/boost/usr/bin/
source ~/.bashrc
openmpi是用于并行计算的依赖包,如果没有openmpi,在编译OpenFoam时会出现 mpi.h:no such file or directory
的问题。另外包mpich*
也可以解决这个问题,但是openmpi和mpich*
不要同时安装,否则两者会冲突,此时可以用yum 卸载mpich*
openmpi在下载,解压过程借鉴链接,在安装过程有些许不同:
cd openmpi-3.1.0/
./configure --prefix=/home/jwang/openmpi
//如果直接configure,那默认安装在/usr/lib64/openmpi/bin下,普通用户没有访问权限,在之后的make install执行时会报recursive的错误,即没有权限安装
make
make install//默认安装configure时,这里需要加sudo执行,因为安装路径在/usr/lib64/openmpi/bin下
配置环境变量
vim ~/.bashrc //或者.bash_profile,暂时没搞懂有什么区别
export PATH=$PATH:$HOME/openmpi/bin //当你默认安装时路径应该为/usr/lib64/openmpi/bin
export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib //同理
source ~/.bashrc
此时再执行OpenFoam-6的./Allwmake,应该没有错误了,如果还有错误(可能编译一些求解器的时候报错,错误未知),可能是之前的依赖包没有装全,再检查一下依赖包的安装路径,注意字母大小写,并且再加载路径试试:
source ~/.bashrc
source ~/.bash_profile
source ~/OpenFOAM/OpenFOAM/etc/bashrc
这种方法见教程,博主在文章中讲的比较详细,应该靠谱,但是我在虚拟机安装软件完成后,打包移植到集群上不能运行,显示各种找不到链接库的错误,估计是打包解压过程中软链损坏了
最后附一些有参考意义的教程:
https://www.cnblogs.com/LSCAX/p/6247155.html
https://blog.csdn.net/lq497028254/article/details/82771318
https://blog.csdn.net/ztq157677114/article/details/49819925
https://blog.csdn.net/imyang2007/article/details/7634470
在完成OpenFOAM的编译工作后,利用OpenFOAM在集群上提交作业主要需要两个依赖包:boost及openmpi,事实上,这两个依赖包是OpenFOAM编译所需的两个重要依赖包,其他的依赖包是否真的要用到不确定。这里重新重点说明这两个依赖包的安装
可从官网上直接下载安装包,下载3.1版本即可,下载完后传到集群上。openmpi的安装借鉴链接,但是指令些许不同:
cd openmpi-3.1.0/
./configure --prefix=/home/jwang/openmpi --disable-getpwuid
make
make install
修改~/.bashrc文件:
export PATH=$PATH:/home/jwang/openmpi/bin
export LD_LIBRARY_PATH=/home/jwang/openmpi/lib:$LD_LIBRARY_PATH
说明:
1、prefix是因为不用集群/usr/当中的openmpi,如果用集群自带的openmpi(即在.bashrc文件中链接了PATH:/usr/lib64/openmpi/bin
和LD_LIBRARY_PATH:/usr/lib64/openmpi/lib),会出现无法提交作业的情况,报错代码如下。
Open MPI was unable to obtain the username in order to create a path
for its required temporary directories. This type of error is usually
caused by a transient failure of network-based authentication services
(e.g., LDAP or NIS failure due to network congestion), but can also be
an indication of system misconfiguration.
Please consult your system administrator about these issues and try
again.
原因尚不明确,估计是用VPN接入内网后,用ssh连接集群会验证身份,我不是用自己的ID登录VPN的(我还没入学,借用的师兄的ID),因此我提交作业时,通过ID验证会在师兄的账号下创建openmpi临时文件,但是我的账号没有权限访问他人的账户文件夹,因此提交作业失败。因此,需要自行编译openmpi,而--disable-getpwuid
也是为了禁止openmpi通过ssh访问用户(不确定),具体分析可看此分析。
从官网下载链接,下载的是1.73版本,按照教程安装即可
补充说明:
a) 最好不用那个解压安装包再添加路径的方法,好像没什么用
b) 依赖包先安装openmpi和boost,其他的好像不是必须的
c) .bash_profile文件不用修改