Gaussian 16 & GaussView 6安装教程

【最近在Ubuntu服务器上安装GaussView 6频繁报错,最后发现是渲染软件的问题,只能说今天实在爆炸(此处应有大声咆哮)】

【真的,但凡Linux你统一一下系统库文件的标准命名,加一个人性化的报错提示,也不至于让我找缺失哪个包找半天】

Part I. Gaussian 16的安装与环境变量的配置

最详细的安装教程,请参考卢天(@sobereva)撰写的博客文章Gaussian的安装方法及运行时的相关问题,以下安装过程仅在此文章基础上稍加调整。

  1. 将Gaussian安装包G16-B01_DownLoadLy.iR.tar.gz放在公共软件根目录/smb/open-apps下,输入下列命令将其解压,得到文件夹g16:
tar -xzvf G16-B01_DownLoadLy.iR.tar.gz
  1. 建立一个文件夹用于储存Gaussian运行过程中产生的临时文件,位置随意。此处笔者将临时文件夹放在g16下,其位置为/smb/open-apps/g16/scratch
  2. 修改个人环境变量,以测试g16能否正常运行:用vi或者gedit等文本编辑器打开/home/lizh/.bashrc(笔者的bash环境变量),在里面加入以下语句然后保存文件。
export g16root=/smb/open-apps/
export GAUSS_SCRDIR=/smb/open-apps/g16/scratch
source /smb/open-apps/g16/bsd/g16.profile

其中,g16root环境变量用来说明Gaussian目录被放在了哪个目录下。GAUSS_SCRDIR环境变量用来说明哪个文件夹作为临时文件夹。source命令用来执行Gaussian自带的脚本文件,内含各种配置Gaussian运行环境的命令。重新进入终端使以上内容生效(如果你是用Linux图形环境,就关闭终端窗口,然后重新打开。如果你是通过ssh方式登录服务器,就断开连接,然后重新连接服务器)

  1. Gaussian目录下的Default.Route用来设定默认用的计算资源,-M-设置默认用的最大内存量(一般用MB或GB为单位),-P-设置默认用多少CPU核数来并行计算。比如我们想默认用24个核心、最大40GB内存做计算,就在/smb/open-apps/g16/Default.Route里面写入以下内容
-M- 40GB
-P- 24

此文件中的设置优先级低于输入文件里的%mem和%nproc设置。因此,输入文件里没写%mem的时候才会用这里的-M-设置,输入文件里没写%nproc的时候才会使用这里的-P-设置(如果你既没在这里设-P-也没写%nproc,那么程序只用单核计算。如果你既没在这里设-M-也没写%mem,那么G09最多用256MB内存,G16最多用800MB内存)。

  1. 为保证只有特定用户组才能使用Gaussian 16,我们可以用groupadd命令创建一个新组:
groupadd tanglab

再将每一个新用户加入进tanglab用户组(此处的(username)代表要改动的用户名):

usermod -G -a tanglab (username)

命令,之后Gaussian就可以使用了。这里-R 命令,之后Gaussian就可以使用了。这里-R ian就可以使用了。这里-R *代表对当前目录下所有文件和所有子目录下的文件都设置权限。对于其下的/scratch,由于Gaussian 16要读写此处的临时文件,因此运行chmod 775 -R /scratch,让同一用户组的所有用户都能读写此文件夹和其中的文件。

  1. 用sudo vim /etc/bash.bashrc打开bash.bashrc文件,将/home/lizh/.bashrc中写入的Gaussian环境变量复制到其中,保存后输入source /etc/bash.bashrc并运行,以设置全局环境变量。

Part II. GaussView 6的安装与环境变量的配置

  1. 将GaussView安装包gv6.tar.bz2放在公共软件根目录/smb/open-apps下,输入下列命令将其解压,得到文件夹gv
tar -xjvf gv6.tar.bz2
  1. 修改个人环境变量,以测试GaussView能否正常运行:用vi或者gedit等文本编辑器打开/home/lizh/.bashrc(笔者的bash环境变量),在里面加入以下语句然后保存文件。
export GV_DIR=/smb/open-apps/gv/
export LIBPATH=/smb/open-apps/gv
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/smb/open-apps/gv/lib
PATH=$PATH:/smb/open-apps/gv
alias gv='/smb/open-apps/gv/gview.sh'

重新进入终端,或运行source .bashrc,使以上内容生效。如果环境变量配置正确,便能正常弹出GaussView 6的工作界面。

  1. 用sudo vim /etc/bash.bashrc打开bash.bashrc文件,将/home/lizh/.bashrc中写入的Gaussian环境变量复制到其中,保存后输入source /etc/bash.bashrc并运行,以设置全局环境变量。

Part III. 故障排除:GaussView 6在图形界面下能运行,在MobaXterm的远程客户端却无法运行

然而,离奇的事情总是发生在安装完成之后——当笔者在MobaXterm的远程客户端上,向bash命令行输入gv并回车后,客户端先是卡顿片时,随后弹出一个白色小框(对应于GaussView的欢迎界面)后迅速消失,并报出如下错误:segmentation fault (core dumped)。笔者以为能在GaussView的安装根目录找到转储文件,访问gv文件夹后却一无所获。

