pw,clsとは

180台のマシンからなるサーバー群。
主に学生の実験環境、並列演算処理用クラスタを担う。

cls = 実機
pw = 仮想OS

pws001.jpg pws002.jpg

pws003.jpg pws004.jpg

構成

  • FQDN(フルネーム)
    • 実機:cls[001~180].cs.ie.u-ryukyu.ac.jp
    • 仮想:pw[001~210].cs.ie.u-ryukyu.ac.jp
  • IPアドレス
    • 実機:133.13.54.[1~180]/255.255.254.0
    • 仮想:133.13.55.[1~210]/255.255.254.0

使用目的別の構成(現況)

  • cls001~100
    並列計算用。LAMやMPIなど。
  • cls101~110
    VHDL(EDA)ツール用。
  • cls111~120
    汎用的なテスト用。
  • cls121~180
    仮想マシン用。

clsrole.png

クラスタのOSインストール手法

180台もあるクラスタにOSをインストールするのは結構な手間がかかります。
1台に1時間かかるとすると180台で180時間です。1週間フルに使っても終わりません。
なので、なるべく自動かつ並行にインストールする必要があります。

ここではその手法の一つを記します。

Table of Contents

おおまかな流れ

この手法のおおまかな流れです。

  1. システムディスクイメージを作成し、NFSサーバーに置く。
    discimage.png
     
  2. インストール先のマシンでネットブートknoppixを起動させる。
    netboot.png
     
  3. NFSマウントして dd で用意したディスクイメージを書き込む。
    ddout.png
     
  4. dd が終わり次第再起動。インストール完了。

必要なものとその準備

だいたい、以下のものが必要になります。

  • nfsサーバー
  • tftpサーバー
  • dhcpサーバー
  • KNOPPIXのネットブートイメージ
  • 目的のOSがインストールされたディスクイメージ

NFSサーバー

KNOPPIXのディスクとインストールするOSのディスクイメージを提供します。
naha をそのまま利用しても良いです。

/cdrom というディレクトリを作成しておいて下さい。

# mkdir /net/cdrom
# ln -s /net/cdrom /cdrom

このディレクトリをnfsマウント許可します。

# vim /etc/exports
/net/open       *.ie.u-ryukyu.ac.jp(ro,insecure,async)
/net/home       *.ie.u-ryukyu.ac.jp(rw,insecure,no_root_squash,sync)
/cdrom          *.cs.ie.u-ryukyu.ac.jp(ro,insecure,async)

exportsを有効にするために以下のコマンドを実行

# /usr/sbin/exportfs -a

クラスタから naha:/cdrom をマウントできればOKです。

[root@cls]# mount naha:/cdrom/ hoge/

TFTPサーバー

ネットブートできるカーネルとmini-rootファイルシステムを提供します。
インストールはyumで

# yum install tftp-server

/tftpserver または /tftpboot というディレクトリができます。(/etc/xinetd.d/tftfp の設定による)

設定ファイルを書き換え

# vim /etc/xinetd.d/tftp
    disable                 = no

xinetdを再起動

# service xinetd restart

どこか適当なクライアントから tftp get できればOK。

なお、TFTPサーバーにはユーザー認証も何もないので、不要なときは必ず停止させておくこと。

# vim /etc/xinetd.d/tftp
    disable                 = yes

で xinetd を再起動し、しばらくすると停止する。

DHCPサーバー

pxeクライアントにIPを割り振ったりtftpサーバーの場所を教える役目を果たします。
kanaiで動いているdhcpサーバーをそのまま利用します。

/etc/dhcpd.confの96行目あたりに

  • filename
  • next-server

の記述を加えて以下のようにする。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11

dhcpdを再起動させる。

# service dhcpd restart

この2行の記述も不要なときはコメントアウトするか削除すること。

改造 KNOPPIX 5.1.1

KNOPPIXの起動時に指定したスクリプトを走らせる、ということをするためにKNOPPIX 5.1.1をリマスタリングします。
この改造KNOPPIXは既に作成して以下の場所に置いてあります。(いずれ/net/openに置きます。)

