24小时热门版块排行榜    

CyRhmU.jpeg
查看: 3140  |  回复: 6

zhangguangping

木虫 (著名写手)

[交流] Molpro2012.1p13在openSUSE 10.2上安装的曲折历程已有3人参与

————记录此文,以备忘。

WARNING:升级glic-2.7的惨痛教训:集群有很多台计算节点,节点的系统安装的都是一样的。因此,升级glibc2.7时在其中一台上编译一直到make install,升级成功。ssh到别的计算节点之后,到glibc2.7的目录下,直接执行make install安装。大部分节点都成功升级了。但是有2台节点失败了。出现segment fault,并且ssh立马断开了。再次ssh,显示ssh_exchange_identification: Connection closed by remote host。从此,再也没有登陆上这两台节点。到机器房登陆也登陆不进去。最后没办法重启节点,结果可想而知,重启失败。后来想到这两台节点的时间设置的是8年前的时间(由于某些软件的原因),这种节点我们还有一台。因此,去第三台这样的节点,先把系统时间修改成当下时间,然后make install,陈功升级glibc.因此,猜测上面两台机器升级glibc失败的原因是系统时间远远落后于glibc编译目录的时间。

前几天,需要将Molpro 2012.1.p13安装到小组的计算集群上。首先介绍一下集群的基本情况。管理节点node00安装是openSUSE 11.2 (SUSE Linux Enterprise Server 11.2),而所有的计算节点是openSUSE 10.2或者10.4 (SUSE Linux Enterprise Server 10.2 or 10.4)。不要喷我们的这种构架,因为集群购买先后顺序不一样,最后整合到一起使用,所以导致了这样的局面。

在这样的构架下,选择到计算节点编译molpro代码。不管用intel Compiler 11.1-072带的ifort icc以及icpc编译还是用gfortran和gcc编译,在计算节点上总是不能顺利congfigure完成。最后只能到node00节点上尝试编译。发现在node00节点上编译非常顺利。编译步骤如下(root用户):
=====================
1.配置环境变量
source /home/software/intel/Compiler/11.1/072/bin/ifortvars.sh intel64
source /home/software/intel/Compiler/11.1/072/bin/iccvars.sh intel64
2.解压压缩包
tar -zxvf molpro.2012.1.13.tar.gz
3.配置编译参数
cd Molpro
./configure -j 6 -icc -ifort -x86_64  -mpp -noblas -nolapack -auto-ga-openmpi
上述的参数含义,可以从Installation Guide Version 2012.1得到详细解释。
在运行上述命令之前,需要在$HOME下面建立.molpro目录存放token文件。
mkdir ~/.molpro
然后将token文件拷贝到该目录下。同时,安装过程需要下载openmpi-1.8和boost_1_55_0.tar.gz,如果机器不能联网,那么自己从网上下载openmpi-1.8.tar.gz和boost_1_55_0.tar.gz放到~/.molpro/cache目录下面。
4.编译代码
make -j 6 2>&1 | tee make.log
5. 安装编译文件
make install
===========================
到此为止,编译顺利完成。
测试:/home/software/molpro2012.1p13/molprop_2012_1_Linux_x86_64_i8/bin/molpro -n 2 -d ./ -W ./ form_freq.com

上述测试在node00上能够顺利完成。但是到计算节点进行上述测试,出现:
/home/software/molpro2012.1.13/molprop_2012_1_Linux_x86_64_i8/src/openmpi-install/bin/mpirun: /lib64/libc.so.6: version `GLIBC_2.7' not found (required by /home/software/molpro2012.1.13/molprop_2012_1_Linux_x86_64_i8/src/openmpi-install/bin/mpirun)
然后ldd --version发现计算节点的glibc的版本是2.4.

没有办法,只能在计算节点安装glibc 2.7
安装glibc 2.7参考http://www.cnblogs.com/ivanfu/archive/2012/02/12/2348043.html
1.下载glibc 2.7
http://ftp.gnu.org/pub/gnu/glibc/glibc-2.7.tar.gz
2. tar zxvf glibc-2.7.tar.gz
3. mkdir glibc-build
    cd glibc-build
4. ../glibc-2.7/configure --prefix=/usr
5.make
6. make check
7. make install
其中第6步的make check很重要,最好确保所有的测试都通过。否则安装网上说的,glibc的升级很容易导致系统崩溃,那么升级就没有意义了,只能重装系统了。

到此为止,glibc 2.7安装好了,然后再测试molpro出现:
/home/software/molpro2012.1p13/molprop_2012_1_Linux_x86_64_i8/bin/molpro.exe: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /home/software/molpro2012.1p13/molprop_2012_1_Linux_x86_64_i8/bin/molpro.exe)

执行strings /usr/lib/libstdc++.so.6 | grep GLIBC如下,就是没有GLIBCXX_3.4.9:
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBC_2.0
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.4
GLIBC_2.1
GLIBC_2.1.3
GLIBC_2.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
到网上一阵狂搜,几乎没有找到解决这个的办法。
按照http://jamesbond0479.blog.163.co ... 582010712104140781/提出的办法,从网上下载相应版本的libstdc++.so.6.10,

rm /usr/lib64/libstdc++.so.6
ln -s /usr/lib64/libstdc++.so.6.0.10  /usr/lib64/libstdc++.so.6
rm /usr/lib/libstdc++.so.6
ln -s /usr/lib/libstdc++.so.6.0.10  /usr/lib/libstdc++.so.6
虽然可以解决 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found的问题,可以使molpro能在计算节点上正常运行,但是后来你会发现,在计算节点上云去编译软件的时候,总是提示会提示:
configure error c and c++ compilers are not link compatible. cannot continue
并且看具体原因是:/usr/lib64/gcc/x86_64-suse-linux/4.1.2/libstdc++.so: file not recognized: File format not recognized
因此,猜测是上面手动添加libstdc++.so.6.0.10导致,重新还原回去:
rm /usr/lib64/libstdc++.so.6
ln -s /usr/lib64/libstdc++.so.6.0.8  /usr/lib64/libstdc++.so.6
rm /usr/lib/libstdc++.so.6
ln -s /usr/lib/libstdc++.so.6.0.8  /usr/lib/libstdc++.so.6
发现configure error c and c++ compilers are not link compatible. cannot continue的问题不再出现。因此,断定上述手动添加libstdc++.so.6.0.10的办法是不可靠的。这也正如http://liuzhigong.blog.163.com/blog/static/178272375201333155126/文中所提到的。
但是,由于当时没看到这个文档,所以没有按照该文档去升级glibc 2.7.

到目前为止,node00编译的molpro还是不能在计算节点运行。后来想到,原来计算节点不能编译molpro 2012是不是就是因为glibc版本过低的问题呢?
重新到升级好glibc 2.7的计算节点按照上述在node00的编译步骤,顺利编译通过。并且编译出来的可执行文件可以在node00成功计算,并且在升级好glibc 2.7的计算节点也能正常计算,不再出现version `GLIBCXX_3.4.9' not found的问题。

