[版權說明] [作者列表] [前言] [安裝] [致謝] [參考網址]
修改日期Dec/6/2002
本文版權屬於全體作者所有,且以 GNU FDL 授權合約發佈。在遵守 GNU
FDL 授權合約的情況下,您可以複製、散佈,以及修改本文件。唯請保持
作者列表的完整,若您修改過此份文件,也請在作者列表中加入您的大名。
同時請注意本文件沒有任何擔保,若因本文件而產生任何直接或間接的損
失,本文作者群均不負任何法律及道義上的責任。
Steven Shiau (jhshiau@nchc.gov.tw)
K. L. Huang (c00hkl00@nchc.gov.tw)
H. T. Wang (c00wht00@nchc.gov.tw)
最近遇到一些朋友、學校與公司在大量使用Linux機器的時候,遇到一個很大的問題,就是機器的管理與架設,一來人力有限,二來故障除錯太耗時。因此小弟就將往日在PC Cluster上使用diskless, remote boot的經驗在此野人獻曝一下。對學校的訓練教室教學而言,使用這個方式的好處在於系統管理者只需照顧到server部分,對於clients就比較不用花時間。由於硬碟目前幾乎是PC最容易故障的部分,如果使用diskless的方式,只有server有硬碟,這樣可以減少一些不必要的困擾。
目前這樣的環境在高速電腦中心的PC 教室測試過,一台Celeron 450 + 512 MB的 server,供給30台左右的client都可以很順利的使用(詳細硬體規格見附件一)。此外,我們也實際到台北縣新莊福營國中的電腦教室實際測試,1台P-III 600+768MB的的server,供給35台左右的clients,使用情形也相當不錯。有了這兩個經驗之後,小弟可以很有信心的將架設的方式詳細說明,相信可以省卻您不少摸索的時間。
另外,值得一提的是,很多朋友問我,已經有LTSP這樣得東西了,為何還要為何要再做一個DRBL? 基本上,LTSP是集中使用伺服器上資源,而DRBL採用的是分散式的作法。DRBL所要求的server是中階的電腦,一台CPU 500MHZ左右的server搭配fast ethernet 的交換器就可以供目前台灣中小學電腦教室40台學生的電腦使用。同樣的配備,如果使用LTSP,可能只能供10台學生電腦使用。
這部分當然還是安裝在server上,只是這些服務是提供給client用的。要安裝dhcp server以及tftp server,然後還要製作client machine remote boot所需要的kernel,在server上建置client所需要的檔案系統,製作client端(也就是學生用的機器)的開機片,設定server上的網路(包含對內,對外)。
- 執行 "rpm -ivh dhcp-2.0pl5-8.i386.rpm"
- 編輯/etc/dhcpd.conf
- 為了除錯方便,您最好知道每一台client機器的MAC address,以便除錯時好找。如果client機器多的話,這是個大工程,您需要先記錄每一台client網路卡的MAC address,然後編寫/etc/dhcpd.conf。利用etherboot產生的開機軟碟片,在client開機的時候就可以看到那一台網路卡的MAC address。這裡提供一個script程式(dhcpd.pl),方便編寫dhcpd.conf。請先把所有的client機器的網路卡MAC address寫成一個檔,例如mac.txt,內容如下:
-----------------------
00:10:5A:5C:BB:E3
00:10:5A:5C:BB:A4
00:10:5A:5C:BB:F5
-----------------------
然後執行"dhcpd.pl mac.txt node vmlinuz.etherboot drbl",這幾個參數的意思分別是mac_address.txt client的hostname etherboot_kernel_nbi_name client的nisdomain。(有些參數的意思後面會用到,您可先照用)
這裡我們預設eth0是跑private IP,也就是所有的clients是透過eth0與server連結。eth1是server對外的網路。
執行後會產生兩個檔:dhcpd.conf與hosts,請將檔案放在/etc下。然後將/etc/sysconfig/dhcpd的"DHCPDARGS=ethx"改為您dhcpd服務所連接的網路卡 (例如DHCPDARGS=eth1).
- 執行"service dhcpd start"來啟動dhcpd
- 執行"rpm -ivh tftp-server-0.28-2.i386.rpm;
- 編輯/etc/xinetd.d/tftp
- 將其中的"disable = yes"改成 "disable = no"
- 執行"service xinetd restart"來重新啟動
/tftpboot/node001 192.168.0.1(rw,no_root_squash)
/usr 192.168.0.1(ro,no_root_squash)
/home 192.168.0.1(rw,no_root_squash)
/tftpboot/node002 192.168.0.2(rw,no_root_squash)
/usr 192.168.0.2(ro,no_root_squash)
/home 192.168.0.2(rw,no_root_squash)
...
- FIXME 取得最新的kernel,基本的核心編譯可以參考這裡。請先執行"make mrproper"來清除之前make後可能殘留下來的檔案。這裡要配合您的client所需要的硬體來選擇,包含CPU type,音效卡等等.由於是要remote boot,所以這裡有幾個選項一定要選取
- 在network options中, kernel ip autoconfiguration一定要選取,且要選為buildin(也就是*號,而不是M或空白),然後底下會出現三個選項,將第一個dhcp與bootp選取,也是buildin (*).即
in Networking options: check
[*] IP: kernel level autoconfiguration
[*] IP: DHCP support
[*] IP: BOOTP support
[ ] IP: RARP support <--- not necessary
- 在network device中,將您的網路卡選取,且也要選為buildin(也就是*號,而不是M或空白),例如如果您的網路卡是螃蟹卡realtek 8139,請選取:
- Network device support ---> Ethernet (10 or 100Mbit) ---> <*> RealTek RTL-8139 PCI Fast Ethernet Adapter support
- NFS client中務必要選root file system on NFS,即:
File system, -> Network File Systems --->, check
<*> NFS file system support
[*] Provide NFSv3 client support
[*] Root file system on NFS
- 執行"make dep; make clean; make bzImage"之後,如果沒有問題的話,所編譯出來的核心檔案位置arch/i386/boot/bzImage.
- 執行"make modules; make modules_install INSTALL_MOD_PATH=/tftpboot/cleint_kernel_module",如果沒有問題的話,所編譯完的modules會放在目錄"/tftpboot/cleint_kernel_module"中.
- 特別強調:diskless client machine開機時(也就是還沒有mount NFS)所需的driver,如硬碟,網路卡等,都必須compile進kernel(也就是選為*號,而不是M),不能compile成module
- 將所產生的bzImage用mknbi-linux做Tag,讓etherboot可以remote boot使用
- 先下載(http://etherboot.sourceforge.net/distribution.html)並安裝mknbi套件(rpm -ivh mkbni-1.0.6.rpm)
- 確定您目前的工作目錄是在編譯核心的工作目錄,然後執行"mknbi-linux --output=/tftpboot/vmlinuz.etherboot --ip=rom arch/i386/boot/bzImage",其中--output表示所產生的Tagged kernel位置, -ip=rom表示client開機之後會繼承dhcpd所給的所有參數,包含ip, netmask等等. arch/i386/boot/bzImage是上個步驟所編譯出來的核心檔案位置.
- 這部份要先注意到,如果您的client與server的硬體架構是一樣的話,那就可以直接借用server已經有的filesystem.但是如果兩者的主機板和CPU差別太大的話,例如server是Athlon 1.33GHz的CPU搭配socket A的主機板,而client是AMD K6-2 350MHz的CPU搭配socket 7的主機板,有兩個方式解決,一個就是將kernel以及glibc的差異改掉,另一個就是先找一台client來安裝Linux,然後再放到server的/tftpboot下來供其他client機器來使用.以免因為硬體架構的差別太大而造成client無法使用filesystem.(筆者曾經因為這樣的困擾,搞了好久,最後才發覺是這個問題).
- 基本上建置client的檔案系統,主要就是在/tftpboot下建一個目錄(例如是node001),然後將所需要檔案,包含dev, etc, lib, bin, sbin等等放到/tftpboot/node001下.當然有些部份可以將server的用NFS分享給client,但是有些目錄卻是基於安全以及好管理的考量,每個client自己要有一份.作法如下:
- case 1 - client與server的硬體架構是一樣,或是差別不大
- 請先下載這個nfsroot.sh (這是從http://etherboot.sourceforge.net/doc/html/diskless.html下載的,然後經筆者更改過),然後執行"Usage: ./nfsroot.sh template_src_dir tftpboot_dir client-hostname client-IP client-nisdomain nis_server_ip nfs_server_to_mount autologin_option(true of false) autologin_id",例如"./nfsroot.sh / /tftpboot node001 192.168.0.1 drbl 192.168.0.254 192.168.0.254 true student001",這樣它就會將server的檔案系統複製一份到/tftpboot/node001下,並且建好mount point.然後將所需要的檔案更改,包括/tftpboot/node001/etc/fstab, /tftpboot/node001/etc/hosts, /tftpboot/node001/etc/sysconfig/network, /tftpboot/node001/etc/network-scripts/ifcfg-eth0等等
- 下載這個檔案setupx_redhat.tar.gz,這是一個在開機的時候自動XF86Config-4的service,然後在/tftpboot/node001/etc/rc.d/下解開,然後在server上執行"chroot /tftpboot/node001/; chkconfig --add setupx; exit",這樣就會將這個service加到node001中
- 這個時候您可以先跳到NFS, NIS設定好的步驟,然後直接用軟碟將node001開機試看看,看是否可以順利開機。
- 下載push.sh,這是一個批次處理檔來複製多台clients檔案系統的程式,簡要使用說明是"/push.sh node_name start_node_no end_node_no template_src_dir tftpboot_dir client-nisdomain nis_server_ip server_to_mount autologin_option\(true or false\) autologin_id_prefix", 然後執行"./push.sh node 2 5 /tftpboot/template/nodex_nchc/ /tftpboot EBP 192.168.0.254 server1 true student",其中start_node_no與end_node_no分別表示您所要開始與結束的node,例如"./push.sh node 2 30",這樣的話,就會複製client機器從node002, node003...到node030的檔案系統。並且會修改所需要的相關檔案。
- case 2 - client與server的硬體架構差別很大
- 遇到這種情形的話,您就不能借用server的filesystem了,否則會遇到一些奇奇怪怪的問題,當然您也可以花一些時間找出server和client的差異,然後將這些差異改一改(主要的差異是在kernel以及glibc)。另外一個方式就是先在client安裝一套完整的Linux filesystem,然後將所有檔案傳到server上然後再分享給其他client用。
- 所以步驟就是
- 找一台client來安裝Linux filesystem
- 安裝完畢之後,將所有的檔案系統打包(tar cvzf client_template.tgz /),然後傳到server上,再解開(cd /tftpboot; mkdir template; cd template; tar xvzf PATH_TO_FILE/client_template.tgz)。這裡的PATH_TO_FILE就是您client_template.tgz所在的位置。
- 請先下載這個nfsroot.sh (這是從http://etherboot.sourceforge.net/doc/html/diskless.html下載的,然後經筆者更改過),然後執行"Usage: ./nfsroot.sh template_src_dir tftpboot_dir client-hostname client-IP client-nisdomain nis_server_ip nfs_server_to_mount autologin_option(true of false) autologin_id",例如"./nfsroot.sh /tftpboot/template /tftpboot node001 192.168.0.1 drbl 192.168.0.254 192.168.0.254 true student001",這樣它就會將server的檔案系統複製一份到/tftpboot/node001下,並且建好mount point.然後將所需要的檔案更改,包括/tftpboot/node001/etc/fstab, /tftpboot/node001/etc/hosts, /tftpboot/node001/etc/sysconfig/network, /tftpboot/node001/etc/network-scripts/ifcfg-eth0等等
- 下載這個檔案setupx_redhat.tar.gz,這是一個在開機的時候自動XF86Config-4的service,然後在/tftpboot/node001/etc/rc.d/下解開,然後在server上執行"chroot /tftpboot/node001/; chkconfig --add setupx; exit",這樣就會將這個service加到node001中
- 下載push.sh,這是一個批次處理檔來複製多台clients檔案系統的程式,簡要使用說明是"/push.sh node_name start_node_no end_node_no template_src_dir tftpboot_dir client-nisdomain nis_server_ip server_to_mount autologin_option\(true or false\) autologin_id_prefix", 然後執行"./push.sh node 2 5 /tftpboot/template/nodex_nchc/ /tftpboot EBP 192.168.0.254 server1 true student",其中start_node_no與end_node_no分別表示您所要開始與結束的node,例如"./push.sh node 2 30",這樣的話,就會複製client機器從node002, node003...到node030的檔案系統。並且會修改所需要的相關檔案。
- 製作client端(也就是學生用的機器)的開機片-這是學生端機器沒有支援網路開機PXE的網路卡,只能用軟碟開機時。以etherboot 5.0.6為例
- 從這裡下載rom file: http://www.rom-o-matic.org
以3com 3c905c 網路卡,etherboot 5.0.6而言,可以下載 "eb-5.0.6-3c905c-tpo.lzdsk"- 然後放入磁片到軟碟機,
- 若是在Linux下,執行 "cat eb-5.0.6-yournic.lzdsk > /dev/fd0"
- 若是在MS windows下,您要用rawrite.exe或是"RawWrite for windows" (http://uranus.it.swin.edu.au/~jn/linux/)來寫入此檔到軟碟片。
- 當然也可以自己下載etherboot-5.0.6.tar.bz2來做的話
參考文件: 將etherboot-doc-5.0.6.tar.bz2解開,其中的 doc/text/userman.txt- a. tar xjf etherboot-5.0.6.tar.bz2
b. cd src; make (如果是gcc2.96,會被要求改src/Config,將gcc改為kgcc)
c. 產生的lzrom在src/bin32下,例如src/bin32/3c905c-tpo.lzrom
d. 要將此放到磁片的話,在Linux下,放一片空白的磁片,
執行make bin32/card.fd0,(card.fd0要取代成網路卡的名字,
例如 make bin32/3c90x.fd0),程式會將檔案copy到磁片
e. 如果以後對別片網路卡要做開機片的話,例如用戶端的機器有螃蟹卡,就用
cat bin/boot1a.bin bin32/rtl8139.lzrom > /dev/fd0
- 學生端的機器有支援PXE的網路卡
- 這種情形下,學生端電腦的軟碟機都可以省了,直接用PXE搭配etherboot來DRBL!
- 詳細內容可以參考這裡:http://www.ltsp.org/documentation/pxe.howto.html
- 主要的差別在就在/etc/dhcpd.conf中的這裡,以下為例子:
---------------------------------------------
......
host ws136 {
hardware ethernet 00:01:02:c1:79:c7;
fixed-address 192.168.2.136;
if substring (option vendor-class-identifier, 0, 9) = "PXEClient" {
filename "/tftpboot/eb-5.0.2-mc1-3c905c-tpo.lzpxe";
} else if substring (option vendor-class-identifier, 0, 9) = "Etherboot" {
filename "/tftpboot/lts/vmlinuz-test.nbi";
option vendor-encapsulated-options 3c:09:45:74:68:65:72:62:6f:6f:74:ff;
}
......
---------------------------------------------
- 也就是您第一次要先讓etherboot做出來的pxe檔案被client下載,然後就可以完全變成etherboot的作法了,要注意的是這要用dhcp 3.0以後的版本來使用... (ps.用pxe搭配etherboot時,Intel e1000這張卡目前似乎無解...)
# Turn on IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
然後,server的routing要設定一下,為了確定以及方便,您可以不要用netmask來切分subnet,而直接您用"-host"來寫死routing table,例如
- route add -host 192.168.0.1 eth1
- route add -host 192.168.0.2 eth1
- ...
- route add -host 192.168.0.13 eth1
- route add -host 192.168.0.14 eth2
- route add -host 192.168.0.15 eth2
- ...
- route add -host 192.168.0.26 eth2
- route add -host 192.168.0.27 eth3
- route add -host 192.168.0.28 eth3
- ...
- route add -host 192.168.0.40 eth3
對了,也要清除部分原來系統default設定的routing table
- route del -net 192.168.0.0 netmask 255.255.255.0 eth1
- route del -net 192.168.0.0 netmask 255.255.255.0 eth2
- route del -net 192.168.0.0 netmask 255.255.255.0 eth3
1.感謝輔仁大學毛慶禎教授提供這麼多機會以及找到那麼多地點供小弟測試。
2.感謝福營國中資訊組長張文杰老師提供Openoffice.org軟體派送相關資料。參考網址
附件一
高速電腦中心C教室PC的規格附件二
server & client配備如下:
server: (這是臨時湊的,並不是該教室專用的server)o Celeron 450 MHz (300 超頻的), Ram 512MB.o IDE硬碟 20GB. 網路卡兩張,1張對內, 3Com 3c905B, 1張對外,Realtek 8139。o OS: RedHat 7.3/Mandrake 8.2
Client:
o Intel Pentium III 550 MHz processor with 512KB integrated L2 cache
o 256MB 100MHz SDRAM
o Intel 440BX AGP 晶片組主機板
o Ultra ATA/33 10GB Harddisk
o 3.5" 1.44MB floppy drive
o MATROX Milliennium G400 16MB SGRAM 顯示卡
o 10/100 自動切換 Ethernet 網路卡(on board)-Intel EEPro 100
o IDE 32x CD-ROM
o 16 bit, SoundBlaster -compliant-Crystal 4235 音效卡(on board)
o PS2 mouse
o ViewSonic GT775 17" 螢幕
Openoffice 1.0.1軟體派送作法(請注意,這只適合Openoffice 1.0.1版,不適用在1.0.0)
- 請先下載這個openoffice1.0.1.tar.gz,將其在根目錄解開,
- 修改script /usr/bin/openoffice,將其中的 OOINSTPATH改為您Openoffice 1.0.1安裝的目錄,例如OOINSTPATH=/usr/local/openoffice
- 如此,以後user執行openoffice即會自動檢查是否有沒有setup openoffice,如果沒有的話,會自動幫user setup.