/net/home/student/e04/e045745/cdrom

これを /cdrom にコピーして下さい。

# cp -r /net/home/student/e04/e045745/cdrom /cdrom

以上です。

作成方法を知りたい人は以下を読んでください。
それなりのハードディスク空き容量を要求するので Xen や MS Virtual PC などの仮想マシンでKNOPPIXを起動させることをお勧めします。

リマスタリングの準備をします。
まずはKNOPPIX 5.1.1の起動について。
Virtual PC を使う場合、だいたい、次のような設定でOKです。

kpx-virtualpc1.PNG

 

なぜか、マウスが効かないのでCUIかつEnglishモードで起動させましょう。

kpx-virtualpc2.PNG

 

起動したら、以下の手順でリマスタリング。

  1. 用意した空のハードディスクイメージにfdiskやmke2fsなどをかけた後にマウント。
    # mount /dev/hda1 /mnt/hda1
  2. ソースとマスターのディレクトリを用意。
    # mkdir -p /mnt/hda1/source/KNOPPIX
    # mkdir -p /mnt/hda1/master/KNOPPIX
  3. KNOPPIXの中身をソースに丸コピー。
    # cp -Rpv /KNOPPIX/* /mnt/hda1/source/KNOPPIX
  4. カスタマイズする。
    ブートオプションを見てnfsマウントとスクリプトの実行をするために、
    /mnt/hda1/source/KNOPPIX/etc/init.d/knoppix-autoconfig の163行目(行数は適当)あたりに
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
    
    # NFS mount
    NFS=""
    FILE=""
    case "$CMDLINE" in *\ NFS*)
      NFS="$(getbootparam 'NFS')"
      FILE="$(getbootparam 'FILE')"
      echo "...trying to mount $NFS"
      mkdir /media/nfs
      mount $NFS /media/nfs
      /media/nfs/$FILE
    ;;
    esac
    を追加する。
  5. cloop圧縮してKNOPPIXイメージファイルを作成する。以下のコマンド。
    # mkisofs -R -U -V "KNOPPIX.net filesystem" -publisher "KNOPPIX www.knoppix.net" \
       -hide-rr-moved -cache-inodes -no-bak -pad /mnt/hda1/source/KNOPPIX \
         | nice -5 /usr/bin/create_compressed_fs -B \
      65536 -f /mnt/sda1/isotemp - /mnt/hda1/master/KNOPPIX/KNOPPIX

ここまで出来たら、まずKNOPPIXの/cdrom以下を全て NFSサーバー(naha)の/cdromに送る。

# rsync -ae ssh /cdrom/* naha:/cdrom/

次に、mkisofsで作成されたKNOPPIXイメージファイルを NFSサーバーの/cdrom/KNOPPIX/KNOPPIX に送って上書きする。

# rsync -ae ssh /mnt/hda1/master/KNOPPIX/KNOPPIX

リマスタリングは以上で終了です。
KNOPPIXは続けて使用しますので起動させたままにしてください。

KNOPPIXのネットブートイメージ。

改造KNOPPIX 5.1.1と同様に、これも既に作成して以下の場所に置いてあります。(いずれ/net/openに置きます。)

/net/home/student/e04/e045745/tftpboot

これを /tftpboot にコピーしてください。

# cp -r /net/home/student/e04/e045745/tftpboot /tftpboot

以上です。

作成方法を知りたい人は以下を読んで下さい。

コマンドラインから

# knoppix-terminalserver

します。色々聞かれますが、ネットブートイメージが欲しいだけでdhcpもnfsもどうでもいいので適当に返します。たぶん、全部デフォルトでOK。
そのうちネットブートイメージが作成されるはずです。エラーメッセージが何も無ければそれで良しです。
しかし、KNOPPIX 5.1.1 + MS Virtual PC の環境では以下のように失敗してしまいました。
knoppix-terminalserver1.png

これはcloopファイルが見つからずminiroot.gz作成に失敗しているということです。knoppix-terminalserverを修正して対処します。

