Linux的PXE與UEFI PXE遠(yuǎn)程安裝系統(tǒng)
原創(chuàng)在Linux中有多種的安裝方式:HD、USB、CDROM、PXE及遠(yuǎn)程管理卡等。在我們的系統(tǒng)運(yùn)維的生涯中,經(jīng)常要安裝操作系統(tǒng),然而我們維護(hù)的機(jī)器不是一兩臺(tái)而已,一般的企業(yè)服務(wù)器數(shù)量都在幾十、幾百、幾千、甚至上萬臺(tái)。這么多的機(jī)器,如果人工的一臺(tái)一臺(tái)去安裝,那我們這些運(yùn)維人員,可能要把大部分時(shí)間都花費(fèi)在了安裝系統(tǒng)上,所以,我們一般都會(huì)建立一個(gè)PXE服務(wù)器,通過網(wǎng)絡(luò)來批量部署系統(tǒng)。
隨著計(jì)算機(jī)產(chǎn)品的更新?lián)Q代以及IT企業(yè)的發(fā)展,一個(gè)公司的計(jì)算機(jī)型號(hào)種類越來越多,硬盤也不一樣,那么我們維護(hù)的手段也需要與時(shí)俱進(jìn)。本文主要介紹硬件環(huán)境差異比較大的情況下,如何搭建一機(jī)多用的PXE服務(wù)器,下面以CentOS-6.4-x86_64版本為例,進(jìn)行服務(wù)器的配置。
一、普通機(jī)器的PXE系統(tǒng)部署
實(shí)現(xiàn)自動(dòng)獲取IP網(wǎng)絡(luò)安裝linux是這樣的:客啟端PXE網(wǎng)卡啟動(dòng)-->通過Bootp協(xié)議廣播dhcp請求-->DHCP服務(wù)器-->獲取IP,TFTP服務(wù)器地址-->從TFTP上下載 pxelinux.0以及系統(tǒng)內(nèi)核文件vmlinuz、initrd.img-->啟動(dòng)系統(tǒng)-->(到指定url去下載ks.cfg文件-->根據(jù)ks.cfg文件去NFS/HTTP/FTP服務(wù)器自動(dòng)下載軟件包)安裝系統(tǒng)-->完成安裝。
主要使用的使用到的服務(wù),F(xiàn)TP server用來發(fā)布linux系統(tǒng)的安裝樹(也可以使用NFS、HTTP或HTTPS),DHCP server為客戶端分配ip并提供TFTP服務(wù)器地址及PXE啟動(dòng)文件位置,TFTP server為客戶端提供引導(dǎo)文件。三個(gè)服務(wù)可以安裝在同一臺(tái)服務(wù)器上,也可以安裝在三臺(tái)服務(wù)器上。
1、安裝配置FTP server
- [root@pxe ~]# yum install vsftpd
- [root@pxe ~]# chkconfig vsftpd on
- [root@pxe ~]# service vsftpd start
vsftpd的默認(rèn)配置文件在/etc/vsftpd/vsftpd.conf,共享目錄在/var/ftp/pub/下,不用做什么修改就可以直接使用了。安裝好后要把系統(tǒng)盤鏡像的全部文件復(fù)制到這里,或掛載到這個(gè)目錄下,我就是把光盤鏡像掛載到了這里,因?yàn)檫€有個(gè)ks.cfg文件要發(fā)到這里,所以我在這里有建立了mirror目錄,將系統(tǒng)鏡像掛載到了/var/ftp/pub/mirror/下。
2、安裝配置DHCP server
- [root@pxe ~]# yum install dhcp
編輯配置文件,這里是很重要的。
- [root@pxe ~]# vim /etc/dhcp/dhcpd.conf
- default-lease-time 600;
- max-lease-time 7200;
- ddns-update-style none;
- subnet 10.12.190.0 netmask 255.255.255.0 {
- range dynamic-bootp 10.12.190.100 10.12.190.120;
- option routers 10.12.190.254;
- option subnet-mask 255.255.255.0;
- filename "pxelinux.0"; //如果不是在TFTP根目錄下,要寫上目錄
- next-server 10.12.190.140; //tftp服務(wù)器地址
- }
3、安裝配置TFTP server
①安裝TFTP,然后編輯配置文件,開啟開啟服務(wù),默認(rèn)的數(shù)據(jù)目錄/var/lib/tftpboot
- [root@pxe ~]# yum install tftp-server
- [root@pxe ~]# vim /etc/xinetd.d/tftp
- service tftp
- {
- socket_type = dgram
- protocol = udp
- wait = yes
- user = root
- server = /usr/sbin/in.tftpd
- server_args = -s /tftpboot //這個(gè)可以自己修改
- disable = no //將yes改成no是啟用
- per_source = 11
- cps = 100 2
- flags = IPv4
- }
- [root@pxe ~]# service xinetd restart
②將pxelinux.0拷貝到tftpboot目錄下
- [root@pxe ~]# cp /usr/share/syslinux/pxelinux.0 /tftpboot //如果找不到這個(gè)文件,要安裝syslinux軟件包
③將啟動(dòng)文件從光盤中找到,并復(fù)制到該目錄下:
- [root@pxe ~]# ll /tftpboot/
總用量 36084:
- -rwxrw-rw- 1 root root 32491856 3月 2 2013 initrd.img //這是一個(gè)初始化文件,一個(gè)最小的系統(tǒng)鏡像
- -rwxrw-rw- 1 root root 26828 12月 9 22:57 pxelinux.0 //這文件是為legcay啟動(dòng),它是legcay的啟動(dòng)鏡像,
- drwxrwxrwx 2 root root 4096 1月 28 12:14 pxelinux.cfg //該文件夾下放的是啟動(dòng)菜單,手動(dòng)創(chuàng)建
- -rwxrw-rw- 1 root root 151230 3月 5 2013 splash.jpg //背景圖片,可以不要
- -rwxrw-rw- 1 root root 162860 3月 5 2013 vesamenu.c32 //legacy BIOS引導(dǎo)菜單工具,可以從光盤或 /usr/share/syslinux/ 中找到
- -rwxrw-rw- 1 root root 4043888 3月 5 2013 vmlinuz //內(nèi)核文件
④在pxelinux.cfg目錄下,建立默認(rèn)文件,該文件可以使用光盤中的isolinux.cfg文件來當(dāng)模板,這個(gè)啟動(dòng)菜單很重要
- [root@pxe ~]# vim /tftpboot/pxelinux.cfg/default
- default vesamenu.c32
- timeout 30
- menu background splash.jpg
- menu title Welcome to PXE CentOS-6.4-x86_64!
- menu color border 0 #ffffffff #00000000
- menu color sel 7 #ffffffff #ff000000
- menu color title 0 #ffffffff #00000000
- menu color tabmsg 0 #ffffffff #00000000
- menu color unsel 0 #ffffffff #00000000
- menu color hotsel 0 #ff000000 #ffffffff
- menu color hotkey 7 #ffffffff #ff000000
- menu color scrollbar 0 #ffffffff #00000000
- label linux
- menu label ^ Install or upgrade CentOS-6.4-x86_64 an existing system from to Network
- kernel vmlinuz
- append initrdinitrd=initrd.img ksdevice=eth0 repo=ftp://10.12.190.187/pub/mirror ip=dhcp
- label linux
- menu label ^ Install CentOS-6.4-x86_64 use kisckstart file
- menu default
- kernel vmlinuz
- append initrdinitrd=initrd.img ip=10.12.190.183 netmask=255.255.255.0 gateway=10.12.13.254 dns=202.106.0.20 ksdevice=eth0 ks=ftp://10.12.190.187/pub/ks.cfg
- label rescue
- menu label ^Rescue installed system
- kernel vmlinuz
- append initrdinitrd=initrd.img rescue ksdevice=eth0 repo=ftp://10.12.190.187/pub/mirror ip=dhcp
- label local
- menu label Boot from ^local drive
- localboot 0xffff
以上參數(shù)可以接在kernel后邊,也可以接在initrd.img后邊,都不影響。
ksdevice= 是為了指定使用哪塊網(wǎng)卡,因?yàn)闄C(jī)器有多塊網(wǎng)卡,無人值守會(huì)卡在這里。
repo= 是指定安裝鏡像的url,如果沒有,就會(huì)提示要一下畫面,那就需要手工處理了。
ip= 可以指定網(wǎng)卡自動(dòng)獲取ip,還是使用固定ip,如果使用固定ip,系統(tǒng)將把這個(gè)ip寫入到配置文件中去。
ks= 是指定ks.cfg文件的url,ks.cfg是個(gè)應(yīng)答文件,可以替我們處理所有安裝時(shí),所有需要手工設(shè)置的內(nèi)容,該文件可以直接編輯系統(tǒng)中的/home/anaconda-ks.cfg文件,或者在圖形化下使用system-config-kickstart包來編輯一個(gè),非常好用。
有的時(shí)候,可能需要手工來處里某一臺(tái)機(jī)器,還要跑到那臺(tái)機(jī)器前嗎?當(dāng)然不需要,安裝的時(shí)候也可以使用vnc來遠(yuǎn)程操作的。機(jī)器不一樣,用途也不一樣,有的時(shí)候不能完全自動(dòng),也需要我們手工做些改動(dòng)。
⑤允許遠(yuǎn)程訪問安裝系統(tǒng)
在另一個(gè)系統(tǒng)上顯示圖形或字符安裝界面,這時(shí)就可以使用vnc服務(wù),這是操作系統(tǒng)本身就支持的功能,vnc選項(xiàng)啟動(dòng)VNC服務(wù),vncpassword選項(xiàng)用來設(shè)置一個(gè)遠(yuǎn)程訪問的密碼,VNC密碼必須至少6個(gè)字符,不設(shè)置密碼去掉vncpassword選項(xiàng)也可以。使用方法很簡單,可以寫在PXE的引導(dǎo)菜單中,添加在kernel或initrd.img后邊,或是在出現(xiàn)菜單畫面時(shí),按Tab鍵,編輯某一行,在最后邊加入vnc vncpassword=123456字段,或是按Esa鍵,在命令行里直接輸入linux vnc vncpassword=123456就可以了,U盤安裝,光盤裝都有效。
假設(shè)遠(yuǎn)程機(jī)器ip是10.12.190.181.,被安裝機(jī)器的ip是10.12.190.101
(1)正向連接方式:
- linux vnc ip=10.12.190.101 netmask=255.255.255.0 gateway=10.12.190.254 vncpassword=123456
指定被安裝機(jī)器的ip是10.12.190.181 網(wǎng)關(guān)是10.12.190.254 掩碼是24, vnc連接的密碼是123456
由遠(yuǎn)程vnc客戶端,連入被安裝機(jī)器進(jìn)行安裝,之后的操作就和平時(shí)一樣了。在安裝系統(tǒng)上將顯示如下信息:
vnc連接地址為10.12.190.101:1
(2)反向連接方式:
在遠(yuǎn)程啟動(dòng)vnc的被動(dòng)連接:vncviewer.exe -listen,當(dāng)客戶端安裝過程啟動(dòng)后,遠(yuǎn)程端的vnc會(huì)自動(dòng)連接
- linux vnc vncconnect=10.12.190.181 vncpassword=123456
vnc會(huì)自動(dòng)反向聯(lián)接10.12.190.181,如果遠(yuǎn)程機(jī)器開啟vnc監(jiān)聽,在10次超時(shí)15秒后,會(huì)變成主動(dòng)方式連接,在安裝系統(tǒng)上將顯示如下信息:
以上2種方式,如果IP是DHCP自動(dòng)獲取的話,使用反向連接方式比較好,這樣,無需知道安裝系統(tǒng)的客戶端獲取的IP是多少,也可以建立連接。
⑥另一種安裝菜單的寫法:
- label linux
- menu label ^ Install or upgrade CentOS-6.4-x86_64 an existing system from to Network
- kernel /vmlinuz ksdevice=eth0 repo=ftp://10.12.190.187/pub/mirror ip=dhcp
- initrd /initrd.img
- label linux
- menu label ^ Install CentOS-6.4-x86_64 use kisckstart file
- menu default
- kernel /vmlinuz ip=10.12.190.183 netmask=255.255.255.0 gateway=10.12.13.254 dns=202.106.0.20 ksdevice=eth0 ks=ftp://10.12.190.187/pub/ks.cfg
- initrd /initrd.img
以上就是普通PXE安裝系統(tǒng)的所有操作方法,現(xiàn)在就可以使用了。
二、UEFI PXE的系統(tǒng)部署
對(duì)于使用UEFI來啟動(dòng)的機(jī)器來說,上述方法已經(jīng)完全無效了,根本無法順利的安裝系統(tǒng)了,如果想順利的安裝系統(tǒng),必須首先加載UEFI驅(qū)動(dòng)才可以。UEFI PXE和上邊的方法區(qū)別就在于TFTPserver所提供的系統(tǒng)啟動(dòng)必須文件,和DHCP server的設(shè)置, 所使用到的服務(wù)還是這幾個(gè)。
1、TFTP server的配置
配置文件與上邊一樣,只是目錄中的文件要更換一下,這次要從系統(tǒng)盤中提取三個(gè)文件。
將光盤中的efiboot.img掛在到系統(tǒng)中:
- [root@pxe ~]# mount -o loop efiboot.img /mnt
- [root@pxe ~]# ll /mnt/EFI/BOOT/
- total 250
- -rwxr-xr-x 1 root root 411 Mar 5 2013 BOOTX64.conf //為grub的配置文件,用于顯示引導(dǎo)菜單
- -rwxr-xr-x 1 root root 251274 Mar 5 2013 BOOTX64.efi //UEFI的啟動(dòng)鏡像
- -rwxr-xr-x 1 root root 1341 Mar 5 2013 splash.xpm.gz //UEFI啟動(dòng)菜單工具
- [root@pxe ~]# cp /mnt/EFI/BOOT/* /tftpboot/
BOOTX64.efi就是我們開機(jī)所需要的,這三個(gè)文件也可也直接使用光盤中EFI目錄下的文件。
2、DHCP server配置
DHCP重點(diǎn)是要修改一下/etc/dhcp/dhcpd.conf文件,把開機(jī)前引導(dǎo)改成BOOTX64.efi,之前我們指定的是pxelinux.0這個(gè)文件。
- [root@pxe ~]# vim /etc/dhcp/dhcpd.conf
- default-lease-time 600;
- max-lease-time 7200;
- ddns-update-style none;
- subnet 10.12.190.0 netmask 255.255.255.0 {
- range dynamic-bootp 10.12.190.100 10.12.190.120;
- option routers 10.12.190.254;
- option subnet-mask 255.255.255.0;
- filename "BOOTX64.efi";
- next-server 10.12.190.140;
- }
3、創(chuàng)建開機(jī)啟動(dòng)菜單
- [root@pxe ~]# vim /tftpboot/efidefault
- default=0
- timeout=15
- splashimage=(nd)/splash.xpm.gz
- title Install CentOS-6.4-x86_64 (UEFI)
- root (nd)
- kernel /vmlinuz method=ftp://10.12.190.187/pub/mirror/ ip=10.12.16.100 netmask=255.255.255.0 gateway=10.12.16.1 lang=en_US keymap=us ksdevice=eth0 vnc vncpassword=123456
- initrd /initrd.img
- title Install CentOS-6.4-x86_64 use Kickstart File
- root (nd)
- kernel /vmlinuz ks=ftp://10.12.190.187/pub/ks.cfg ksdevice=eth0 ip=dhcp
- initrd /initrd.img
- title Rescue installed system
- root (nd)
- kernel /vmlinuz rescue method=ftp://10.12.190.187/pub/mirror
- initrd /initrd.img
注意這個(gè)菜單只能這樣編寫,選項(xiàng)參數(shù)都要加在kernel行后邊,不然無法加載,使用的參數(shù)和普通的PXE是一樣的,編輯好之后就可以使用了。
選擇一個(gè)菜單后,等待的時(shí)間比較長,當(dāng)你看到這是小企鵝時(shí),UEFI驅(qū)動(dòng)已經(jīng)加載上了,說明你TFTP server和DHCP server設(shè)置都沒有問題。
如果你看到上面的錯(cuò)誤信息,說明是的你的菜單寫得有問題,initrd /initrd.img要另起一行,不能與kernel同行。
UEFI安裝系統(tǒng)時(shí),也可以使用vnc遠(yuǎn)程安裝,但硬盤的分區(qū)表必須是GPT格式的,如果你的硬盤不是這種格式的,那就需要多一步操作了,使用parted命令去修改。遺憾的是vnc沒有提供Ctrl+Alt+F1~F6快捷鍵,讓你切換到一個(gè)字符終端去操作。不過也不是沒有辦法,我們可以在救援模式下連上vnc,這樣輸入命令操作就行了。
parted命令的使用,請參考此文檔。
三、混合模式
一般情況下,我們的機(jī)房里,2種類型的服務(wù)都會(huì)有,可能還會(huì)有安騰架構(gòu)的機(jī)器,不會(huì)是統(tǒng)一型號(hào)的。這樣的話,每次都要去修改DHCP server服務(wù),比較麻煩,將這些不同的機(jī)器劃分不同的vlan里,每個(gè)vlan里都做個(gè)DHCP服務(wù)器,這樣有點(diǎn)太浪費(fèi)資源了。所以就要用個(gè)更好的方法,一臺(tái)服務(wù)器同時(shí)提供多種系統(tǒng)安裝,而要安裝系統(tǒng)的客戶端機(jī)器,會(huì)自己從服務(wù)器下載屬于自己的引導(dǎo)文件。
1、TFTP server配置
在/tftpboot/目錄下,不同平臺(tái)需要的文件是不一樣的,可以直接把它們?nèi)挤旁赥FTP的根目錄下,但這樣管理不太方便,所以我將普通PXE的引導(dǎo)文件放在/tftpboot/Legacy/下,將UEFI的引導(dǎo)文件放在/tftpboot/UEFI下,其他平臺(tái)的也這樣操作就可以了。
2、DHCP server配置
想要實(shí)現(xiàn)混合模式,最關(guān)鍵的就是DHCP的配置文件了
- [root@pxe ~]# vim /etc/dhcp/dhcpd.conf
- default-lease-time 600;
- max-lease-time 7200;
- ddns-update-style none;
- option space PXE;
- option PXE.mtftp-ip code 1 = ip-address;
- option PXE.mtftp-cport code 2 = unsigned integer 16;
- option PXE.mtftp-sport code 3 = unsigned integer 16;
- option PXE.mtftp-tmout code 4 = unsigned integer 8;
- option PXE.mtftp-delay code 5 = unsigned integer 8;
- option arch code 93 = unsigned integer 16;
- subnet 10.12.190.0 netmask 255.255.255.0 {
- option routers 10.12.190.254;
- range 10.12.190.10 10.12.190.20;
- class "pxeclients" {
- match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
- next-server 10.12.190.181;
- if option arch = 00:02 {
- filename "ia64/elilo.efi";
- } else if option arch = 00:06 {
- filename "X86PC/bootia32.efi";
- } else if option arch = 00:07 {
- filename "UEFI/BOOTX64.efi";
- } else {
- filename "Legacy/pxelinux.0";
- }
- }
- }
這里不再詳細(xì)解釋每行的含義,具體可以參考相關(guān)資料。這里很重要的一點(diǎn)是根據(jù)客戶端信息進(jìn)行判斷來指定服務(wù)器為客戶端提供哪些信息。
啟動(dòng)文件名稱(如果客戶端使用EFI,啟動(dòng)名稱為bootia32.efi和boottx64.efi,如果客戶端使用Legacy BIOS啟動(dòng),名稱為pxelinux.0),其它服務(wù)部分沒有什么變化,F(xiàn)TP服務(wù)不需要做什么更改。
至此,我們就大功告成了,所有的準(zhǔn)備工作就都完成了,現(xiàn)在就可以使用這個(gè)多平臺(tái)的PXE進(jìn)行批量部署了。