|
|
本帖最后由 JerryDK 于 2025-9-6 17:08 编辑
最近组内搭建集群系统,采用了Rocky Linux 9.6,在PBS已经预装并通过各项测试后,发现和PBS经常联用的maui没有安装。
论坛内已有现成的安装经验CentOS下安装PBS+maui教程 - 高性能计算、集群、并行技术 (HPC , Cluster , Parallel Computing) - 计算化学公社,本文是在该安装经验的第四部分”主节点下安装maui插件“下进行的编译过程总结。本文应该也适用于目前最新的各个linux系统,因为都是遇到新版本的GCC,sed的问题,只要能先安装上pbs torque。
【全程在root下进行】
1. Rocky Linux 9.6的GCC版本为11.2.1,sed版本为4.8,在第一步configure时就会出现因sed版本过新导致的报错。大家因此需要下载并编译sed 4.2.2(也是centos 7的sed版本)在任意一个文件夹中(不要和原本的sed 4.8产生路径冲突),之后在maui文件夹中使用4.2.2进行configure:
- PATH=/.../sed4.2.2/bin:$PATH ./configure --prefix=/usr/local/maui --with-pbs=/usr/local/torque
复制代码 PATH指向你的sed4.2.2的安装目录。
2. 成功configure后,在下一步的make遇到全局变量重复定义的问题,我认为应该是make版本过新的原因,不过通过对对应源码的更改就能解决,以下是举例。
这是其中的一个报错信息:
- /usr/bin/ld: ../../lib/libmoab.a(MSys.o):/home/.../maui-3.3.1/src/moab/MSys.c:147: multiple definition of 'MSim'; mprof.o:/home/.../maui-3.3.1/src/server/mprof.c:178: first defined here
复制代码 这是一个全局变量重复定义问题,通常是因为变量在多个源文件中没有使用 extern 声明,而是直接定义,结果导致编译器认为它们是不同的实例。解决办法:
MSys.c 作为主文件,保留定义位置;其他文件的定义位置,用vi修改,添加extern声明。
在 mprof.c 文件的178行中,改为声明:
(其实在mprof.c文件中你可以发现,很多都加了extern的声明了,只有偶尔几个没有添加导致了报错,因此要把它们补上。)
总共大概需要改几个文件中的5-6个位置,以上是一个实例。改完后,成功make,继而成功make install。
在进行下一步前,先确保/etc/rc.d/init.d/functions文件是存在的,不然maui.d进程无法启动。
3. 对没有chkconfig,使用systemctl控制进程的方法:
在进行到原文以下步数的时候:
- chkconfig --add maui.d
- chkconfig maui.d on
- echo "/usr/local/torque/lib" > /etc/ld.so.conf.d/torque.conf
- echo "/usr/local/maui/lib" > /etc/ld.so.conf.d/maui.conf
- ldconfig
- chkconfig pbs_sched off
复制代码 因为chkconfig已经不存在Rocky Linux 9.6下了,而且用dnf/yum都没办法安装chkconfig(源包已经没办法下载)的情况下,我们需要自己写一个maui.d.service文件给systemctl,让他去启动init.d/maui.d这个SysVinit的进程。直接打/etc/init.d/maui.d start会报错:
- Starting maui.d (via systemctl): Failed to start maui.d.service: Unit maui.d.service not found.
复制代码 这个说明systemctl必须要有一个maui.d.service的进程文件来启动。
我们将写一个在/etc/systemd/system/maui.d.service文件,如下:
- [Unit]
- Description=MAUI Scheduler
- After=network.target
- [Service]
- Type=forking
- ExecStart=/etc/init.d/maui.d start
- ExecStop=/etc/init.d/maui.d stop
- ExecReload=/etc/init.d/maui.d reload
- Restart=on-failure
- LimitNOFILE=infinity
- PIDFile=/var/spool/maui/maui.pid
- [Install]
- WantedBy=multi-user.target
复制代码 这其中需要留意的是PIDFile的位置,如果不写一个root能写入的位置,在默认的/run/下会遇到operation not permitted的进程启动报错:
- master systemd[1]: maui.service: can't open PID file /run/maui.pid (yet?) after start: Operation not permitted
复制代码
因此我找了一个位置(/var/spool/maui)来放这个maui.pid进程文件,这个位置是可写的(755)。
创建好进程文件之后,输入以下命令,刷新systemd配置并启动maui.d,并检查maui.service没有出错:
- systemctl daemon-reload
- systemctl enable maui.service
- systemctl start maui.service
- systemctl status maui.service
复制代码 5. 后续走完以下命令,即原文中最后的部分(将chkconfig改为systemctl):- echo "/usr/local/torque/lib" > /etc/ld.so.conf.d/torque.conf
- echo "/usr/local/maui/lib" > /etc/ld.so.conf.d/maui.conf
- systemctl stop pbs_sched
- cp etc/maui.sh /etc/profile.d/
复制代码 6. 退出root用户,返回个人用户,检查showq, checkjob等命令是否正常。
最后附上functions文件与maui.d.service文件。
|
评分 Rate
-
查看全部评分 View all ratings
|