# vim /usr/sbin/knoppix-terminalserver

260行目あたり

  1
  2
  3
  4
  5
  6
  7
  8
 # Copy device nodes (try Knoppix, static dev, udev)
if [ -d /KNOPPIX/dev ]; then
 cp -a  /KNOPPIX/dev/{null,zero,console,cloop*,hd*,sd*,ub*,init*,kmem,fd*,loop*,mem,ram*,*random,pts,psaux,ptmx,std*,sndstat,tty,tty[0-9]*} "${MINIROOT}/dev/"
elif [ -d /dev/.static/dev ]; then
 cp -a /dev/.static/dev/{null,zero,console,cloop*,hd*,sd*,ub*,init*,kmem,fd*,loop*,mem,ram*,*random,pts,psaux,ptmx,std*,sndstat,tty,tty[0-9]*}  ${MINIROOT}/dev/"
else
 cp -a /dev/{null,zero,console,cloop*,hd*,sd*,ub*,init*,kmem,fd*,loop*,mem,ram*,*random,pts,psaux,ptmx,std*,sndstat,tty,tty[0-9]*} "${MINIROOT}/dev/"
fi

となっているところを以下のようにします。if文をひとつ削除するだけです。

  1
  2
  3
  4
  5
  6
# Copy device nodes (try Knoppix, static dev, udev)
if [ -d /dev/.static/dev ]; then
 cp -a /dev/.static/dev/{null,zero,console,cloop*,hd*,sd*,ub*,init*,kmem,fd*,loop*,mem,ram*,*random,pts,psaux,ptmx,std*,sndstat,tty,tty[0-9]*} "${MINIROOT}/dev/"
else
 cp -a /dev/{null,zero,console,cloop*,hd*,sd*,ub*,init*,kmem,fd*,loop*,mem,ram*,*random,pts,psaux,ptmx,std*,sndstat,tty,tty[0-9]*} "${MINIROOT}/dev/"
fi

これでネットブートイメージ(miniroot.gz)が /tftpserver 以下に作成されるはずです。
この /tftpserver 以下をtftpサーバーの/tftpserverに rsync や scp で送る。

OS入りのディスクイメージ

全クラスタに丸コピーするOS入りのディスクイメージを作成します。
まずはモデルとなるマシンを一台セットアップします。
モデルとなるOSには汎用的な設定が求めらます。以下の点は特に注意して下さい。

  • IPアドレスは DHCP取得にすること。eth0, eth1 両方ともdhcpにしておくのが無難。
  • naha や futenma などから root がRSA認証で ssh ログインできること。逆は絶対にダメ。
  • zsh をインストールしておくこと。zsh をログインシェルにしている人がいるので。

他にも色々あるかも知れませんが、futenma からの all-pw-run さえ通じれば、あとは何とかなる。たぶん。

モデルが出来たらディスクイメージを作成します。

まずモデルマシンのモデルOSをシャットダウンさせてKNOPPIXを起動させます。
KNOPPIXの起動には外付けCDドライブまたはUSBメモリを使うと良いです。

KNOPPIXが起動したら、fdiskでモデルOSがインストールされているHDDを確認します。

# fdisk -l

Disk /dev/sda: 160.0 GB, 160000081920 bytes
255 heads, 63 sectors/track, 19452 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1604    12884098+  fd  Linux raid autodetect
/dev/sda2            1605       10528    71682030   fd  Linux raid autodetect
/dev/sda3           10529       19452    71682030   fd  Linux raid autodetect

Disk /dev/sdb: 160.0 GB, 160000081920 bytes
255 heads, 63 sectors/track, 19452 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1        1604    12884098+  fd  Linux raid autodetect
/dev/sdb2            1605       10528    71682030   fd  Linux raid autodetect
/dev/sdb3           10529       19452    71682030   fd  Linux raid autodetect

このように160GBのHDDが2台、sda, sdbとして認識されていた場合、ディスクイメージにするのは
モデルOSがインストールされているsda1と、パーティション情報が含まれるMBRだけです。

