瞭解Cobbler以前,咱們須要先對PXE及KickStart有必定的認識。python
PXE
PXE(Pre-bootExecution Environment),預啓動執行環境,經過網絡接口啓動計算機,支持Client經過網絡從Server下載映像,並由此經過網絡啓動操做系統;在啓動過程當中,Client要求Server分配IP地址,再用TFTP下載一個啓動軟件包到本機內存中執行,由這個啓動軟件包完成Client基本的軟件設置並安裝操做系統。
要達成PXE有兩個必須的條件:
(1)Client的網卡必需要支持PXE功能,而且開機時選擇從網卡啓動;
(2)完整的PXE Server必需要提供含有DHCP、TFTP服務,還要加上NFS/FTP/HTTP(選擇同樣便可)等提供安裝文件(安裝鏡像的解壓文件)。linux
KickStart
KickStart 是一種無人值守的安裝方式,它的工做原理是在安裝過程當中記錄人工干預填寫的各類參數,並生成一個名爲ks.cfg的文件。咱們能夠簡單理解爲一個自動安裝應答配置管理程序。經過讀取這個配置文件,系統知道怎麼去分區,要安裝什麼包,配什麼IP,優化什麼內核參數等等。其主要組成部分包括:vim
- 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等,可是用的不多。