总结:molpro 2012.1.13的编译需要用到glibc 2.7,至少glibc 2.4是不能行的(glibc 2.5 glibc 2.6不清楚是否可以)。

最后奉上另外一个帖子:http://www.cppblog.com/sunicdavy/archive/2012/04/20/172108.html
帖子中提到解决此类问题的另外一个方法:

还有一种方法,使用静态链接. 将所有可执行文件文件依赖的静态库, 系统库,全部静态链接到可执行文件中,可以一次性解决这个问题
步骤:
    1. 在gcc链接命令行中添加-static -static-libgcc -static-libstdc++
    2. 将第三方依赖库打开静态链接开关, 将原来链接.so的库,全改为链接.a
    3. gcc对链接库顺序很敏感, 链接库顺序需要按照从前至后为:  项目产生的静态库 > 第三方库静态库 > 系统静态库
    4. 链接时, 若有未解决的symbol, 可以尝试在最后添加-lpthread及-lrt解决

上述方法,没有去实践。因为对于一个较大的程序,步骤2较难实现。

[ Last edited by zhangguangping on 2014-6-27 at 16:41 ]
回复此楼
弘德明志博学笃行
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

beefly

专家顾问 (职业作家)

地沟油冶炼专家


小木虫: 金币+0.5, 给个红包,谢谢回帖
你至少还有管理员权限,一般的非管理员用户就没办法了。像我这里所有的集群都用scientific linux,这种linux最近几年发行版的glibc从未升级过,自己编译glibc库闹出不少问题。如果有一天把我逼急了,就操两把板斧冲进机房,嚓!嚓!
beefly《西太平洋大学现代英汉词典》[bi:fli]牛肉一般地
2楼2014-05-30 03:46:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhangguangping

木虫 (著名写手)

引用回帖:
2楼: Originally posted by beefly at 2014-05-30 03:46:23
你至少还有管理员权限,一般的非管理员用户就没办法了。像我这里所有的集群都用scientific linux,这种linux最近几年发行版的glibc从未升级过,自己编译glibc库闹出不少问题。如果有一天把我逼急了,就操两把板斧冲 ...

大牛光顾,蓬荜生辉啊。
普通用户也可以自己安装。
http://hi.baidu.com/bjfk1900/item/3e9c4db9e49967422bebe324
这个安装完毕后的配置,我没有看懂。最后没办法,直接用root冒着风险升级了。幸好,安装完毕后,系统没有崩溃。
弘德明志博学笃行
3楼2014-05-30 05:41:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

清新俊逸

木虫 (正式写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
我就不说啥了,只说一句,建议升级系统。
自从开始用molpro 2012,我把我们机房的80台老机器全给升级了,centos5即可。

[ 发自手机版 http://muchong.com/3g ]
4楼2014-05-31 15:28:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhangguangping

木虫 (著名写手)

引用回帖:
4楼: Originally posted by 清新俊逸 at 2014-05-31 15:28:11
我就不说啥了,只说一句,建议升级系统。
自从开始用molpro 2012,我把我们机房的80台老机器全给升级了,centos5即可。

看来你也被molpro 2012折磨过啊。我当时觉得更换系统太费劲了。所以只能尝试升级glibc.当时还想一次升级到glibc 2.12结果升级不上(编译都编译不过)。只能升级到glibc 2.7.还是寄希望于以后不要碰到此类软件了。
弘德明志博学笃行
5楼2014-05-31 16:54:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bluewhale

铁杆木虫 (正式写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
纯粹没事找事做,你集群主节点与计算节点为什么安装不同的版本?
如果出于安全考虑,可以在前端增加一个login节点,想怎么折腾就怎么折腾,划不了多少钱。
6楼2014-06-01 15:25:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhangguangping

木虫 (著名写手)

引用回帖:
6楼: Originally posted by bluewhale at 2014-06-01 15:25:01
纯粹没事找事做,你集群主节点与计算节点为什么安装不同的版本?
如果出于安全考虑,可以在前端增加一个login节点,想怎么折腾就怎么折腾,划不了多少钱。

当时管理节点和计算节点是相同的系统。但是购买了一个存储。发现10.2的系统对存储上的硬盘认不全,只能认8TB.技术员给我们重新安装了系统11.4后就能认全了。我们的管理节点和登陆节点是一个节点。负责用户的登陆和数据存储。
弘德明志博学笃行
7楼2014-06-02 23:34:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 zhangguangping 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见