LINUX Howto
3.How to build the Diskless client

@ 構築環境
 クライアント
 IPアドレス DHCPから固定IPを割当(192.168.1.71)
 nfsroot先 /tftpboot/192.168.1.71

 サーバ
 IPアドレス 192.168.1.10

A ディスクレス・クライアントの準備(クライアント)

今回はRedHat9をディスレス・クライアントとして準備することにするだワン!

@.サーバとして使うマシンがRedHat8.0のため一度クライアントにRedHat9を入れます。
 今回は以下のパッケージを導入
 □ X System
 □ Gnome
 □ Application Developer
 □ Kernel Developer
 合計1.5Gくらいのディスク容量になります。

A.カーネルの再構築
 $cd /usr/src/linux-2.4
 $make mrproper
 $cp -p configs/kernel-2.4.20-i686.config .config
 $make oldconfig
 $make menuconfig

 −Network Option
  [*] IP:kernel level autoconfigration
    [*] DHCP Support (NEW)
    [*] BOOTP Support (NEW)
    [*] RARP Support (NEW)

 −Network filesystem
  [*] NFS filesystem support
    [*] root file system on NFS

 −NICドライバーをモジュールから組込みに変更(M→*)

 $vi Makefile
 EXTRAVERSION = -8custom → EXTRAVERSION = -8nfs 変更
 $make dep
 中略
 $make clean
 中略
 $make bzImage
 中略
 $make modules
 中略
 $make modules_install
 中略
 出来上がったカーネルを/bootへコピーする
 $cp -p arch/i386/boot/bzImage /boot/vmlinuz-2.4.20-8nfs
 System.mapをコピーする
 $cp -p System.map /boot/System.map-2.4.20-8nfs
 initrdを作成する
 $cd /boot
 $mkinitrd initrd-2.4.20-8nfs.img 2.4.20-8nfs

B.カーネルをnfsroot対応に変更
 $mknod /dev/nfs c 0 255
 $cd /boot
 $rdev vmlinuz-2.4.20-8nfs /dev/nfs
 確認
 $rdev vmlinuz-2.4.20-8nfs
 Root Device /dev/nfs
 これでOK

C.initrdの編集
 $cd /boot
 $gunzip -S .img initrd-2.4.20-8nfs.img
 initrd-2.4.20-8nfsファイルが出来上がる
 $mount -o loop initrd-2.4.20-8nfs /mnt
 $cd /mnt
 $vi linuxrc
 echo 0x100 > /proc/sys/kernel/real-root-devを下記の様に変更
 echo 255 > /proc/sys/kernel/read-root-dev
 保存する
 $cp -a /dev/nfs .
 $gzip -c -9 initrd-2.4.20-8nfs > initrd-2.4.20-8nfs.img

B サーバの準備(サーバ)

@.ディスクレス・クライアント・ファイルを置く場所を確保
 $mkdir -p /tftpboot/192.168.1.71
 tftpbootはディフォルトで決められているようです。
 変更する場合は、Kernelソース/usr/src/linux-2.4/fs/nfsのnfsroot.cを変更しリコンパイルが必要です。

#define NFS_ROOT "/tftpboot/%s"←ここを変更するだワン!

A.exportsファイル編集
 nfsrootにするためにexportsファイルに追記します
 $vi /etc/exports
 /tftpboot/192.168.1.71        192.168.1.71(rw,async,no_root_squash)
 $exportfs -av
 exporting 192.168.1.71:/tftpboot/192.168.1.71
 reexporting 192.168.1.71:/tftpboot/192.168.1.71 to kernel

B.dhcpd.confファイルの編集
 $cd /etc
 $vi dhcpd.conf
 下記を追記する(今回の環境の場合)
 host client01 {
 hardware ethernet 00:00:00:00:00:00; ← PXEクライアントのMACアドレスを入れる
 fixed-address 192.168.1.71;
 option vendor-class-identifier "PXEClient";
 option root-path "192.168.1.10:/tftpboot/192.168.1.71";
 }
 今までの環境にアドオンしたdhcpd.confは補足7.を参照

C クライアント・ファイルのコピー

