【版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明】
【版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明】
*************************实现各节点间的无密码登陆访问,可以用ssh,也可以用rsh:
思路就是:在本机产生一对密钥,包括一个公钥和私钥,把公钥的内容添加到远程机的
~/.ssh/authorized_keys文件中,本机就可以无密码访问远程机了
1.ssh-keygen -t rsa #产生一个rsa类型的密钥,在用户主目录中就会产生以下几个文件
authorized_keys id_rsa id_rsa.pub known_hosts
id_rsa.pub是公钥,id_rsa是私钥,known_hosts保存着所有已发生连接服务器的信息
2.scp id_rsa.pub #以本地ip地址作为文件名,便于区分
3.cat rsa公钥名 ~/.ssh/authorized_keys
4.然后测试一下,就搞定
##注解(网上有人说authorized_keys的权限644,当你644的时候可能登陆的时候还会让你输入密码,但是一旦改成600以后并且成功登陆,这时候再改成644,此问题不再出现。
这是网上一个人说的,但是我没有遇到这样的问题。)
==================================================================================
如果是配置rsh的话,
1.每台机器上apt-get install rsh rsh-server
2.把/etc/xinetd.d目录下的rsh,rlogin,rexec文件中的disable=yes,都改成no
3.在每台机器上的/etc/hosts.equiv或者在用户主目录中的.rhosts文件中加入
远程ip 远程需要登陆本机的用户
例如: 192.168.0.2 hpc #192.168.0.2上的hpc用户可以无密码登陆本机
3.如果需要让root用户无密码登陆本机的话,在/etc/securetty中添加rsh exec rlogin
非root用户的话可以省略这一步
搞定,测试一下
******************各个节点上都安装mpich,当然也可以openmp或者lam mpi,然后给系统添加此目录的环境变量,并配置其他一些东西
1.修改/etc/mpd.conf文件,内容改为secretword=loongson
#vi /etc/mpd.conf 设置文件读取权限和修改时间,
如果是普通用户的话,在用户主目录下建个文件.mpd.conf,内容和之前的一样,自己想一个密码,然后用touch 和 chmod 命令改成用户可读写权限600。
touch /etc/mpd.conf
chmod 600 /etc/mpd.conf
2.创建主机名称集合文件/root/mpd.hosts,把所有节点机都加进来
文件内容如下:
node01
node02
3.把这个文件拷贝到每个节点的/etc/下
===========================================
一些实用程序:
mpd & 开启一个进程守候程序
mpdtrace 看看进程可以在那些机器上运行
mpdallexit 关闭所有的进程守候程序
--测试运行MPICH的例子程序
#mpdboot -n 4 -f mpd.hosts 启动4台机器
#mpiexec -n number /usr/MPICH-install/examples/cpi number为使用的进程数
#mpdallexit
------------
通过mpdcheck获得一些帮助信息 #mpdcheck -pc
查错 #mpdcheck -l
通过mpd.hosts文件查错
#mpdcheck -f mpd.hosts 如果无错误
#mpdcheck -f mpd.hosts -ssh
对任意两台机器进行查错
m1: #mpdcheck -s 输出主机名host和端口port
m2: #mpdcheck -c host port
----------------------------------------------
||注意:以上四步都是在没有运行mpd的情况下进行的||
----------------------------------------------
mpd查错
m1: #mpd -e & 返回使用的端口
m2: #mpd -h m1 -p echoed_port_m1 &
**********************
测试: mpd &开启一个守护进程,进入mpich2的目录下的example中,mpirun -np 4 ./cpi这是个计算pi值的程序
*****************************导出头节点上的一个目录给各节点机共享
可以使用nfs-server,userspace nfs-server,或者kernel nfs-server(这个效率高一点)
1.服务器安装apt-get install nfs-common nfs-kernel-server portmap
客户机安装apt-get install nfs-common portmap
2.服务器上创建共享目录# mkdir /hpc
更改权限# chown nobody.nogroup /home/share
3.修改/etc/exports,添加 /hpc 192.168.0.2/255.255.255.0(rw,no_root_squash,sync)
4.重启nfs服务,/etc/init.d/nfs-kernel-server restart
5.客户机上应该就可以mount这个目录了
============================================================
nfs参数列表:
ro 只读访问
rw 读写访问
sync 所有数据在请求时写入共享
async NFS在写入数据前可以相应请求
secure NFS通过1024以下的安全TCP/IP端口发送
insecure NFS通过1024以上的端口发送
wdelay 如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
hide 在NFS共享目录中不共享其子目录
no_hide 共享NFS目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas root用户具有根目录的完全管理访问权限
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID
****************(这步并非所有人都得做)重新编译内核,把infiniband相关的驱动都编译进内核,
而不是模块形式
1.安装内核源代码包
make menuconfig完成后
make-kpkg clean (清理一些遗留东西,此步一定要做,最好还是做一做)
2.fakeroot make-kpkg --initrd --append-to-version=noobu --revision=1.0 kernel_image
==========================================================================================
/*fakeroot 的作用是在内核的生成过程中暂时性获取root权限。如果用root帐号的话,可以省略fakeroot。
–append-to- version定义的是内核的软件包名字,类似 kernel-image-2.6.11.7-noobu,添加的就是noobu部分。
而 –revision定义的是软件包的版本。
现在系统会开始进行新内核的生成,屏幕上会有许多文字闪过。请注意,如果生成过程中出现错误,请执行 make clean 后,用 make menuconfig 重新配置内核。
一般都是仔细看错误信息,找到出错的模块,然后将其去除。
内核顺利生成完毕后,会在/usr/src目录下产生一个 deb 包。例如 kernel-image-2.6.11.7-noobu_1.0_i386.deb
3.dpkg -i kernel-image-2.6.11.7-noobu_1.0_i386.deb ,接着Debian会安装新内核并更新Grub的配置文件。新内核就可以用了。
**************************为fluent软件安装xdm
1.apt-get install x-window-system-core icewm xdm ssh
2.设置sshd,/etc/ssh/sshd_config文件,X11Forwarding的值改称yes。
3./etc/X11/xdm/Xaccess文件,将代码:
#* #any host can get a login windows 最前面的#去掉
4./etc/X11/xdm_config文件,注释掉最后一行
Display Manager.Requestport 0 前面加上一个 ! ,把此行注释掉
5.在/etc/X11/xdm/Xserver最后添加一行 192.168.0.38:0 foreign #表示此ip可以远程连接本机
6./etc/inittab中,将运行级别改为5,reboot
************************安装hpl,测试集群
1.下载
(hpl依赖他)
解压
2.在BLAS目录中#make ,得到blas_LINUX.a
===================================================
在这步我遇到了一些问题,出错信息类似于:
home/mpakala/BLAS/libblas.a(xerbla.o)(.text+0xc): In function `xerbla_':
xerbla.f: undefined reference to `s_wsfe'
/home/mpakala/BLAS/libblas.a(xerbla.o)(.text+0x1e):xerbla.f: undefined reference to `do_fio'
/home/mpakala/BLAS/libblas.a(xerbla.o)(.text+0x30):xerbla.f: undefined reference to `do_fio'
/home/mpakala/BLAS/libblas.a(xerbla.o)(.text+0x35):xerbla.f: undefined reference to `e_wsfe'
/home/mpakala/BLAS/libblas.a(xerbla.o)(.text+0x43):xerbla.f: undefined reference to `s_stop'
搜到几篇老外的文章说:
https://stat.ethz.ch/pipermail/r-devel/2006-September/042881.html说you just need to add the libg2c library in your linking sequence.
Add the flags -lg2c and it should work
和gcc example -llapack -lblas -lg2c -lm ,没看明白具体怎么操作,我忽然注意到make的输出,他是用g77编译的,
我立马到make.inc中把里面的g77全换成了mpif77,编译,通过,虽然带了几个warning。
===================================================
3.解压hpl,进入hpl目录,进入setup目录,#bash make_generic得到一个Make.UNKNOWN
拷贝此文件到hpl目录,修改此文件
TOPdir = /path/to/hpl
MPdir = /path/to/mpich/ #默认安装的话是在/usr/local/bin
LAlib = /刚才放置BLAS的目录/blas_LINUX.a
CC = mpicc目录
LINKER = mpif77目录
#make arch=UNKNOWN #此UNKNOWN需要跟Make.UNKNOWN中的arch后的值一致
成功后在hpl的bin/UNKNOWN/下生产xhpl和HPL.dat文件,搞定。
*********************************安装fluent过程中可能遇到的问题
1.缺少stdlibc++.so.5,安装stdlibc++5,etch默认安装的是stdlibc++6
2.安装libc6-i386 #我就是在这点上没有抓住bug,错过了解决问题的机会。集群的机器是intel 64位的,我一看这个是i386的就没有管他。
这里得到了一个小教训,当fluent图形界面启动之后,会显示一些信息,包括错误信息,但是别忘了,启动此图形界面的终端里面还有更有价值的信息,
很可能就是解决问题的突破点。
其他问题请参考:google搜索关键字“linux 安装 fluent”
安装fluent很简单,下载压缩包后解压,直接运行解压出来的.sh文件就可以了。