環境:
系統:centos7.1
平台:VirtualBox虛拟機
所安裝的系統:centos6.7、centos7.1
大體的過程:
1、由dhcp為客戶機配置設定位址,并提供客戶機啟動所需的檔案和tftp伺服器位址。
2、客戶機自動從tftp下載下傳bootloader第一階段所需的檔案。pxelinux.0檔案
3、自動開始從tftp下載下傳bootloader第二階段所需的檔案(提供視窗菜單,并啟動相應核心和傳遞參數)。
isolinux.cfg ,splash.jpg,esamenu.c32,vmlinuz,initrd.img。
4、核心運作之後,啟動anaconda安裝程式并加載kickstart檔案,從http伺服器下載下傳程式開始安裝。
注意:centos7字元界面安裝的時候最好不要小于1G的記憶體。不然可能會有稀奇古怪的問題。圖形界面安裝要更多的記憶體。
一、使用centos6.7自帶的引導檔案。
安裝centos6.7.
1、安裝配置dhcp、tftp與httpd服務。
配置dhcpd。配置目錄/etc/dhcp/。 複制dhcp配置樣例檔案:
配置結果:
啟動的時候如果有問題,可以用指令行啟動dhcpd,會顯示哪些行有錯誤。
啟動完成 ss -unl查找67端口是否打開,沒問題我們用客戶機測試一下。

看起來工作正常。
啟動tftpd,在centos7裡面,systemd就已經有xinetd的特性了,不用再來使用xinetd啟動tftp。我們隻要啟動socket就可以, 主程式systemd會帶為啟動。
systemctl start tftpd.socket , 啟動并檢視69/UDP是否開啟。
啟動httpd。預設配置就可以了。
2、複制所需檔案啟動安裝。
安裝syslinux。 這個程式裡面是一堆的bootloader檔案。其中也包括pxe網絡的bootloader。相當于是grub的第一階段引導。
這裡的pxelinux.0加載完成以後,它就會再從相同位置加載第二階段所需的檔案。第二階段再加載核心與initrd。
那麼現在用于引導的第一和第二階段就已經好了。就剩在配置菜單中為核心傳遞ks參數。不過在此之前我們就先來提供ks檔案與軟體倉庫,軟體倉庫這裡就用CD光牒了。
傳遞給核心的ks參數是anacoda程式要用的,也是自動安裝的關鍵。
我這裡的ks檔案内容:
這個檔案中有的内容也不是很清楚, 直接複制馬哥的,自己給簡化了一下。可以安裝system-config-kickstart程式來設定ks檔案。
http://www.mit.edu/afs.new/athena/system/rhlinux/redhat-6.2-docs/HOWTOS/other-formats/pdf/KickStart-HOWTO.pdf
6.The KickStart config file. 說明ks檔案的,有示例。或者:
https://www.redhat.com/promo/summit/2010/presentations/summit/decoding-the-code/wed/cshabazi-530-more/MORE-Kickstart-Tips-and-Tricks.pdf
可惜都是英文的
檔案放在httpd伺服器的主目錄裡。 anaconda支援http協定,不用再使用tftp了。
同時ks檔案中所指定的url就是倉庫的位置,我這裡就在相同目錄的centos6下面。
設定引導菜單。
vim /var/lib/tftpboot/pxelinux.cfg/default
把用不到的都删除了。 并且添加參數ks。 就是從哪裡下載下傳ks檔案。
現在我們引導的第一階段和第二階段看起來都完成了。核心如果加載順利,并啟動anaconda,然後再成功下載下傳ks檔案,anaconda如果可以順利的按着ks檔案安裝完成,也就算安裝完成了。
在這裡倒數第二行可以看到為什麼要在pxelinux.cfg/default裡面放菜單。 pxelinux.0預設讀取的檔案就是這個。
開始安裝了。結果也正常。
安裝centos7.1。
個人以為在一般情況下,第一二階段的引導與系統版本的關系并不是必須。起碼在同是centos系統的6和7版本之間還可以通用。
那麼即然上面我們的引導都做好了,這裡也就隻剩複制一下核心檔案,添加啟動菜單,ks檔案與軟體倉庫了。
注意:centos7安裝的時候最好不要小于1G的記憶體。不然可能有稀奇古怪的問題。
ks檔案:
來看一下現在的httpd的根目錄:
複制一下核心檔案 : 目前目錄在tftp根目錄。
注意:不要複制成centos6的核心了。
修改啟動菜單。
也就是多了4行用于centos7的菜單。menu default是用于預設啟動的。
我們來縷一下,dhcp發送啟動引導檔案。客戶機收到檔案啟動引導,開始加載第二階段。成功以後,會開始加載核心檔案,核心檔案再啟動anaconda。anaconda加載ks檔案,開始安裝過程。
我們來測試一下:
看起來工作正常。重新進入6也工作正常 。 下面是7的。
這個product.img下載下傳失敗沒有影響,CD光牒裡面也沒有這個檔案。
格式化成功,并開始安裝程式了,我們也可以看到一共469個包。
這裡時間有點長,耐心等一下。 結果也正常。重新開機進入系統。這個方塊是因為ks檔案中的lang指定的是CN, 注釋掉lang就可以正常顯示了。
二、使用centos7的引導檔案。
使用centos7的引導檔案也是一樣,不過剛才試的時候出了點問題,而現在又好了,有點奇怪,不知道好用不。
複制centos7CD光牒isolinux下的vesamenu.c32到tftp根目錄,覆寫原來centos6的。
複制centos7CD光牒的isolinux.cfg到pxelinux.cfg/default
我這裡的内容,基本上也就是把核心傳遞參數那裡改一下就可以了。 這個檔案有好多顔色控制。我這裡就不删除了,格式基本也沒有變化,用centos6帶的那個菜單檔案也可以用。
啟動測試:
正常安裝完成。centos6測試了下,也正常。
三、使用第三方的引導檔案。
我們還可以用syslinux包裡帶的一些引導檔案。
cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk}
上面這幾個檔案,用到的也就menu.c32檔案,其它另外的兩個c32檔案不知道是幹什麼用的,另外memdisk好像是一個核心檔案。
menu.c32是字元界面的視窗, 我們上面用的vesamenu.c32是圖形的。
我這裡隻用menu.c32和一個菜單檔案就可以用了。
菜單檔案還是那個default,隻不過要自己定了。與centos6上面的差不多。
我現在的tftp目錄:
initrd.7.img initrd.img menu.c32 pxelinux.0 pxelinux.cfg vmlinuz vmlinuz.7
當然可以忽略centos6的initrd與核心了。
工作正常。 不過用它安裝centos6的時候有時候會在選擇鍵盤的那裡要手動。也不知道是不是剛才設定有問題,現在倒是自動安裝了。
加上6以後:
現在的菜單檔案:
這就完成了。現在是在虛拟機中做的, 在實際環境中可能又會有各種各樣的毛病。 而且有時候可能要安裝多個版本的系統,如ubuntu, fedora...... 。這時就要使用cobbler來安裝。
cobbler其實是pxe的二次封裝,一些檔案或配置可以自動生成,使用起來很友善。
用這種簡單的菜單再用vesamenu.c32,發現很有意思。而且使用起來也沒有什麼問題。
謝謝浏覽。