クライアントからサーバへファイルをコピーする
 $mount 192.168.1.10:/tftpboot/192.168.1.71 /mnt
 bin boot dev etc home initrd lib misc opt proc root sbin tmp usr var
 上記ディレクトリをコピーする
 $cp -a ディレクトリ /mnt

D ファイルの編集(サーバ)
 サーバへコピーしたファイルをディスクレス起動用に編集します
 $cd /tftpboot/192.168.1.71
 $mkdir -p mnt/cdrom mnt/floppy
 $cd etc ← スラッシュを付けないこと
 $vi fstab
 下記の様に編集する
 192.168.1.10:/tftpboot/192.168.1.71 / nfs rw,rsize=8192,wsize=8192,intr 0 0
 none /dev/pts devpts gid=5,mode=620 0 0
 none /proc proc defaults 0 0
 none /dev/shm tmpfs defaults 0 0
 /dev/cdrom /mnt/cdrom iso9660 noauto,owner,kudzu,ro 0 0
 /dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
 ディスクレス環境fstabファイルは補足8.を参照
 $cd sysconfig/network-scripts
 $mv ifcfg-eth0 ifcfg-eth0.bak

E クライアントの起動確認(クライアント)
 A−Aで作成したカーネルとinitrdを使って起動確認
 ブートローダーに上記カーネルとinitrdを追加しブートする
 このときカーネルパラメータとして以下を与える
 ip=192.168.1.71:192.168.1.10::255.255.255.0:client01::

 grubの場合:grub.confファイルは補足9.を参照
 例)
 title Red Hat Linux (2.4.20-8nfs)
 root (hd0,0)
 kernel /vmlinuz-2.4.20-8nfs ip=192.168.1.71:192.168.1.10::255.255.255.0:client01::
 initrd /initrd-2.4.20-8nfs.img

 liloの場合:lilo.confファイルは補足10.を参照
 例)
 image=/boot/vmlinuz-2.4.20-8nfs
 label=diskless
 initrd=/boot/initrd-2.4.20-8nfs.img
 read-only
 append="ip=192.168.1.71:192.168.1.10::255.255.255.0:client01::"

 いかがですか?うまく起動できましかた?

F PXEからDisklessクライアント起動

ここからが本題だワン!

 今までの環境にDisklessクライアントメニューを追加する場合はPXE改造版RPMを使ってください。RedHat標準(RH80)のPXEはメニューが5つまでしか選択できません。
 改造版PXEは9つまで選択出来るようになります。

@.ブート環境の設定(サーバ)
 /tftpboot/192.168.1.71/bootの中のvmlinuz-2.4.20-8nfsとinitrd-2.4.20-8nfs.imgをPXEブート環境ディレクトリへコピーする
 $cd /tftpboot
 $mkdir -p X86PC/UNDI/nfsboot
 $cp -p 192.168.1.71/boot/vmlinuz-2.4.20-8nfs X86PC/UNDI/nfsboot/nfs.1
 $cp -p 192.168.1.71/boot/initrd-2.4.20-8nfs.img X86PC/UNDI/nfsboot/nfs.2
 /tftpboot/X86PC/UNDI/linux-installのlinux.0をnfsboot以下にコピーするのだが、カーネルパラメーターを起動のたびに渡さなければならないためnfs.0にカーネルパラメータを含んだbootstrapを作るためのプログラムを作りました。
 使用される方はこちらをどうぞ!

毎度おなじみのお約束だワン! プログラムを使用し発生した損害、損失その他問題は一切責任を持ちません。自己責任でお願いするだワン!

 使用方法:
 $cd /usr/local/src
 ここにファイルをコピーし展開する
 $tar -xzvf nfsbstrap.tar.gz
 $cd nfsbstrap
 Configを環境に合わせ変更してください
 CLIENT=192.168.171
 SERVER=192.168.1.10
 NETMASK=255.255.255.0
 CLIENTNAME=client01
 $./bootstrap
 これで/tftpboot/X86PC/UNDI/nfsboot/にnfs.0が導入される

A.pxe.confにDisklessメニューと関連項目を設定

B.dhcp/pxeを再起動

C.クライアントを起動
 Disklessメニューを選択しあとは起動を待つだけです

以上でPXEネットワーク構築備忘録の終了です。




直線上に配置