Debian Diskless Cluster和MPICH+PGI f90系统配置

李会民 中国科大 固体微结构研究室 Linux无盘系统主页

2004年7月下旬,利用Debian自带的Diskless包更新了以前的无盘集群系统,在此首先感谢瀚海星云的Happywu和Chern的大力帮助。

对这个包的介绍等,请参看英文原稿,我仅仅把这里的步骤以及过程中出现的一些问题的解决办法说一下。

:以下都是在root帐户下处理

  1. 安装必须的包:
  2. diskless
    nfs-kernel-server
    dhcp, dhcp3-server 或 rarpd,这里用的是dhcp3
    mknbi
    atftpd, tftpd等,这里用的是atftpd

    % apt-get install diskless nfs-kernel-server dhcp3-server mknbi atftpd #这里为我们的选择

  3. 配置双网卡:
  4. 编辑/etc/network/interfaces:
    -----------------------------------------------------------------------
    auto lo eth0 eth1
    iface lo inet loopback
    iface eth0 inet static #对外网卡
            address 210.45.66.???
            netmask 255.255.255.0
            broadcast 210.45.66.0
            gateway 210.45.66.254
    iface eth1 inet static #对外网卡
            address 192.168.0.254
            netmask 255.255.255.0
            broadcast 192.168.0.255
            #gateway 192.168.0.254 #此行需要注释掉,否则连接不到外网
    -----------------------------------------------------------------------

  5. 建立必须的目录:
  6. % mkdir /tmp/diskless #此目录要求为空的
    % mkdir /var/lib/diskless
    % mkdir /var/lib/diskless/default

  7. 产生必要的基本系统文件的压缩包:
  8. % diskless-createbasetgz /tmp/diskless sid http://debian.ustc.edu.cn/debian /var/lib/diskless/default/base.tgz
    这里用的是sid,从http://debian.ustc.edu.cn/下载安装的,请按自己需要修改这一部分。

  9. 下载diskless-image到/var/lib/diskless/default,注意不要安装!
  10. ftp://debian.ustc.edu.cn/debian/pool/main/d/diskless选择合适的包,这里我选择的是diskless-image-simple_0.3.18.0.5_all.deb

  11. 用diskless-newimage生成客户端需要的NFS root镜像:
  12. % cd /var/lib/diskless/default #放置base.tgz 和diskless-image##.deb的地方
    % diskless-newimage /var/lib/diskless/default/root
    在这个过程中要问一些IP地址等问题,非常简单,在此不多说

  13. 安装移除一些包:
  14. % cp /etc/apt/sources.list root/etc/apt
    % chroot /var/lib/diskless/default/root #这正是debian的优点,以后更新很方便
    % vi /var/lib/diskless/default/root/etc/apt/sources.list #配置必要的sources.list,这里用的和服务端的一样,所以直接复制过来了
    % dselect #选择必要的软件,比如rsh等

    root下的文件是所有客户端公用的,其余一些必须私有的在下面的过程中配置。

  15. 利用diskless-newhost配置单个客户端:
  16. % diskless-newhost /var/lib/diskless/default/root
    简单回答一些关于机子名以及IP地址的问题即可
    配置完后,修改/etc/hosts下面的让ip地址和节点名对应起来:
    -----------------------------------------------------------------------
    192.168.0.1 node1
    192.168.0.2 node2
    -----------------------------------------------------------------------

  17. 配置nfs文件共享:
  18. 修改/etc/exports以便客户端可以装载上面的那些文件并且共享/home等:
    -----------------------------------------------------------------------
    /home 192.168.0.0/255.255.255.0(rw,no_root_squash,async)
    /usr/pgi 192.168.0.0/255.255.255.0(rw,no_root_squash,async)
    #这里单独对pgi处理,是因为客户端也需要pgi一些库文件,pgi配置见后面
    #无盘节点公共根目录
    /var/lib/diskless/default/root 192.168.0.0/255.255.255.0(ro)
    #无盘节点私有目录
    /var/lib/diskless/default/192.168.0.1 192.168.0.1(rw,no_root_squash)
    /var/lib/diskless/default/192.168.0.2 192.168.0.2(rw,no_root_squash)
    -----------------------------------------------------------------------

    修改/var/lib/diskless/default/root/etc/fstab:
    -----------------------------------------------------------------------
    /none /proc proc defaults 1 0
    192.168.0.254:/var/lib/diskless/default/root / nfs defaults,nolock 0 1
    192.168.0.254:/home/ /home/ nfs defaults,nolock 0 1
    192.168.0.254:/usr/pgi/ /usr/pgi/ nfs defaults,nolock 0 1
    -----------------------------------------------------------------------

  19. 编译支持nfs-root的客户端内核:
  20. 这里用的是2.6.7内核,make menuconfig时选定下面:
    Device Drivers->Networking support->Networking options下的IP: kernel level autoconfiguration和IP: DHCP support
    File systems->Network File Systems->NFS file system support和Root file system on NFS
    :这里如果前面的kernel level autoconfiguration没选上,不会出现Root file system on NFS选项

  21. 配置atftpd:
  22. atftpd安装后,不需要另外的配置,只要把编译好的客户端内核放到atftpd的主目录/tftpboot下即可

  23. 配置dhcp3 (/etc/dhcp3/dhcpd.conf):
  24. 这里采用的是按照mac固定IP方法,相关部分如下:
    -----------------------------------------------------------------------
    host node1{
            option root-path "192.168.0.254:/var/lib/diskless/default/root/,tcp";
            hardware ethernet 00:01:02:96:25:92;
            fixed-address 192.168.0.1;
    }
    host node2{
            option root-path "192.168.0.254:/var/lib/diskless/default/root/,tcp";
            hardware ethernet 00:01:02:98:92:c5;
            fixed-address 192.168.0.2;
    }
    -----------------------------------------------------------------------

  25. 配置rsh不需要密码登录:
  26. 这里是用mpi做并行计算,所以必须配置不要密码,当然这里也可以用ssh代替rsh,个人口味而已
    /etc/hosts.equiv:
    -----------------------------------------------------------------------
    + node1
    + node2
    -----------------------------------------------------------------------
    以上配置服务器,允许的哪些客户端连接,这里还可配置具体哪个客户端的哪个用户连接,请man hosts.equiv

    下面配置客户端的对应文件:
    /var/lib/diskless/defualt/root/etc/hosts.equiv:
    -----------------------------------------------------------------------
    +
    -----------------------------------------------------------------------
    配置个人根目录下的.rhosts:
    -----------------------------------------------------------------------
    node1 UserName
    node2 UserName
    -----------------------------------------------------------------------

    :配置.rhosts权限为除了用户和root外其余帐户没有访问的权限,我的权限是-rw-------,这里如果不这么配置,rsh的时候还会出现输入密码的提示,切记!
    在配置rsh过程中还出现过一个错误,rcmd: getaddrinfo: Temporary failure in name resolution 这是因为rsh等命令为了安全需要setuid,执行下面命令即可:
    % chown root /usr/bin/rsh /usr/bin/rcp /usr/bin/rlogin
    % chmod 4555 /usr/bin/rsh /usr/bin/rcp /usr/bin/rlogin

  27. 配置pgi f90编译器:
  28. 这个直接安装就成(注意选择服务器版),装完以后配置环境,这里为了所有用户都可以用,所以修改/etc/profile文件:
    -----------------------------------------------------------------------
    PGI=/usr/pgi
    export PGI
    PATH=$PGI/linux86/5.1/bin:$PATH
    export PATH
    export LD_LIBRARY_PATH=/usr/pgi/linux86/5.1/lib
    MANPATH=$MANPATH:$PGI/man
    export MANPATH
    export LIBS="-L/usr/local/pgi/linux86/5.1/lib -lpgftnrtl -lpgc"
    -----------------------------------------------------------------------
    :感觉intel的性能更好一点,配置类似,在此不多说。

  29. 配置mpich:
  30. 从这里下载http://www-unix.mcs.anl.gov/mpi/mpich/download.html
    安装:
    进入解压后的目录,按照需要执行类似下面的命令:
    % ./configure --enable-debug -fc=pgf77 -f90=pgf90 --prefix=/usr/local/mpich

    类似pgi的配置,修改/etc/profile文件:
    -----------------------------------------------------------------------
    export MPICH=/usr/local/mpich
    export PATH=$MPICH/bin:$PATH
    -----------------------------------------------------------------------
    :其实这里的mpich debian自带,可以按照安装一般包类似进行安装。