pw,cls

pw,clsとは

180台のマシンからなるサーバー群(cls)、及びその上で仮想化技術(Xen)で動作している仮想サーバ(pw)

主に学生の実験環境、並列演算処理用クラスタを担う。

cls = 実機 (CentOS 5.3)
pw = 仮想OS (Fedora 10)

pws001pws002

pws003pws004

構成

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

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

  • cls001~90
    並列計算用。LAMやMPIな
  • cls091~100

筐体貸し出し用。

  • cls101~110
    VHDL(EDA)ツール用。
  • cls111~120
    汎用的なテスト用。主にサーバ班がサービスの試験環境として利用。
  • cls121~180
    仮想マシン用。

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

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

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

Table of Contents

おおまかな流れ

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

  1. システムディスクイメージを作成し、NFSサーバー(futenma)に置く。
    discimage
  2. インストール先のマシンでネットブートknoppixを起動させる。
    netboot
  3. NFSマウントして dd で用意したディスクイメージを書き込む。
    ddout
  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)

クラスタから futnmaのOSイメージがあるディレクトリをマウントできればOKです。

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

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

## CLUSTER ZONEsubnet 133.13.54.0 netmask 255.255.254.0 \
{  option domain-name-servers 133.13.48.3,133.13.48.2;  option domain-name \
"cs.ie.u-ryukyu.ac.jp ie.u-ryukyu.ac.jp";  option routers 133.13.55.254; \
 option subnet-mask 255.255.254.0;  option broadcast-address 133.13.55.255; \
 default-lease-time 28800;  max-lease-time 86400;  filename "pxelinux.0"; \
 #ネットブートの起動オプションファイル  next-server 133.13.48.6; #TFTPサーバーのIP

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

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

kpx-virtualpc2

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

  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 mountNFS=""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

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

# vim /usr/sbin/knoppix-terminalserver

260行目あたり

# 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/ \
{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文をひとつ削除するだけです。

# 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 bytes255 heads, 63 sectors/track,\
 19452 cylindersUnits = 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 bytes255 heads, 63 sectors/track, \
 19452 cylindersUnits = 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行目あたり。

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。

#! /bin/sh

mkdir /media/testmount -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.savesleep 10mkfs.ext3 /dev/sda1#sfdisk \
/dev/sdb -I /media/test/Linux/pw/partition.savesleep 10

mkfifo /root/pipetar 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/sdaumount \ 
/media/test

reboot

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

インストール作業

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

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


最終更新日: 2011/03/04