ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Materials Studio 2020 Linux安装排错指南:从依赖库到License与Gateway

Materials Studio 2020 Linux安装排错指南:从依赖库到License与Gateway 用了这么多年Linux环境下的科学计算软件Materials Studio 2020的安装依然是我见过看起来简单、实际坑最多的典型。很多新手管理员拿到的只是一句解压后运行Install脚本结果从依赖报错折腾到License起不来一整天搭进去最后发现只是少装了一个没人提起的库。这篇东西把我反复踩过的坑、以及帮别人排过的错整理成一条完整流程从依赖包到许可证配置再到Gateway全部按实际操作顺序来写照着做基本能避开九成的问题。1. 安装前先搞清楚三件事安装包结构、发行版兼容与系统账户1.1 MS 2020的组件结构先明白装的是什么Materials Studio 2020在Linux下不是单一程序而是由三部分构成License Pack许可证服务端、Gateway网关/任务提交服务、Client客户端核心程序。很多教程直接说运行Install脚本其实Install脚本只是总入口内部会按照交互选项依次调用Install_License和Install_Gateway。搞清楚这个结构非常重要因为它直接决定了排错时的排查顺序——License都没起来装Client毫无意义Gateway没配好Client装得再好也提交不了任务。我建议的安装顺序是固定的先装License Pack再装Gateway最后装Client。这个顺序不是随便定的——Gateway安装过程中会检测License服务是否存活Client安装时会检测Gateway是否可用倒着来很可能会触发一些奇怪的自动配置行为。1.2 发行版兼容性官方支持列表和实际表现是两回事BIOVIA官方声明支持的Linux发行版主要是RHEL和SUSE具体到MS 2020Red Hat Enterprise Linux 7.x/8.x是主力测试环境。但在国内高校和科研院所的实际环境里CentOS 7、Ubuntu 18.04/20.04才是真正的主流。CentOS 7本身兼容RHEL基本没有问题Ubuntu/Debian系则需要补齐一堆官方测试环境里不会遇到的依赖库装也能装只是要在依赖包上多花时间。有一个容易忽略的硬性条件MS 2020对glibc版本有要求太老的系统比如CentOS 6装不上太新的发行版比如Ubuntu 22.04、Fedora 38则容易在libstdc新版本上出兼容问题。我实测下来最省心的组合是CentOS 7.9、RHEL 7.9或Ubuntu 18.04/20.04这几个系统上MS 2020的稳定性明显更好。1.3 安装账户选错后面全是麻烦MS 2020官方文档建议不要用root安装这一点我强烈建议遵守而且原因不只是安全。License Pack安装时会让你指定一个运行服务的系统账户Gateway服务也会以特定账户身份常驻。如果当时用了root后续服务的管理、日志权限、普通用户提交作业都会遇到奇怪的权限问题。我习惯的建法是这样useradd -m -d /home/msi -s /bin/csh msi passwd msi注意这里专门指定了csh作为登录shell因为MS自带的环境配置脚本和部分工具是为csh/tcsh设计的。虽然bash下也能用但csh能少很多语法不兼容的小毛病。安装和后续所有配置都切到这个账户下操作能让权限问题几乎清零。2. 依赖包缺失是安装脚本报错里的高频元凶逐个对照补全2.1 官方依赖清单与各发行版的包名对照MS 2020安装过程中会检查一系列系统库和工具但检查并不全面——有些模块用到的库安装脚本根本不检测直到你运行某个具体功能时才暴露出来。先看这张对照表把常用发行版的依赖一次补齐依赖项CentOS/RHEL 7.xUbuntu 18.04/20.04说明csh/tcshcsh tcshcsh tcshMS内部脚本大量使用csh语法libX11libX11 libX11-devellibx11-dev libx11-6GUI基础库libXextlibXext libXext-devellibxext-dev libxext6X扩展库libXftlibXft libXft-devellibxft-dev libxft2字体渲染libXmulibXmu libXmu-devellibxmu-dev libxmu6某些工具组件依赖libGLUlibGLU libGLU-devellibglu1-mesa libglu1-mesa-devOpenGL工具库libXplibXp libXp-devellibxp6需手动下载老包老GUI组件依赖最容易缺libstdclibstdc libstdc-devellibstdc6 libstdc-6-devC标准库gnuplotgnuplotgnuplot部分绘图功能需要flex/bisonflex bisonflex bison部分建模工具需要libXp是这里面最坑的一个。它在现代Linux发行版里基本被淘汰了CentOS 7的默认仓库里还有但Ubuntu 18.04之后就没有官方包了只能去archive.ubuntu.com找老版本的deb文件手动安装。如果你在Ubuntu上装MS 2020建议提前把它处理掉否则很可能在运行某些老模块时突然报缺库。2.2 Ubuntu/Debian系额外需要处理的兼容问题在Ubuntu上安装除了上面表格里的包还要注意两件事。第一是libmotif系列某些图形工具还引用老Motif组件直接搜openmotif或libmotif安装第二是确保系统装了fonts和xfonts基础包否则界面中文/特殊字符会显示成方块。还有一个不算依赖、但经常被忽略的MS 2020安装时对swap空间有要求交互式检查如果发现swap不够会直接中止。我一般建议至少配置4GB以上的swap在内存较小的服务器上这一步能省掉很多莫名其妙的Installation failed。2.3 缺库的完整排查链路不靠猜靠命令说话很多人在安装报错时喜欢反复重跑Install脚本这是效率最低的办法。正确做法是看安装日志MS会把每一步的检查结果写进安装目录下的日志文件。我习惯第一时间执行grep -iE error|warn|fail|missing $MS_INSTALL_ROOT/Install/install.log如果是安装完成后运行时才报缺库就用ldd逐一检查ldd /opt/msi/MaterialsStudio2020/bin/某程序 | grep not foundldd输出里显示not found的就是缺失的库。拿到库名后再查询它属于哪个包。CentOS系直接用yum provides */libXp.so.6Ubuntu系用apt-file没有的话先apt install apt-fileapt-file search libXp.so.6查到包名后装好再重新ldd验证缺什么补什么链路非常清晰。有一次帮同事排查DMol3无法启动的问题就是用ldd查出缺libXp.so.6一条命令定位两分钟解决比反复重装系统快得多。2.4 64位系统上的32位兼容库问题这个坑在纯计算节点上尤其隐蔽。MS 2020的部分计算模块和并行组件仍然是32位编译的在纯64位系统上直接运行会报cannot execute binary file: Exec format error但这个报错经常被误判成文件损坏或权限问题。解决办法是在系统层面开启多架构支持。CentOS/RHEL系执行yum install glibc.i686 libstdc.i686Ubuntu系执行dpkg --add-architecture i386 apt-get update apt-get install libc6:i386 libstdc6:i386装完之后不需要重启直接验证相应模块能否正常启动。如果服务器上同时跑其他科学计算软件多架构支持一般不会产生副作用但如果你对系统极简有强迫症也可以只在需要运行MS计算模块的节点上装。3. 许可证配置License Pack安装与服务启动的全链路排错3.1 License Pack安装的正确姿势License Pack是整条链路里最容易出问题、也最让人抓狂的部分。官方提供的安装包里有一个Install_License脚本运行后是交互式问答核心是让你指定license文件路径和运行服务的系统账户。我建议把许可证文件放到独立目录不要放在安装包解压目录里mkdir -p /etc/msi chown msi:msi /etc/msi许可证文件本身是纯文本格式大致为SERVER 主机名 MAC地址 27000 VENDOR msi USE_SERVER其中SERVER行的第二个字段是主机名第三个字段是MAC地址第四个是端口号。这个文件必须和你的服务器实际信息完全匹配否则FlexNet服务起来也会立刻失败。3.2 MAC地址绑定多网卡服务器最容易踩的雷License绑定的是服务器物理网卡的MAC地址但问题在于服务器往往不止一块网卡。我在实际工作中见过一台机器有eth0、eth1、bond0、还有虚拟化平台生成的虚拟网卡而license文件里绑定的MAC地址和FlexNet服务实际读取到的不是同一个导致服务怎么都起不来。正确做法是安装前先确认系统里的所有网卡和MACip link或者ifconfig -a把输出里所有MAC地址列出来跟license授权方核对清楚。如果服务器在虚拟化平台上VMware、KVM还要注意虚拟网卡的MAC是否稳定有些平台在迁移后MAC会变化导致license突然失效。这是我见过的最隐蔽的问题之一——表面看是License服务挂了实际上是虚拟网卡的MAC变了。FlexNet服务启动后可以用lmstat命令查看它到底在用什么MAC地址/opt/msi/LicensePack/linux/bin/lmstat -a如果服务和license文件绑定信息不一致需要重新申请license文件或者在系统层面对网卡顺序做调整而不是在MS层面硬改。3.3 lmgrd服务启动失败端口、防火墙与systemdLicense Pack的核心守护进程是lmgrd它读取license文件并启动msi厂商守护进程。最常见的启动失败原因有三个。第一是端口被占用。license文件里SERVER行指定的端口如果和本机其他服务冲突lmgrd会直接崩溃。排查方式netstat -tlnp | grep 27000第二是防火墙没有放行。很多人装好后在客户端连接时报Unable to connect to license server授权错误码-15,570第一反应是License服务挂了实际上很多时候防火墙把TCP/UDP端口都挡了。CentOS 7默认firewalldUbuntu默认ufw需要显式放行license文件里指定的端口firewall-cmd --permanent --add-port27000/tcp firewall-cmd --permanent --add-port27000/udp firewall-cmd --reload第三是systemd服务配置不规范。很多教程建议把lmgrd启动命令写进rc.local这在现代systemd系统上经常不生效。我建议写一个标准的systemd服务文件[Unit] DescriptionMSI License Server Afternetwork.target [Service] Typeforking Usermsi Groupmsi ExecStart/opt/msi/LicensePack/linux/bin/lmgrd -c /etc/msi/msi.lic -l /var/log/flexlm.log ExecStop/opt/msi/LicensePack/linux/bin/lmutil lmdown -c /etc/msi/msi.lic Restarton-failure PIDFile/var/run/lmgrd.pid [Install] WantedBymulti-user.target写入/etc/systemd/system/msi-license.service后执行systemctl daemon-reload systemctl enable msi-license systemctl start msi-license日志输出到/var/log/flexlm.log排查时直接看这个文件比看systemctl status更直观——FlexNet的报错信息会写明具体是MAC不匹配、端口冲突还是license文件格式错误。3.4 多版本License共存的处理思路实验室里Linux工作站上同时存在Materials Studio 8.0、2017、2020的情况非常普遍而不同版本的License Pack共享部分FlexNet组件直接按默认端口装第二个版本时后装的会覆盖前装的配置导致旧版本全部无法使用。解决思路是隔离每个版本使用独立的安装目录、独立的license文件和独立的端口。比如MS 2020用27000端口MS 8.0用27001端口在各自license文件的SERVER行指定端口。启动时各自的lmgrd按对应端口启动互不干扰。客户端连接时通过环境变量MS_LICENSE_*指定各自要连的端口这样多版本共存就没有问题了。4. Gateway与客户端环境变量装好了不代表能用4.1 Gateway的角色和安装细节如果把MS 2020的架构比作一个远程实验室License是门禁系统Gateway就是传送带——它负责接收Client提交的任务交给计算节点执行再把结果传回去。Gateway装不好最典型的表现是客户端启动正常但提交任务时报Error: Unable to locate Materials Studio Gateway或者一直停留在排队状态。Gateway安装时会询问两件事运行Gateway的系统账户和监听端口默认18888/18889。运行账户建议和License服务账户统一为msi避免两个服务因权限不一致产生互相访问的问题。端口方面18888是HTTP端口18889是任务通信端口两个TCP端口都要在防火墙里放行。装完Gateway后可以用一个非常简单的方法验证是否正常工作在浏览器里访问http://服务器IP:18888如果能看到Gateway的管理页面说明HTTP层是通的如果打不开先查防火墙再查Gateway进程是否存活。4.2 环境变量配置的完备清单环境变量配置不当是装好了但用不了的另一个高频原因。MS 2020需要设置的核心环境变量包括export MS_INSTALL_ROOT/opt/msi/MaterialsStudio2020 export PATH$MS_INSTALL_ROOT/bin:$PATH export LD_LIBRARY_PATH$MS_INSTALL_ROOT/lib:$LD_LIBRARY_PATH export MS_GATEWAY_HOSTlocalhost其中MS_GATEWAY_HOST最容易忽略——如果Gateway装在其他机器上这里要写那台机器的主机名或IP。默认情况下客户端连接本机Gateway但很多集群架构中Gateway独立部署在登录节点Client装在计算节点不设置这个变量就会一直报找不到Gateway。官方提供了一条更省事的环境变量初始化命令安装目录下有一个msienv脚本source /opt/msi/MaterialsStudio2020/etc/msienv.sh如果登录shell是csh/tcsh就用msienv.csh。我在实际环境中一般会把msienv.sh的source命令追加到/etc/profile.d/下这样所有用户登录时都会自动加载echo source /opt/msi/MaterialsStudio2020/etc/msienv.sh /etc/profile.d/ms2020.sh注意权限要可读。这样新用户登录后直接能跑msi命令不需要挨个手动配置。4.3 DISPLAY与X转发远程GUI的坑很多人在Windows上用Xmanager或MobaXterm登录Linux服务器跑MS的图形界面结果打开是黑屏或者直接报Cannot open display。这个问题的根源不在MS而在X11转发链路。首先确认SSH服务允许X11转发检查/etc/ssh/sshd_configX11Forwarding yes其次系统里要装xauthyum install xorg-x11-xauth # CentOS/RHEL apt install xauth # Ubuntu最后在本地SSH客户端里启用X11转发MobaXterm默认开启Xshell需要勾选转发X11连接。如果你是通过跳板机再SSH到计算服务器还需要在跳板机上同样配置X11转发或者使用更省事的VNC方案。对于没有图形桌面的服务器我个人更推荐VNC方案。在服务器上起一个虚拟桌面客户端在浏览器或VNC客户端里访问比X11转发稳定得多尤其是在跨运营商链路、高延迟环境下X11转发卡顿严重VNC的体验会好一截。5. 安装完成后的验证方法与运行时报错速查5.1 三步验证安装是否真正成功装完不能算完必须要验证整条链路是否通畅。我一直用三个步骤做验收。第一步验证License服务lmstat -a看输出里是否包含vendor daemon status正常、各Feature状态是AVAILABLE而不是DISABLED或UNCERTIFIED。第二步验证Gateway浏览器访问 http://服务器IP:18888看到Gateway管理界面且能显示正常的服务状态。第三步运行MS客户端并提交一个简单任务。我在安装后一般会跑一个CASTEP或Forcite的单点测试一个小分子的能量计算几分钟出结果即说明整条链路Client - Gateway - License - 计算模块全部正常。5.2 运行时常见报错速查表根据我这些年帮人排查的经验下面是出现频率最高的几个报错及其对应解法报错现象根因解决措施Cannot connect to license server (-15,570)网络不通或防火墙阻挡检查端口连通性放行License端口License manager error -96License请求超时检查服务负载确认网络延迟Unable to locate Materials Studio GatewayMS_GATEWAY_HOST未设置或Gateway未启动设置环境变量确认Gateway进程存活Cannot open displayDISPLAY变量或X11转发配置问题配置SSH X11转发或用VNC方案Segmentation fault / Bus error启动GUI时32位库缺失或libGL版本冲突补齐i386兼容库调整LD_LIBRARY_PATHMSI 服务已启动但 lmstat 看不到内容lmgrd启动的用户与License文件权限不一致确认日志文件中的权限错误统一服务运行账户提交任务后一直排队无结果Gateway与调度器PBS/Slurm之间未配好确认Gateway的作业提交命令参数5.3 计算集群场景下的几个扩展建议如果MS 2020要部署在多节点的计算集群上还有三个额外的经验值得分享。第一License服务放在哪台机器上差别很大。我建议把License服务部署在登录节点因为它只需要网络连通即可不参与计算。如果放在计算节点上一旦调度器把节点变成下线状态License服务也会跟着不可用整个集群的MS用户都会遭殃。第二和调度系统集成时需要让Gateway提交作业时走bsub/qsub/sbatch命令而不是在本地直接执行。MS 2020的Gateway配置里可以指定提交命令模板具体位置在Gateway安装目录下的conf文件中。如果配置不对任务会一直占用登录节点资源集群负载完全乱套。第三并行计算环境。MS的CASTEP、DMol3等模块运行在多核并行时会读取环境变量中的MPI配置具体核数则是在客户端提交任务的对话框里设置的。有些管理员在服务器上装好了OpenMPI或Intel MPI但忘了把它加入Gateway运行用户的环境变量导致并行任务全部退化为单核运行性能完全发挥不出来。还有一个容易被忽视的点如果是在虚拟机上安装MS 2020来学习流程不建议依赖虚拟机的图形界面直接运行MS计算——虚拟化环境下的浮点性能损耗很大跑大体系会非常痛苦。我见过不少人在VMware里装好了MS然后抱怨为什么这么慢其实不是MS的问题是虚拟化层对CPU指令集和内存访问的开销。虚拟机用来熟悉安装流程和License配置是可以的正式计算还是放到物理机上。5.4 最后再分享一个排查习惯装MS 2020这类软件最忌讳的是盲试——报错一次改一次每次改动后重新跑安装流程浪费时间且无法积累经验。我的建议是安装过程中的每一步操作都留下日志记录尤其是License启动日志、Gateway日志、安装日志这三类。后续一旦出问题按时间线把日志拉出来对比定位速度会快很多。我习惯在服务器上单独建一个目录/var/log/msi-install/把每次安装、升级、排错的过程都记录进去。看似多花几分钟但下次遇到问题、或者同事遇到同类问题时直接翻日志就能复现别人的排查路径省下半天时间毫无问题。Linux下装MS 2020九成的问题集中在依赖库和License两个环节。依赖部分靠ldd一条命令就能定位License部分靠lmstat和日志两个工具就能排查。把这两套工具用熟了这一套流程走下来基本畅通无阻。如果你正卡在某个报错上不妨先把报错原文、相关日志抓出来对照上面的速查表大概率能直接找到答案。
返回列表