初步排查:笔者首先怀疑是下载的安装包可能损坏,导致部分文件无法使用,于是从另一个装有GaussView 6的服务器上拷贝了整份GaussView 6,并上传到出现Bug的服务器上,以替换原来的GaussView 6。结果很可惜,运行gv命令后GaussView仍无法打开,且显示的错误仍然为segmentation fault (core dumped)。笔者随后怀疑配置的环境变量写法有问题,因此把export GV_DIR=/smb/open-apps/gv/改为export GV_DIR=/smb/open-apps/gv/bin,export LIBPATH=/smb/open-apps/gv改为export LIBPATH=/smb/open-apps/gv/lib,但重新加载环境变量文件后,发现问题仍然没有解决。

于是笔者想到:会不会在带有GUI的服务器端运行,也会出现同样的问题?于是笔者第二天一早,便登录服务器端的图形界面,并在该界面中打开终端,输入gv后回车。令人惊讶的是,执行命令后,屏幕上直接跳出了GaussView的欢迎界面,随后便加载出GaussView的菜单和绘制区域。这让我更加疑惑:既然在图形界面下能正常加载窗口,那为什么到只有文字的MobaXterm终端,GaussView就不能运行?

而后,同实验室的同学(江意达)用他自己的账户,在MobaXterm上同样试运行了gv,结果同样出现了白色方框闪现后消失,且主界面未能成功加载的错误,但是反馈的错误信息不是“segmentation fault (core dumped)”,而是“can’t connect to x11 window server using localhost:0.0”(记不清了,总之大致意思是X11未能成功连接,导致GaussView无法运行)。这样,问题基本锁定在MobaXterm上:正是MobaXterm缺乏某种必要的库文件,才导致X11无法成功连接,进而无法运行GaussView 6的图形界面。(后记:意达告诉笔者,X11没能成功连接,是因为没有登入正确账户)

但是,在昨晚的故障排查中,笔者已经装过X11相关的所有必要文件(包括库文件等),而错误仍然没有消除,因此X11不是导致故障的主要原因。由此,整个故障排查陷入僵局。

问题根源:后来,在搜寻X11导致的GaussView报错的案例时,我发现了UCSB计算中心对这一错误的介绍和解决方案

Note: As of 2016, if you are having trouble with Gaussview starting, with errors about “X11”, “XQuarta” or “OpenGL is not available”, try to type this first.

export USE_MESAGL=1

于是笔者怀疑,看起来是X11导致的GaussView 6崩溃,其实很可能是OpenGL未能正确加载所引起的结果!由于适配于Ubuntu的OpenGL,实际上为开源软件MesaGL,而GaussView在默认情况下,只会调用OpenGL,而不会调用MesaGL,因此绘制软件窗口时,就会因为没有图形引擎而无法完成,进而报错。因此,只要让GaussView启动时,自动加载MesaGL,便能正确绘制图形界面,继而消除该错误。当然,对于“图形界面下能正常加载GaussView,而纯命令行窗口不能”这一问题,笔者认为,图形界面下,OpenGL/MesaGL已经处于开启状态,当用户输入命令启动GaussView时,GaussView会自动调用启动的OpenGL/MesaGL,以加载图形窗口,因此不会报错,而纯命令行下不会自动开启OpenGL/MesaGL,因此启动GaussView会报错。

解决方案:根据上述分析,笔者很快得到了解决方案:在/home/lizh/.bashrc(本地用户环境变量)或/etc/bash.bashrc(全局环境变量)中,加入export USE_MESAGL=1,这样,即使使用的是纯命令行界面,当输入gv并回车后,也会启动系统安装的MesaGL,这样就解决了因缺乏图形引擎导致的故障。

补充说明——如何安装MesaGL库:以Ubuntu为例,首先要安装必要的编译器,这样才能在后续的安装过程中,编译源码文件:

sudo apt-get install build-essential

接着是安装OpenGL运行库(OpenGL Library,实质为MesaGL Library)

sudo apt-get install libgl1-mesa-dev

然后是安装OpenGL效用库(OpenGL Utilities,实质为MesaGL Utilities)

sudo apt-get install libglu1-mesa-dev

以及安装OpenGL效用库工具(OpenGL Utility Toolkit,实质为MesaGL Utility Toolkit)

sudo apt-get install freeglut3-dev

如果怕缺失关键的库文件,可以试着运行下列命令

sudo apt-get install libglew-dev libsdl2-dev libsdl2-image-dev libglm-dev libfreetype6-dev
sudo apt-get install libglfw3-dev libglfw3

这样应该能保证MesaGL库安装完全。

参考资料:

Ubuntu安装OpenGL

Ubuntu上安装OpenGL

Ubuntu 13.04 安装 OpenGL

OpenGL Programming/Installation/Linux

This blog is under a CC BY-NC-SA 4.0 License
本文链接:http://chemlzh.github.io/2022/11/17/Gaussian-installation-tutorial/