什么是PXE
 預啟動執行環境(PXE)是由Intel公司開發的最新技術,工作于Client/Server的網絡模式,支持工作站通過網絡從遠端服務器下載映像,并由此支持通過網絡啟動操作系統,在啟動過程中,終端要求服務器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)協議下載一個啟動軟件包到本機內存中執行,由這個啟動軟件包完成終端(客戶端)基本軟件設置,從而引導預先安裝在服務器中的終端操作系統。PXE可以引導多種操作系統,如:Windows95/98/2000/windows2003/windows2008/winXP/win7/win8,linux系列系統等。
PXE原理
 PXE是在沒有軟驅、硬盤、CD-ROM的情況下引導計算機的一種方式,也就是BIOS將使用PXE協議從網絡引導。整個安裝的過程是這樣的:PXE網卡啟動 => DHCP獲得IP地址 => 從TFTP上下載 pxelinux.0、vmlinuz、initr.img 等 => 引導系統進入安裝步驟 => 通過PEX linux 下載ks.cfg文件并跟據ks.cfg自動化安裝系統 => 完成。
 
TFTP服務
 TFTP是用來下載遠程文件的最簡單網絡協議,它其于UDP協議而實現。
什么是kickstart
 KickStart是一種無人職守安裝方式。KickStart的工作原理是通過記錄典型的安裝過程中所需人工干預填寫的各種參數,并生成一個名為ks.cfg的文件;在其后的安裝過程中(不只局限于生成KickStart安裝文件的機器)當出現要求填寫參數的情況時,安裝程序會首先去查找KickStart生成的文件,當找到合適的參數時,就采用找到的參數,當沒有找到合適的參數時,才需要安裝者手工干預。這樣,如果KickStart文件涵蓋了安裝過程中出現的所有需要填寫的參數時,安裝者完全可以只告訴安裝程序從何處取ks.cfg文件,然后去忙自己的事情。等安裝完畢,安裝程序會根據ks.cfg中設置的重啟選項來重啟系統,并結束安裝。
什么是PXE+Kickstart+TFTP?
 
1.PXE Client向DHCP發送請求:
   PXE Client從自己的PXE網卡啟動,通過PXE BootROM(自啟動芯片)會以UDP(簡單用戶數據報協議)發送一個廣播請求,向本網絡中的DHCP服務器索取IP。
2.DHCP服務器提供信息:
   DHCP服務器收到客戶端的請求,驗證是否來至合法的PXE Client的請求,驗證通過它將給客戶端一個“提供”響應,這個“提供”響應中包含了為客戶端分配的IP地址、pxelinux啟動程序(TFTP)位置,以及配置文件所在位置。
3.PXE客戶端請求下載啟動文件:
   客戶端收到服務器的“回應”后,會回應一個幀,以請求傳送啟動所需文件。這些啟動文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。
4.Boot Server響應客戶端請求并傳送文件:
   當服務器收到客戶端的請求后,他們之間之后將有更多的信息在客戶端與服務器之間作應答, 用以決定啟動參數。BootROM由TFTP通訊協議從Boot Server下載啟動安裝程序所必須的文件(pxelinux.0、pxelinux.cfg/default)。default文件下載完成后,會根據該文件中定義的引導順序,啟動Linux安裝程序的引導內核。
5.請求下載自動應答文件:
   客戶端通過pxelinux.cfg/default文件成功的引導Linux安裝內核后,安裝程序首先必須確定你通過什么安裝介質來安裝linux,如果是通過網絡安裝(NFS, FTP, HTTP),則會在這個時候初始化網絡,并定位安裝源位置。接著會讀取default文件中指定的自動應答文件ks.cfg所在位置,根據該位置請求下載該文件。
   這里有個問題,在第2步和第5步初始化2次網絡了,這是由于PXE獲取的是安裝用的內核以及安裝程序等,而安裝程序要獲取的是安裝系統所需的二進制包以及配置文件。因此PXE模塊和安裝程序是相對獨立的,PXE的網絡配置并不能傳遞給安裝程序,從而進行兩次獲取IP地址過程,但IP地址在DHCP的租期內是一樣的。