確認できたら次にnahaをnfsマウントします。そこにディスクイメージを出力します。
あらかじめnahaのnfs設定を一時的に書き込み許可にしておいてください。

# mount -t nfs naha.ie.u-ryukyu.ac.jp:/net/open /mnt

マウントし、書き込み可能であることを確認できたら、ディスクイメージを作成します。
まずはMaster Boot Recordから。

# dd if=/dev/sda of=/mnt/Linux/pw/mbrcls.img bs=b count=1

次にモデルOSが入っているパーティション。これは少々時間がかかります。

# dd if=/dev/sda1 of=/mnt/Linux/pw/sda1cls.img bs=1K

無事にディスクイメージを作成できたらnahaをアンマウントします。

# unmount /mnt

nahaのnfs書き込み許可設定も忘れずに削除してください。

KNOPPIXはもう終了してもOKです。

パーティションのディスクイメージはそのままだと20GBくらいあったりして大きいので圧縮します。

# tar zcvf ./sda1cls.tar.gz ./sda1cls.img

pxelinux.cfgとインストールスクリプト

pxelinux.cfg の設定は ネットブートKNOPPIX の起動オプションになります。
ネットブートイメージの項で作成した /tftpserver ディレクトリには pxelinux.cfg 設定ファイルが含まれています。
これを以下のように編集する。/tftpserver/pxelinux.cfg/defaultの1行目あたり。

  1
  2
  3
  4
  5
 DEFAULT vmlinuz
 APPEND nfsdir=133.13.48.6:/cdrom NFS=naha.ie.u-ryukyu.ac.jp:/net/open FILE=Linux/pw/test.sh nodhcp
 lang=us ramdisk_size=100000 init=/etc/init apm=power-off nomce vga=791 initrd=miniroot.gz 3 quiet lang=en 
 BOOT_IMAGE=knoppix
 TIMEOUT 30

上の設定の

  • NFS=naha.ie.u-ryukyu.ac.jp:/net/open FILE=Linux/pw/test.sh

が特に重要。ここで指定したスクリプトがKNOPPIXの起動と同時に実行されます。この例ではtest.shが実行される。
本番ではここでOSインストールのスクリプトを指定します。
OSインストールスクリプトの内容は以下。hdcopy.sh。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
#! /bin/sh
 
mkdir /media/test
mount -t nfs -o nolock naha:/net/open /media/test
 
dd if=/media/test/Linux/pw/mbrcls.img of=/dev/sda
#sfdisk /dev/sda -I /media/test/Linux/pw/partition.save
sleep 10
mkfs.ext3 /dev/sda1
#sfdisk /dev/sdb -I /media/test/Linux/pw/partition.save
sleep 10
 
mkfifo /root/pipe
tar zxvfO /media/test/Linux/pw/sda1cls.tar.gz > /root/pipe &
dd if=/root/pipe of=/dev/sda1 bs=1M
#dd if=/media/test/Linux/pw/sda1.img of=/dev/sda1 bs=1M
#grub-install --root-directory=/media/sda1 /dev/sda
umount /media/test
 
reboot

sda1.img などのディスクイメージファイル名はOS入りディスクイメージで作成したものに合わせること。

インストール作業

ここまで準備ができたら、OSインストール対象のマシンをいったん停止させます。
そして再起動しネットブートさせます。学科のクラスタはPOST時に[F12]キーを押すことでネットブートします。
この作業は実機を前にしても良いしIPMIToolを使っても良いです。

全ての準備がなされていれば、後は自動でOSがインストールされて再起動します。


Tag: pw


添付ファイル: fileclsrole.png 666件 [詳細] filenetboot.png 646件 [詳細] fileknoppix-terminalserver1.png 864件 [詳細] filekpx-virtualpc2.PNG 629件 [詳細] filediscimage.png 637件 [詳細] fileddout.png 636件 [詳細] filekpx-virtualpc1.PNG 609件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-04-11 (土) 00:03:32 (1170d)