Linux的PXE與UEFI PXE遠程安裝系統(tǒng)
原創(chuàng)在Linux中有多種的安裝方式:HD、USB、CDROM、PXE及遠程管理卡等。在我們的系統(tǒng)運維的生涯中,經(jīng)常要安裝操作系統(tǒng),然而我們維護的機器不是一兩臺而已,一般的企業(yè)服務(wù)器數(shù)量都在幾十、幾百、幾千、甚至上萬臺。這么多的機器,如果人工的一臺一臺去安裝,那我們這些運維人員,可能要把大部分時間都花費在了安裝系統(tǒng)上,所以,我們一般都會建立一個PXE服務(wù)器,通過網(wǎng)絡(luò)來批量部署系統(tǒng)。
隨著計算機產(chǎn)品的更新?lián)Q代以及IT企業(yè)的發(fā)展,一個公司的計算機型號種類越來越多,硬盤也不一樣,那么我們維護的手段也需要與時俱進。本文主要介紹硬件環(huán)境差異比較大的情況下,如何搭建一機多用的PXE服務(wù)器,下面以CentOS-6.4-x86_64版本為例,進行服務(wù)器的配置。
一、普通機器的PXE系統(tǒng)部署
實現(xiàn)自動獲取IP網(wǎng)絡(luò)安裝linux是這樣的:客啟端PXE網(wǎng)卡啟動-->通過Bootp協(xié)議廣播dhcp請求-->DHCP服務(wù)器-->獲取IP,TFTP服務(wù)器地址-->從TFTP上下載 pxelinux.0以及系統(tǒng)內(nèi)核文件vmlinuz、initrd.img-->啟動系統(tǒng)-->(到指定url去下載ks.cfg文件-->根據(jù)ks.cfg文件去NFS/HTTP/FTP服務(wù)器自動下載軟件包)安裝系統(tǒng)-->完成安裝。
主要使用的使用到的服務(wù),F(xiàn)TP server用來發(fā)布linux系統(tǒng)的安裝樹(也可以使用NFS、HTTP或HTTPS),DHCP server為客戶端分配ip并提供TFTP服務(wù)器地址及PXE啟動文件位置,TFTP server為客戶端提供引導(dǎo)文件。三個服務(wù)可以安裝在同一臺服務(wù)器上,也可以安裝在三臺服務(wù)器上。
1、安裝配置FTP server
- [root@pxe ~]# yum install vsftpd
- [root@pxe ~]# chkconfig vsftpd on
- [root@pxe ~]# service vsftpd start
vsftpd的默認配置文件在/etc/vsftpd/vsftpd.conf,共享目錄在/var/ftp/pub/下,不用做什么修改就可以直接使用了。安裝好后要把系統(tǒng)盤鏡像的全部文件復(fù)制到這里,或掛載到這個目錄下,我就是把光盤鏡像掛載到了這里,因為還有個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ù),默認的數(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 //這個可以自己修改
- 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 //如果找不到這個文件,要安裝syslinux軟件包
③將啟動文件從光盤中找到,并復(fù)制到該目錄下:
- [root@pxe ~]# ll /tftpboot/
總用量 36084:
- -rwxrw-rw- 1 root root 32491856 3月 2 2013 initrd.img //這是一個初始化文件,一個最小的系統(tǒng)鏡像
- -rwxrw-rw- 1 root root 26828 12月 9 22:57 pxelinux.0 //這文件是為legcay啟動,它是legcay的啟動鏡像,
- drwxrwxrwx 2 root root 4096 1月 28 12:14 pxelinux.cfg //該文件夾下放的是啟動菜單,手動創(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目錄下,建立默認文件,該文件可以使用光盤中的isolinux.cfg文件來當(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)卡,因為機器有多塊網(wǎng)卡,無人值守會卡在這里。
repo= 是指定安裝鏡像的url,如果沒有,就會提示要一下畫面,那就需要手工處理了。
ip= 可以指定網(wǎng)卡自動獲取ip,還是使用固定ip,如果使用固定ip,系統(tǒng)將把這個ip寫入到配置文件中去。
ks= 是指定ks.cfg文件的url,ks.cfg是個應(yīng)答文件,可以替我們處理所有安裝時,所有需要手工設(shè)置的內(nèi)容,該文件可以直接編輯系統(tǒng)中的/home/anaconda-ks.cfg文件,或者在圖形化下使用system-config-kickstart包來編輯一個,非常好用。
有的時候,可能需要手工來處里某一臺機器,還要跑到那臺機器前嗎?當(dāng)然不需要,安裝的時候也可以使用vnc來遠程操作的。機器不一樣,用途也不一樣,有的時候不能完全自動,也需要我們手工做些改動。
⑤允許遠程訪問安裝系統(tǒng)
在另一個系統(tǒng)上顯示圖形或字符安裝界面,這時就可以使用vnc服務(wù),這是操作系統(tǒng)本身就支持的功能,vnc選項啟動VNC服務(wù),vncpassword選項用來設(shè)置一個遠程訪問的密碼,VNC密碼必須至少6個字符,不設(shè)置密碼去掉vncpassword選項也可以。使用方法很簡單,可以寫在PXE的引導(dǎo)菜單中,添加在kernel或initrd.img后邊,或是在出現(xiàn)菜單畫面時,按Tab鍵,編輯某一行,在最后邊加入vnc vncpassword=123456字段,或是按Esa鍵,在命令行里直接輸入linux vnc vncpassword=123456就可以了,U盤安裝,光盤裝都有效。
假設(shè)遠程機器ip是10.12.190.181.,被安裝機器的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
指定被安裝機器的ip是10.12.190.181 網(wǎng)關(guān)是10.12.190.254 掩碼是24, vnc連接的密碼是123456
由遠程vnc客戶端,連入被安裝機器進行安裝,之后的操作就和平時一樣了。在安裝系統(tǒng)上將顯示如下信息:
vnc連接地址為10.12.190.101:1
(2)反向連接方式:
在遠程啟動vnc的被動連接:vncviewer.exe -listen,當(dāng)客戶端安裝過程啟動后,遠程端的vnc會自動連接
- linux vnc vncconnect=10.12.190.181 vncpassword=123456
vnc會自動反向聯(lián)接10.12.190.181,如果遠程機器開啟vnc監(jiān)聽,在10次超時15秒后,會變成主動方式連接,在安裝系統(tǒng)上將顯示如下信息:
以上2種方式,如果IP是DHCP自動獲取的話,使用反向連接方式比較好,這樣,無需知道安裝系統(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)部署
對于使用UEFI來啟動的機器來說,上述方法已經(jīng)完全無效了,根本無法順利的安裝系統(tǒng)了,如果想順利的安裝系統(tǒng),必須首先加載UEFI驅(qū)動才可以。UEFI PXE和上邊的方法區(qū)別就在于TFTPserver所提供的系統(tǒng)啟動必須文件,和DHCP server的設(shè)置, 所使用到的服務(wù)還是這幾個。
1、TFTP server的配置
配置文件與上邊一樣,只是目錄中的文件要更換一下,這次要從系統(tǒng)盤中提取三個文件。
將光盤中的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的啟動鏡像
- -rwxr-xr-x 1 root root 1341 Mar 5 2013 splash.xpm.gz //UEFI啟動菜單工具
- [root@pxe ~]# cp /mnt/EFI/BOOT/* /tftpboot/
BOOTX64.efi就是我們開機所需要的,這三個文件也可也直接使用光盤中EFI目錄下的文件。
2、DHCP server配置
DHCP重點是要修改一下/etc/dhcp/dhcpd.conf文件,把開機前引導(dǎo)改成BOOTX64.efi,之前我們指定的是pxelinux.0這個文件。
- [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)建開機啟動菜單
- [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
注意這個菜單只能這樣編寫,選項參數(shù)都要加在kernel行后邊,不然無法加載,使用的參數(shù)和普通的PXE是一樣的,編輯好之后就可以使用了。
選擇一個菜單后,等待的時間比較長,當(dāng)你看到這是小企鵝時,UEFI驅(qū)動已經(jīng)加載上了,說明你TFTP server和DHCP server設(shè)置都沒有問題。
如果你看到上面的錯誤信息,說明是的你的菜單寫得有問題,initrd /initrd.img要另起一行,不能與kernel同行。
UEFI安裝系統(tǒng)時,也可以使用vnc遠程安裝,但硬盤的分區(qū)表必須是GPT格式的,如果你的硬盤不是這種格式的,那就需要多一步操作了,使用parted命令去修改。遺憾的是vnc沒有提供Ctrl+Alt+F1~F6快捷鍵,讓你切換到一個字符終端去操作。不過也不是沒有辦法,我們可以在救援模式下連上vnc,這樣輸入命令操作就行了。
parted命令的使用,請參考此文檔。
三、混合模式
一般情況下,我們的機房里,2種類型的服務(wù)都會有,可能還會有安騰架構(gòu)的機器,不會是統(tǒng)一型號的。這樣的話,每次都要去修改DHCP server服務(wù),比較麻煩,將這些不同的機器劃分不同的vlan里,每個vlan里都做個DHCP服務(wù)器,這樣有點太浪費資源了。所以就要用個更好的方法,一臺服務(wù)器同時提供多種系統(tǒng)安裝,而要安裝系統(tǒng)的客戶端機器,會自己從服務(wù)器下載屬于自己的引導(dǎo)文件。
1、TFTP server配置
在/tftpboot/目錄下,不同平臺需要的文件是不一樣的,可以直接把它們?nèi)挤旁赥FTP的根目錄下,但這樣管理不太方便,所以我將普通PXE的引導(dǎo)文件放在/tftpboot/Legacy/下,將UEFI的引導(dǎo)文件放在/tftpboot/UEFI下,其他平臺的也這樣操作就可以了。
2、DHCP server配置
想要實現(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";
- }
- }
- }
這里不再詳細解釋每行的含義,具體可以參考相關(guān)資料。這里很重要的一點是根據(jù)客戶端信息進行判斷來指定服務(wù)器為客戶端提供哪些信息。
啟動文件名稱(如果客戶端使用EFI,啟動名稱為bootia32.efi和boottx64.efi,如果客戶端使用Legacy BIOS啟動,名稱為pxelinux.0),其它服務(wù)部分沒有什么變化,F(xiàn)TP服務(wù)不需要做什么更改。
至此,我們就大功告成了,所有的準(zhǔn)備工作就都完成了,現(xiàn)在就可以使用這個多平臺的PXE進行批量部署了。