6.客戶端安裝操作系統:
   將ks.cfg文件下載回來后,通過該文件找到OS Server,并按照該文件的配置請求下載安裝過程需要的軟件包。
   OS Server和客戶端建立連接后,將開始傳輸軟件包,客戶端將開始安裝操作系統。安裝完成后,將提示重新引導計算機。
環境:
selinux關閉,防火墻關閉
Server:192.168.2.100
Step 1 配置dnf源
[root@localhost ~]# cat server.repo [serverApp]name=appenabled=1gpgcheck=0baseurl=file:///mnt/AppStream[serverOS]name=osenabled=1gpgcheck=0baseurl=file:///mnt/BaseoS Step 2 安裝軟件包
[root@localhost ~]# dnf install dhcp-server tftp-server httpd syslinux -y Step 3 搭建并啟動DHCP
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf subnet 192.168.2.0 netmask 255.255.255.0 {        option routers          192.168.2.100;        range                   192.168.2.10    192.168.2.20;        next-server             192.168.2.100;        filename                "pxelinux.0";}[root@localhost ~]# systemctl start dhcpd[root@localhost ~]# systemctl status dhcpd[root@localhost ~]# netstat -antlup | grep :67udp        0      0 0.0.0.0:67              0.0.0.0:*                           31465/dhcpd         udp        0      0 0.0.0.0:67              0.0.0.0:*                           1345/dnsmasq         Step 4 生成需要的文件并啟動tftp服務
[root@localhost ~]# cp /usr/share/syslinux/pxelinux.0		/var/lib/tftpboot/[root@localhost ~]# cp /mnt/isolinux/{vmlinuz,ldlinux.c32,initrd.img} 		/var/lib/tftpboot/[root@localhost ~]# mkdir /var/lib/tftpboot/pxelinux.cfg[root@localhost ~]# vim /var/lib/tftpboot/pxelinux.cfg/default			#生成default文件default linuxtimeout 3label linux  kernel vmlinuz  append initrd=initrd.img ip=dhcp method=http://192.168.2.100/RHEL ks=http://192.168.2.100/ks.cfg[root@localhost mnt]# systemctl start tftp			#啟動tftp服務[root@localhost mnt]# systemctl status tftp[root@localhost mnt]# netstat -antulp | grep :69udp6       0      0 :::69                   :::*                                1/systemd            Step5 搭建并啟動http服務
[root@localhost ~]# mkdir /var/www/html/RHEL		#建立軟件包存放目錄[root@localhost ~]# mount /dev/cdrom /var/www/html/RHEL		#將光盤掛載到對應目錄中 Step6 生成ks.cfg文件
由于CentOS8.0中沒有system-config-kickstart包,所以無法通過工具生成ks文件,需要手動生成,例子中root用戶和新建的hello用戶的密碼都為‘`123qwe’
如果需要自己額外指定密碼,請使用其它工具進行轉換,例如doveadm命令
cp /root/anaconda-ks.cfg /var/www/html/ks.cfg	#生成ks.cfg文件[root@localhost ~]# vim /var/www/html/ks.cfg#version=RHEL8ignoredisk --only-use=sdaautopart --type=lvm# Partition clearing informationclearpart --all			#刪除所有分區# Use graphical installgraphicalurl     --url="http://192.168.2.100/RHEL/"			#指定安裝URL# Keyboard layoutskeyboard --vckeymap=cn --xlayouts='cn'# System languagelang zh_CN.UTF-8# Network informationnetwork  --bootproto=dhcp --device=ens33 --ipv6=auto --activatenetwork  --hostname=localhost.localdomain# Root password	“`123qwe”			#root用戶的密碼"`123qwe"rootpw --iscrypted $6$lYV8xqOfEWbJZ/8Y$YXDve/YNwljyh6BnrMHkKm.18kyUqZkHBpA4DHA/nEhXckJfNPLpclgNcQUS64XQSDZRAdlWzjPsI8sCe1dPo0# X Window System configuration informationxconfig  --startxonboot# Run the Setup Agent on first boot#firstboot disable		#初次啟動設置firstboot --disable# System servicesservices --enabled="chronyd"# System timezonetimezone America/New_York --isUtc#Reboot after installation	#安裝完成后自動重啟reboot# License agreement		#同意授權協議eula --agreed#Add a new user named hello password “`123qwe” group whell			#普通用戶名字為hello密碼"`123qwe"user --groups=wheel --name=hello --password=$6$GnUoYHa8rYy7XfrK$0OSNtZwn7.mq4mTeEXQvebx8AEKMV7/PYBS0qfLXUUMJFQozCVMGZY3c0gYcfaKhkCDVQAcxCpi01A5f6a9XC. --iscrypted --gecos="hello"%packages@^graphical-server-environment%end%addon com_redhat_kdump --disable --reserve-mb='auto'%end%anacondapwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notemptypwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyokpwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty%end Step7 修改文件權限,啟動http服務
[root@localhost ~]# chmod a+r /var/www/html/ks.cfg[root@localhost ~]# systemctl start httpd[root@localhost ~]# systemctl start httpd[root@localhost ~]# systemctl status httpd[root@localhost ~]# netstat -antlp | grep :80tcp6       0      0 :::80                   :::*                    LISTEN      33976/httpd          Step8 測試
選擇網絡啟動
 
