瞭解Cobbler之前,我們需要先對PXE及KickStart有一定的認識。 PXE PXE(Pre-bootExecution Environment),預啟動執行環境,通過網路介面啟動電腦,支持Client通過網路從Server下載映像,並由此通過網路啟動操作系統;在啟動過程中,Client要 ...
瞭解Cobbler之前,我們需要先對PXE及KickStart有一定的認識。
PXE
PXE(Pre-bootExecution Environment),預啟動執行環境,通過網路介面啟動電腦,支持Client通過網路從Server下載映像,並由此通過網路啟動操作系統;在啟動過程中,Client要求Server分配IP地址,再用TFTP下載一個啟動軟體包到本機記憶體中執行,由這個啟動軟體包完成Client基本的軟體設置並安裝操作系統。
要達成PXE有兩個必須的條件:
(1)Client的網卡必須要支持PXE功能,並且開機時選擇從網卡啟動;
(2)完整的PXE Server必須要提供含有DHCP、TFTP服務,還要加上NFS/FTP/HTTP(選擇一樣即可)等提供安裝文件(安裝鏡像的解壓文件)。
KickStart
KickStart 是一種無人值守的安裝方式,它的工作原理是在安裝過程中記錄人工干預填寫的各種參數,並生成一個名為ks.cfg的文件。我們可以簡單理解為一個自動安裝應答配置管理程式。通過讀取這個配置文件,系統知道怎麼去分區,要安裝什麼包,配什麼IP,優化什麼內核參數等等。其主要組成部分包括:
- KickStart安裝選項,包含語言的選擇,防火牆,密碼,網路,分區的設置等;
- %Pre部分,安裝前解析的腳本,通常用來生成特殊的ks配置,比如由一段程式決定磁碟分區等;
- %Package部分,安裝包的選擇,可以是@core這樣的group形式,也可以是vim-*這樣的包形式;
- %Post部分,安裝後執行的腳本,通常用來做系統的初始化設置,比如啟動的服務,相關的設定等。
PXE+KickStart的工作流程
- 1. PXE Client向DHCP Server發送請求:支持PXE的網路介面卡(NIC)的Client的BIOS設置成為網路啟動,通過UDP(簡單用戶數據報協議)發送一個廣播請求,向網路中的DHCP Server索取IP地址等信息。
- 2. DHCP Server提供信息:DHCP Server收到Client的請求,驗證是否來至合法的PXE Client的請求,驗證通過它將給Client返迴響應,響應內容包含了為Client分配的IP Address、TFTP Server以及配置文件所在位置。
- 3. PXE Client請求下載啟動文件:Client收到DHCP Server的響應後,會回應一個幀,以請求傳送啟動所需文件,這些啟動文件包括:pxelinux.0(相當於boot loader)、pxelinux.cfg/default、vmlinuz、initrd.img等文件。
- 4. TFTP Server響應Client請求並傳送文件:Client會根據該文件中定義的引導順序,啟動Linux安裝程式的引導內核。
- 5. 請求下載自動應答文件:Client通過pxelinux.cfg/default文件成功的引導Linux安裝內核後,安裝程式首先必須確定你通過什麼安裝介質來安裝linux,如果是通過網路安裝(NFS, FTP, HTTP),則會在這個時候初始化網路,並定位安裝源位置。(或許你會說,剛纔PXE不是已經獲取過IP地址了嗎?為什麼現在還需要一次?這是由於PXE獲取的是安裝用的內核以及安裝程式等,而安裝程式要獲取的是安裝系統所需的二進位包以及配置文件。由於它們需要的內容不同造成PXE模塊和安裝程式是相對獨立的,PXE的網路配置並不能傳遞給安裝程式。從而進行兩次獲取IP地址過程。)接著讀取該文件中指定的自動應答文件ks.cfg所在位置,根據該位置請求下載該文件。
- 6. Client安裝操作系統:將ks.cfg文件下載回來後,通過該文件找到OS Server,並按照該文件的配置請求下載安裝過程需要的軟體包。
Cobbler
概述
Cobbler由python語言開發,是對PXE和KickStart的封裝,融合很多特性,提供了CLI和Web的管理形式,能更加方便地實行網路安裝;Cobbler也提供了API介面,因此使用其它語言也很容易做擴展。Cobbler不僅可以安裝物理機,同時也支持KVM、XEN虛擬化、Guest OS的安裝;更多的是它還能結合Puppet等集中化管理軟體,實現自動化的管理。
組成
Cobbler的結構基於一組註冊的對象,每個對象都是相互關聯的實體(該實體指向另一個實體,或者另一個實體指向該實體)。當一個對象指向另一個對象時,它就繼承了被指向對象的數據,並可覆蓋或添加更多特定信息。對象類型的定義為:
- 發行版(Distribution):表示一個操作系統,它承載了kernel和initrd的信息,以及內核參數等其它數據;
- 配置文件(Profile):包含一個發行版、一個KickStart文件以及可能的存儲庫,還包含更多特定的內核參數等其它數據;
- 系統(System):包含一個配置文件或一個鏡像,還包含IP Address和MAC Address、電源管理(地址、憑據、類型)以及更為專業的數據等信息;
- 存儲庫(Repository):保存一個yum或rsync存儲庫的鏡像信息;
- 鏡像(Image):可替換一個包含不屬於此類別的文件的發行版對象。
基於註冊的對象以及各個對象之間的關聯,Cobbler 知道如何更改文件系統以反映具體配置,因為系統配置的內部是抽象的,因此我們可以只關註想要執行的操作。
工作原理
Server端:
- 啟動Cobbler服務
- 進行Cobbler錯誤檢查,執行cobbler check命令
- 進行配置同步,執行cobbler sync命令
- 複製相關啟動文件文件到TFTP目錄中
- 啟動DHCP服務,提供地址分配
- DHCP服務分配IP地址
- TFTP傳輸啟動文件
- Server端接收安裝信息
- Server端發送ISO鏡像與Kickstart文件
Client端:
- 客戶端以PXE模式啟動
- 客戶端獲取IP地址
- 通過TFTP伺服器獲取啟動文件
- 進入Cobbler安裝選擇界面
- 客戶端確定載入信息
- 根據配置信息準備安裝系統
- 載入Kickstart文件
- 傳輸系統安裝的其它文件
- 進行安裝系統
小結
- Cobbler可以看作是一個更多功能的PXE,它實現系統安裝和PXE+KickStart也差不多,需要的文件和過程大致都一樣;
- Cobbler能自動管理DNS/TFTP/DHCP/RSYNC這四個服務(但似乎對TFTP的管理有點bug,需要手動啟動TFTP),且Cobbler依賴於HTTPD(PXE支持HTTP/NFS/FTP);
- 基本的系統安裝,Cobbler只需生成一個Distro和一個Profile即可:Distro相當於一個鏡像,它提供安裝系統過程中所需的一切文件,如vmlinuz,initrd以及rpm包等;Profile的作用是為了自動修改pxelinux.cfg/default文件,每生成或修改一次profile,都會在default文件中修改或追加對應的label;
- 除了Distro/Profile之外,Cobbler還管理System/Images/Repository等,但是用的很少。