Edit
ハードの冗長性を極めていけば、ディスクレスが理想。

ハードの故障の再に再インストールなどを行う必要性がある、ハードウェアではトラブルの対応時間に限界がでると思われる。そのためここでは、OSの起動イメージをネットワークからダウンロードして起動させる方法を調査する。

Edit
初期条件

Networkbootに対応したNICカード。代表的なものとしてIntelのEthernetcardなどを利用する。またBIOSレベルで、NICによるnetwork起動の指定ができるものも必要である。

Edit
初期起動までの流れ

ここでは、Intelが制定したネットワークブートの方法である、PXEを利用する。このPXEの大まかな起動フローは以下のとおりとなる。

  1. クライアントはDHCPを利用して、Bootイメージを持つマシンIPを把握する。
  2. IPを取得後、TFTPプロトコルを用いて、PXE bootをダウンロードする。
  3. クライアントで、PXE Bootが起動され引き続き、DHCPを利用してNFSの位置を把握する。
  4. NFSサーバーより、Linux OSのカーネルをダウンロードする。
  5. LinuxOSに処理が移り、/ (root) のマウントを行い、初期起動が始まる。 ※IntelのNICでは、このPXE bootイメージがすでにNIC内にフラッシュROMとして存在しており、TFTPのプロセスをカットできようになっている。

Edit
TFTPのインストール

# yum install tftp-server
# emacs /etc/xinetd.d/tftp
  disable   = no                      <- ここだけ変更
# service xinetd restart

Edit
PXEファイルの準備

# cd /tftpboot
# wget http://ftp.riken.jp/Linux/centos/5.2/os/i386/images/pxeboot/vmlinuz
# wget http://ftp.riken.jp/Linux/centos/5.2/os/i386/images/pxeboot/initrd.img
# wget http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-3.73.tar.gz
# tar zxvf syslinux-3.73.tar.gz
# cd syslinux-3.73/core
# cp pxelinux.0 ../..
# cd ../..
# rm -r -f syslinux-3.73
# mkdir pxelinux.cfg
# cd pxelinux.cfg
# emacs default
  default linux
  prompt 1
  timeout 100
  label linux
  kernel vmlinuz
  append initrd=initrd.img

Edit
dhcpd.conf の設定

# emacs /etc/dhcpd.conf
  #
  # PXE Setting
  #
  filename                "/pxelinux.0";
  next-server             192.168.0.31;     <- tftp serverの場所

※TFTP サーバがDHCPサーバでもある場合、next-server 指示子で明示的にこの状態を設定する必要がある。

Edit
iptablesの穴あけ

DCHP udp:67 
TFTP udp:69 
PXE udp:4011

3つのポートに穴を開けておく必要がある。

Edit
参考

Edit
syslinux.0は拡張子によって振る舞いを変える

.0            PXE bootstrap program (NBP) [PXELINUX only]
.bin          "CD boot sector" [ISOLINUX only]
.bs           Boot sector [SYSLINUX only]
.bss          Boot sector, DOS superblock will be patched in [SYSLINUX only]
.c32          COM32 image (32-bit COMBOOT)
.cbt          COMBOOT image (not runnable from DOS)
.com          COMBOOT image (runnable from DOS)
.img          Disk image [ISOLINUX only]

Edit
Lins