獲取IP和相關文件
 
 開啟安裝進程
 
 安裝完成后自動重啟

kickstart+uefi
環境:
selinux關閉,防火墻關閉
Server:192.168.2.100
Step 1 配置dnf源
[root@localhost ~]# cat server.repo [serverApp]name=appenabled=1gpgcheck=0baseurl=file:///mnt/AppStream[serverOS]name=osenabled=1gpgcheck=0baseurl=file:///mnt/BaseOS Step 2 安裝軟件包
[root@localhost ~]# dnf install dhcp-server tftp-server httpd -y Step 3 搭建并啟動DHCP
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf subnet 192.168.2.0 netmask 255.255.255.0 {        option routers          192.168.2.100;        range                   192.168.2.10    192.168.2.20;        next-server             192.168.2.100;        filename                "BOOTX64.EFI";#注意差異,使用的不是pxelinux.0}[root@localhost ~]# systemctl start dhcpd[root@localhost ~]# systemctl status dhcpd[root@localhost ~]# netstat -antlup | grep :67udp        0      0 0.0.0.0:67              0.0.0.0:*                           31465/dhcpd         udp        0      0 0.0.0.0:67              0.0.0.0:*                           1345/dnsmasq         Step 4 生成需要的文件并啟動tftp服務
[root@localhost ~]# cd /mnt/EFI/BOOT/[root@localhost BOOT]# cp BOOTX64.EFI grub.cfg grubx64.efi /var/lib/tftpboot/[root@localhost ~]# cp /mnt/isolinux/{vmlinuz,initrd.img} 		/var/lib/tftpboot/[root@localhost ~]# vim /var/lib/tftpboot/grub.cfgset default="0"set timeout=3menuentry 'Install CentOS Linux 8.0.1905'  {        linuxefi /vmlinuz ip=dhcp ks=http://192.168.2.100/ks.cfg        initrdefi /initrd.img}[root@localhost mnt]# systemctl start tftp			#啟動tftp服務[root@localhost mnt]# systemctl status tftp[root@localhost mnt]# netstat -antulp | grep :69udp6       0      0 :::69                   :::*                                1/systemd            Step5 搭建并啟動http服務
[root@localhost ~]# mkdir /var/www/html/RHEL		#建立軟件包存放目錄[root@localhost ~]# mount /dev/cdrom /var/www/html/RHEL		#將光盤掛載到對應目錄中 Step6 生成ks.cfg文件
由于CentOS8.0中沒有system-config-kickstart包,所以無法通過工具生成ks文件,需要手動生成,例子中root用戶和新建的hello用戶的密碼都為‘`123qwe’
https://access.redhat.com/labs/kickstartconfig/
如果需要自己額外指定密碼,請使用其它工具進行轉換,例如doveadm命令,但是系統沒有這個工具,所以推薦使用python來實現
[root@localhost ~]# python3 -c 'import crypt,getpass;pw="gongjunhe";print(crypt.crypt(pw))' cp /root/anaconda-ks.cfg /var/www/html/ks.cfg	#生成ks.cfg文件[root@localhost ~]# vim /var/www/html/ks.cfg#version=RHEL8ignoredisk --only-use=nvme0n1    ###注意這是與BIOS方式差異的位置,注意設備類型,可在BIOS中查看到autopart --type=lvm  #使用lvm# Partition clearing informationclearpart --all			#刪除所有分區# Use graphical installgraphical   #使用圖形界面安裝url     --url="http://192.168.2.100/RHEL/"			#指定安裝URL# Keyboard layoutskeyboard --vckeymap=cn --xlayouts='cn'  #指定鍵盤布局# System languagelang zh_CN.UTF-8    #定義語言環境# Network informationnetwork  --bootproto=dhcp --device=ens33 --ipv6=auto --activate  #ip獲取方式network  --hostname=localhost.localdomain #定義主機名稱# Root password	“`123qwe”			#root用戶的密碼"`123qwe"rootpw --iscrypted $6$lYV8xqOfEWbJZ/8Y$YXDve/YNwljyh6BnrMHkKm.18kyUqZkHBpA4DHA/nEhXckJfNPLpclgNcQUS64XQSDZRAdlWzjPsI8sCe1dPo0# X Window System configuration informationxconfig  --startxonboot #圖形窗口配置# Run the Setup Agent on first boot#firstboot disable		#初次啟動設置firstboot --disable# System servicesservices --enabled="chronyd" #設置systemd運行的默認服務器幾何# System timezonetimezone America/New_York --isUtc #時區#Reboot after installation	#安裝完成后自動重啟reboot# License agreement		#同意授權協議eula --agreed#Add a new user named hello password “`123qwe” group whell			#普通用戶名字為hello密碼"`123qwe"user --groups=wheel --name=hello --password=$6$GnUoYHa8rYy7XfrK$0OSNtZwn7.mq4mTeEXQvebx8AEKMV7/PYBS0qfLXUUMJFQozCVMGZY3c0gYcfaKhkCDVQAcxCpi01A5f6a9XC. --iscrypted --gecos="hello"%packages #定義安裝的軟件包@^graphical-server-environment%end%addon com_redhat_kdump --disable --reserve-mb='auto' #額外設置,這里是關閉kdump功能%end%anaconda # 額外的規則設置,這里主要針對的是用戶的密碼規則的定義pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notemptypwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyokpwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty%end Step7 修改文件權限,啟動http服務
[root@localhost ~]# chmod a+r /var/www/html/ks.cfg#如果是拷貝的anaconda-ks.cfg文件,注意修改權限#否則安裝過程中會出現faild .... ks.cfg的報錯提示,因為anaconda-ks.cfg的文件權限是600,除了root別人無法讀取[root@localhost ~]# systemctl start httpd[root@localhost ~]# systemctl start httpd[root@localhost ~]# systemctl status httpd[root@localhost ~]# netstat -antlp | grep :80tcp6       0      0 :::80                   :::*                    LISTEN      33976/httpd          Step8 測試
新建虛擬機測試,根據軟件版本不同,建議在新建虛擬機時選擇自定義,在自定義中的過程中選擇虛擬機固件時,選擇UEFI類型的,同時主機調整服務端和客戶端的網路連接設置,我這里面,ks服務器和測試機的網絡連接選擇的是vmnet4,避免干擾。
有問題可以聯系我
 樹明的技術交流群
白樹明技術圈4群:320990728
白樹明技術圈9群:643736601
新聞熱點
疑難解答