2009年9月29日 星期二

FreeBSD diskless 無碟開機

FreeBSD diskless 無碟開機

以下內容從網路轉載

因為架設平行運算的關係,所以灌了不少台FreeBSD,後來發現每台都跑去灌實在是很麻煩,
而且維護起來也不容易,所以才想嘗試製作diskless試試看,但是我還不知道這樣搞會不會降低平
行運算的效能,還要進行測試,回歸主題,分享一下這幾天架設FreeBSD的diskless的過程吧!

Master
OS: FreeBSD 5.0 Release-p7
CPU:P3-450
LanCard:Intel(R) PRO/1000

Client
CPU:P2-300 , P3-550 , K7-700 , P4-3G
LanCard:Intel(R) PRO/100

製作Diskless首先就是要先從網路讀取kernel,至少有兩種方式可以達到
1. PXEboot
2. etherboot port (/usr/port/net/etherboot)

第二種etherboot還要準備開機片進入DOS才有辦法啟動,有點小麻煩
手上剛好又都是Intel的網路卡,所以我用PXEboot + NFSRoot 來達成

1. 先把TFTP跑起來
# ee /etc/inetd.conf
代碼:
tftp dgram udp wait root /usr/libexec/tftpd tftpd -s /usr/tftpboot

# killall -1 inetd
/usr/tftpboot 自己修改自己要的目錄

2. 設定DHCP(net/isc-dhcp3)
# ee /usr/local/etc/dhcpd.conf
修改成下列選項
代碼:
group {
subnet 192.168.0.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
range dynamic-bootp 192.168.0.3 192.168.0.10;
option root-path "192.168.0.2:/home/diskless";
filename "pxeboot";
option routers 192.168.0.2;
}


192.168.0.2:/home/diskless是NFS的分享格式,這個目錄也就是Client讀取的時候的根目錄,我把它放在/home/diskless

my dhcp.conf http://bin.twbbs.org/tmp/dhcpd.conf

3. 修改NFS分享
確認NFS Server有開啟
/etc/rc.conf
代碼:
nfs_server_enable="YES"
rpcbind_enable="YES"

修改/etc/exports
代碼:
/home -alldir -ro -netmask 192.168.0 -netmask 255.255.255.0

重跑mountd
#killall -1 mountd
備註 : 如果要共享/usr的話,記得把/usr設定分享

4. 準備Root System所需要的檔案
最方便的方式就是去把ISO-Image的第二片給抓回來修改,因為這一片是Live-CD格式
ftp://freebsd.csie.nctu.edu.tw/pub/releases/i386/ISO-IMAGES/5.0/5.0-RELEASE-i386-disc2.iso

掛入系統,複製到/home/diskless
# mkdir -p /home/diskless
# mdconfig -a -t vnode -f 5.0-RELEASE-i386-disc2.iso
# mount_cd9660 /dev/md0 /mnt
# cd /home/diskless
# rsync --progress -avr /mnt/ .
# umount /mnt
# mdconfig -d -u 0

備註:FreeBSD 4.x請改用vnconfig

6. 設定Root System
cd /home/diskless
(1) 先刪除一些用不到的目錄和檔案,不刪也可以
rm -rf boot.catalog cdrom.inf COPYRIGHT floppies rr_moved

(2) 修改etc/hosts和etc/

(3) 修改etc/fstab
代碼:

# Device Mountpoint FStype Options Dump Pass#
192.168.0.2:/home/diskless / nfs ro 0 0
#192.168.0.2:/usr /usr nfs ro 0 0


備註:如果/usr要分享就一起掛上去
FreeBSD 4.x 要加掛procfs喔

(4) 修改etc/rc.conf
代碼:

hostname="hostname"
kern_securelevel_enable="NO"
moused_enable="YES"
sendmail_enable="NO"
sshd_enable="YES"
usbd_enable="YES"
nfs_client_enable="YES"

跟網路有關的選項就不需要設定了,之前DHCP取過了

(6) 修改 etc/rc
大約第53行的位置請加入下列選項
代碼:

mdconfig -a -t malloc -s 4m
newfs /dev/md0
mount /dev/md0 /etc
cp -R /conf/etc.`ifconfig fxp0 | grep inet | awk -F ' ' '{printf $2}'`/* /etc
請把fxp0置換成你的Client端的網路卡代號

備註:FreeBSD 4.x請使用vnconfig

7. 設定每台Client不同設定檔
這個步驟是我希望讓每一台機器擁有不同的etc做的
# cd /home/diskless
# mkdir conf
# cp -R etc conf/etc.

請注意,把換成diskless的時候取得的IP選項,這樣
就可以讓每一台機器在boot的時候讀取不同的/etc設定

8. 編一個Diskless的kernel出來吧
# cd /usr/src/sys/i386/conf
# cp GENERIC Diskless
# ee Diskless
修改符合你Client的選項,並加入下面選項
代碼:
options NFS_ROOT

# config Diskless
# cd ../compile/Diskless
# make depend ; make kernel
# cd /home/diskless/boot/kernel
# cp /usr/src/sys/i386/compile/Diskless/kernel .
取代home/diskless/boot/下的kernel就可以了

9. 最後,置放pxeboot檔案
先修改/home/diskless/boot/loader.conf
把這三行都標記起來
代碼:
#mfsroot_load="YES"
#mfsroot_type="mfs_root"
#mfsroot_name="/boot/mfsroot"

然後複製pxeboot
# cp /home/diskless/boot/pxeboot /usr/tftpboot

完成! 謝謝各位收看!

這篇是雜牌軍啊!收看了好多份文件拼拼湊湊弄起來的
所以很多做法我不確定是不是正規做法,如果大家覺得哪裡怪怪的
可以修改的更好一定要通知我啊............

另外......我沒有放swap進去,我實在是不知道diskless該怎麼去加swap比較好
(NFS分享可讀寫檔案放swap? 這樣我是怕有安全性的問題啊! swap不就隨時可以被別台電腦dump走資料)

使用上感覺起來目前是還沒有什麼慢的感覺,失去了硬碟的聲音感覺好安靜,X-Window晚點裝上去在測試看看有沒有慢的感覺.........呵呵!

參考資料
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/diskless.html
http://www.iet.unipi.it/~luigi/diskless.html
http://akiba.to/diskless.html
http://info.iet.unipi.it/~luigi/diskless981113/
http://www.eldemonio.org/docs/freebsd/diskless.html
http://ezine.daemonnews.org/200301/sparc64-nfsroot.html
http://freebsd.sinica.edu.tw/docs/handbook-2.1.0/handbook178.html
http://www.fanqiang.com/a1/b2/20010416/145643_b.html

沒有留言:

張貼留言