RHEL/CentOS 無盤客戶端
註:這篇文章似乎在張貼前並未經過檢閱。它總體上匯報了部份成功(也就是說局部失敗)。你也許會發現 Linux Terminal Server 計劃有類同、但經過更多校對的內容,而且適用在 CentOS 上。
現時 CentOS 5 針對 system-config-netboot 的支援無法應用。這個套件有技術上的問題令它不易操作。你可以安裝 Fedora Core 6 的 system-config-netbook 套件而它某程度上會「運作」,但當中仍有很多其它問題。
這份指南也許能協助你令事情能在 CentOS 5 環境中運作,但本文的原作者遵照當中的指引後依舊無法成功。
Linux Terminal Server 計劃也有類似的內容,然而卻適用在 CentOS 上。
原作者聲稱 Red Hat 計劃修正錯誤並在將來提供一個可用的 system-config-netbook,卻未有提及這個修正的預計面世日期。這個問題應該不會阻止 CentOS 4 或 5 的機器成為無盤的客戶端,它只會導致 CentOS 5 無法成為一台 NFS 無盤映像伺服器。請再次留意,這只是原作者的見解;在這頁的較新版本內,RussHerrold 依樣葫蘆,並一併修正 NFS 伺服器的 SElinux 標籤,而沒有遇上問題。
這份指南會幫助你設置一台 NFS 伺服器來派發無盤客戶端到你的網絡。假如你想快捷地建立工作台,而不必為硬碟煩惱,又或者為多個安裝而操心,這個方法很有用。這裡某些指令來自官方的 Red Hat 文件。這份指南將會假設你在建立兩種不同的安裝類型:伺服器和桌面的安裝。
已測試系統
CentOS 4.6、CentOS 5.1
註:雖然這部份提及 CentOS 的某個定點發行版本,但基於預期的 API/ABI 兼容性,以下序述即使橫跨所有 4 或 5 的主要發行版本亦應該不變。
外置參考文件
FIXME 加入 CentOS 本地參考文件
設置 NFS 伺服器
1. 安裝 NFS 及建立目錄
若然你還未設置好一台 NFS 伺服器,第一步便是要建立它。客戶端的操作系統會存活於(放置在)這台 NFS 伺服器上。在 PXE 開機的過程中,支援 PXE 開機的網絡卡將會廣播 IP 位置的要求,然後由 DHCP 伺服器分配一個 IP,並選擇性地提供所謂的 next-server 欄,以及當網絡的微型開機映像(來自唯讀記憶體或其它來源)完成後,要接連載入的初始化開機映像。主機將會由這部裡所設定的 NFS 分享區內取得自己的檔案及設定檔。
當你開始加入多過一種的安裝種類時,在 NFS 分享區內提供剩餘的磁碟空間成為必然的事,因為整個客戶端的操作系統將會被複製到 NFS 伺服器上。一般來說,用戶的 /home 是不會被放置在這些映像中,而是獨立被掛載的。假如 NFS 套件仍未被安裝在你的伺服器上,現在請安裝它們。
# yum install nfs-utils nfs-utils-lib sytem-config-nfs
接著,建立你將會需要的目錄。它們會被指定為 NFS 分享區。如果你想將它們放在其它地方,或者你想用不同的名稱,請照樣做。你可以從任何地方分享它們。第一個目錄將會收藏一個 CentOS 4 的伺服器安裝,而第二個目錄將會是一個帶有桌面環境的 CentOS 安裝。
# mkdir -p /srv/diskless/i386/RHEL4S/root # mkdir -p /srv/diskless/i386/RHEL4D/root
2. 設定 NFS 掛載
現在你可以建立支援讀寫的分享區及啟動 NFS 伺服器。
# vim /etc/exports /srv/diskless/i386/RHEL4S/ *(rw,sync,no_root_squash) /srv/diskless/i386/RHEL4S/root/ *(rw,sync,no_root_squash) /srv/diskless/i386/RHEL4S/snapshot/ *(rw,sync,no_root_squash) /srv/diskless/i386/RHEL4D/ *(rw,sync,no_root_squash) /srv/diskless/i386/RHEL4D/root/ *(rw,sync,no_root_squash) /srv/diskless/i386/RHEL4D/snapshot/ *(rw,sync,no_root_squash)
請啟動 NFS 伺服器並檢查 NFS 的分享區都能妥當,然後啟用這個服務。如果 NFS 服務已經在運作中,請重新載入它。
# service nfs start (reload) # chkconfig nfs on # nfs-export -l Directory Permissions Hosts /srv/diskless/i386/RHEL4S/ rw * /srv/diskless/i386/RHEL4S/root/ rw * /srv/diskless/i386/RHEL4S/snapshot/ rw * /srv/diskless/i386/RHEL4D/ rw * /srv/diskless/i386/RHEL4D/root/ rw * /srv/diskless/i386/RHEL4D/snapshot/ rw *
設定 DHCP 伺服器
如果你的網絡裡並沒有一台 Linux 的 DHCP 伺服器,請參閱有關設置一台 DHCP 伺服器的文件。如果你想的話,將 DHCP 伺服器安裝在 NFS 伺服器上亦絕對可行。在我的範例中,有另一台獨立的 DHCP 伺服器已經在運作中。
1. 為 PXE 設定 DHCP
請將以下設定放置在 /etc/dhcpd.conf 內。它指定允許網絡開機。當 DHCP 伺服器遇到這些要求時,它便會將客戶端指向你所指定的 NFS 伺服器。假若你在網絡上已經有一台 DHCP 伺服器,添加第二台時請謹記要小心,
# vim /etc/dhcpd.conf allow booting; allow bootp; class "pxeclients" { match if substring(option vendor-class-identifier, 0, 9) = "PXEClient"; next-server 192.168.1.20; filename "linux-install/pxelinux.0"; }
2. 設置 tftp
請確定 xinetd 及 tftp 已經安裝在 DHCP 伺服器上。
# yum install xinetd tftp-server
請確定這兩個服務在 DHCP 伺服器上都已被設置好。
# chkconfig --level 345 xinetd on # chkconfig --level 345 tftp on
安裝/設定/複製一個安裝
接著你要著手立建立一個安裝。請停用該台安裝上的 iptables 及 selinux 服務。
為了這個實驗,我全新地安裝了一台基本、非圖像化的 CentOS 4.6。請完整地按你的喜好設置主機,因為它將會成為所有無盤客戶端的種。就我而言,我安裝了,更新了,並將一切在我的網絡上需用的本地設定複製到主機上。如果你需要自訂任何東西,請現在就進行,因為一次性地完成會較容易。一個最佳的例子就是所有需要被安裝的第三方 RPM 套件,請你現在就將它們安裝在主機上。主機裡唯一必須安裝的套件是 busybox-anaconda。
# yum install busybox-anaconda
當你按你的需要設定好你的安裝後,請返回 NFS 伺服器並將這個安裝 rsync 到 NFS 分享區內。如果你不想見到甚麼被複製,請移除 -v 這個選項。
# rsync -v -a -e ssh --exclude='/proc/*' --exclude='/sys/*' host_of_installation:/ /srv/diskless/i386/RHEL4S/root/ receiving file list... <剪掉了一大堆輸出>
設置無盤客戶端
1. 設定 netboot
現在返回你的 NFS 伺服器。
# ssh nfs_server
假若你的系統仍未安裝文字版的 netboot 設定工具,請安裝並執行它。
# yum install system-config-netboot-cmd # system-config-netboot
你應該會看見一個細小的對話方塊跳出,詢問你想做甚麼。當你首次執行它時,你會看見一個迷你精靈。請按 Diskless 來繼續。下面概括了你要做的事情。rsync 這個步驟已經完成了。請按 Forward 並輸入操作系統的名稱和描述。之後一個畫面是你輸入 NFS 資料的地方。請在 Server IP Address 輸入 NFS 伺服器的 IP 位址。在 Directory 部份,請輸入首個 NFS 分享區 —— /srv/diskless/i386/RHEL4S。在下一個畫面,請選擇你想在無盤客戶端上應用的內核。完成後,請按 Apply 並等待它用一點時間執行工作。這個工具會自動建立及設定映像檔,並將它放置在 PXE 的開機目錄中。
這些步驟也可透過指令來完成(更詳盡解釋見 man pxeos; man pxeboot):
# pxeos -a -i "centos5.7" -p NFS -D 1 -s 192.168.1.254 -L /srv/diskless/i386/RHEL4S/ centos5.7 # pxeboot -a -O centos5.7 192.168.1.196
在這裡 192.1681.254 是 NFS 伺服器的 IP,而 192.168.1.196 是 PXE 客端的 IP。
完成後,NFS 分享區可改用唯讀權限:
# vim /etc/exports /srv/diskless/i386/RHEL4S/root/ *(ro,sync,no_root_squash) /srv/diskless/i386/RHEL4S/snapshot/ *(rw,sync,no_root_squash) /srv/diskless/i386/RHEL4D/root/ *(ro,sync,no_root_squash) /srv/diskless/i386/RHEL4D/snapshot/ *(rw,sync,no_root_squash)
2. 設定主機
一旦無盤操作系統的環境完成了設置,你便可以利用設定工具來建立及設定一個新的主機系統。如果你需要所有參數的細節,請參閱 Red Hat 文件內的新增主機部份。在圖像工具下,請選擇 New 來開始建立主機的程序。
你新增的機器必須在網絡上擁有一個有效的 IP 位址或主機名稱,這應該不成問題。在我的情況下,我將一台現存的電腦從網絡上抽出來,移走硬盤,並用它來無盤開機。在主機名稱這一欄,請輸入一台有效的機器。由於你現時只設置了一個操作系統,唯一可選擇的操作系統就是你在 netboot 設定的第一步所建立的那一個。如果你有多於一個操作系統,請從選單中選出合適的操作系統。如果你保留空白的 snapshot 名稱,在你網絡上找到的名稱會自動被填入。請記得我們為它匯出了一個 NFS 掛載點:/srv/diskless/i386/RHEL4S{D}/snapshot。最後,如果你想主機把日誌放在遠端,請輸入接納遠端日誌的系統日誌記錄器。完成後,請按 ok 來建立主機。
如果你不想處理任何新機上的錯誤主機名稱,請你從同步檔內刪除它。舉例說,我想建立一個盡可能通用的伺服器安裝,而且我想它在多台機器上啟動。如果我將資料留在檔案內,它會選用操作系統被建立時所取得的主機名稱。這有些不方便。如果你不介意,你可以置之不理。
# vim /srv/diskless/i386/RHEL4S/root/etc/sysconfig/network-scripts/ifcfg-eth0{1,2,3}(你的網絡卡名稱) HWADDR= <--- 改為空白 DHCPDHCP_HOSTNAME= <--- 改為空白
現在當你啟動新的無盤主機時,它便不會因為 MAC 位址有差異而發瘋,也不會擁有一個主機名稱。它只會被命名為 localhost。當然你可以隨意更改主機名稱。
新增主機就是這樣做了。現在你可以為每個操作系統的環境重覆整個程序。請勿忘記,如果你建立新的操作系統類型,你會想在 NFS 下建立一個新的目錄作匯出之用。試想像它是操作系統的居所,因此請給它們可辨認的名稱。在我的用途裡,我建立了上述的伺服器及桌面安裝。然而,你可以利用它作任何用途。假設你想為某個特定的工作建立一個安裝,但你卻沒有硬盤供這台機器使用。你可以在 VMware 或任何一個虛擬環境下建立一個系統,並將這個安裝複製到 NFS 上。現在你便可以在任何擁有 PXE 網絡卡的機器上應用它。
PXE 開機
有關 PXE,它是 Preboot Execution Environment 的縮寫。如果你渴望更深入瞭解它,請搜尋維基百科。簡單來說,網絡卡的韌體會搜尋 DHCP 伺服器所傳遞的 PXE 資料,當中指向你所指定的 NFS 伺服器。接著它會透過 tftp 下載開機檔進入記憶體內,進而執行它。最終,你的操作系統會從記憶體中啟動起來。
網絡卡都各有不同,因此請查詢該卡的生產有關如果在你的系統上啟用 PXE。多數較新的卡在出廠時已經支援它,因此你只需在 BIOS 內啟用這個功能(內置網絡卡),或存取網絡卡的工具選單。同樣地,網絡卡都各有不同。
一旦你的網絡卡及系統已經準備妥當,請開機並測試它。它應該進入網絡卡的選單,並匯報關於 MAC 位址或說 bootp 在載入中。接著它應該立刻轉至你的 NFS 伺服器,然後啟動 Linux 映像。現在你可以從你公司的電腦內偷走所有硬碟了,嘿。
Translation of revision 8