什么是PXE?
PXE:pre-boot executionenvironment預啟動執行環境
由intel公司開發的技術
工作於C/s的網絡模式
Client通過網絡從server下載映像,並通過網絡啟動操作系統
應用場景
liveOS
OS安裝
PXE基本原理
-
Client向PXE Server上的DHCP發送IP地址請求消息,DHCP檢測Client是否合法(主要是檢測Client的網卡MAC 地址),如果合法則返回Client的IP 地址,同時將啟動文件pxelinux.0 的位置信息一並傳送給Client
-
Client向PXE Server上的TFTP發送獲取pxelinux.0請求消息,TFTP 接收到消息之后再向Client發送pxelinux.0大小信息,試探Client 是否滿意,當TFTP 收到Client 發回的同意大小信息之后,正式向Client 發送pxelinux.0
-
Client 執行接收到的pxelinux.0 文件
-
Client 向TFTP Server 發送針對本機的配置信息文件(在TFTP 服務的pxelinux.cfg目錄下),FTP 將配置文件發回Client ,繼而Client 根據配置文件執行后續操作。
-
Client 向TFTP 發送Linux 內核請求信息,TFTP 接收到消息之后將內核文件發送給Client。
-
Client 向TFTP 發送根文件請求信息,TFTP接收到消息之后返回Linux 根文件系統。
-
Client 啟動Linux 內核。
8.Client下載安裝源文件,讀取自動化安裝腳本。
構建自動化安裝系統的pxe服務
准備工作
關閉防火牆和seLinux
[root@centos7 ~]# iptables -F [root@centos7 ~]# setenforce 0 |
配置DHCP服務器
[root@centos7 ~]# yum -y install dhcp [root@centos7 ~]# cat /etc/dhcp/dhcpd.conf subnet 192.168.10.0 netmask 255.255.255.0{ range 192.168.10.100 192.168.10.200; next-server 192.168.10.1; #TFTP服務器地址 filename "pxelinux.0"; #Bootstrap文件名稱 } |
創建kiskstart文件
kickstart文件可以三種生成方式:
手動書寫
通過system-config-kickstart圖形工具
anaconda安裝程序自動生成
[root@centos7 ~]# yum install -y system-config-kickstart [root@centos7 ~]# system-config-kickstart 啟動kickstart圖形工具 |
需要修改yum倉庫名稱為development才可以選擇安裝包。
[root@centos7 ~]# cat /etc/yum.repos.d/base.repo [development] #這個地方修改為development name=zachary baseurl=file:///mnt/cdrom gpgcheck=0 |
根據圖形向導生成一個ks.cfg的文件。
安裝syslinux軟件包
[root@centos7 ~]# yum -y install syslinux |
配置FTP服務器
此步驟可以使用其他類型服務器,比如nfs或者http
#安裝ftp服務器 [root@centos7 ~]# yum -y install vsftpd #配置安裝系統所需的軟件倉庫 [root@centos7 ~]# mkdir -pv /var/ftp/pub/centos/{6,7} [root@centos7 ~]# mount /dev/sr0 /var/ftp/pub/centos/7 [root@centos7 ~]# mount /dev/sr1 /var/ftp/pub/centos/6 [root@centos7 ~]# mkdir –v /var/ftp/pub/ks [root@centos7 ~]# mv ks6.cfg ks7.cfg /var/ftp/pub/ks/ks.cfg [root@centos7 ks]# chmod +r /var/ftp/pub/ks/* #注意權限 |
注意:在配置完成ftp中的軟件倉庫后,一定要驗證該倉庫可用(瀏覽器查看一下)
TFTP服務器配置
[root@centos7 ~]# yum -y install tftp-server [root@centos7 ~]# cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/ [root@centos7 ~]# mkdir –v /var/lib/tftpboot/{pxelinux.cfg,centos7.3,centos6.9} [root@centos7 ~]# cp -v /var/ftp/pub/centos/7/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos7.3/ [root@centos7 ~]# cp -v /var/ftp/pub/centos/6/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos6.9/ [root@centos7 pxelinux.cfg]# cat default default menu.c32 timeout 300 menu title ########## PXE Boot Menu ########## label centos6.9 menu label ^Kickstart Inatall CentOS 6.9 menu default kernel centos6.9/vmlinuz append ks=ftp://192.168.10.3/pub/ks/ks6.cfg initrd=centos6.9/initrd.img label centos7.3 menu label ^Kickstart Inatall CentOS 7.3 menu default kernel centos7.3/vmlinuz append ks=ftp://192.168.10.3/pub/ks/ks7.cfg initrd=centos7.3/initrd.img |
注意:如果使用centos6來搭建pxe 服務器,tftp由xinetd服務來管理這種非獨立服務。
設置相關服務啟動
[root@centos7 ~]# systemctl enable dhcpd.service [root@centos7 ~]# systemctl start dhcpd.service [root@centos7 ~]# systemctl enable tftp.socket [root@centos7 ~]# systemctl start tftp.socket [root@centos7 ~]# systemctl enable vsftpd.service [root@centos7 ~]# systemctl start vsftpd.service |
排錯思路
每個服務器在測試過程中的排錯都是根據其原來和返回的錯誤信息來進行錯誤的排查。PXE也不例外。
1客戶端要使用pxe安裝操作系統,首先要有一塊支持pxea安裝的網卡。
2 網卡獲取ip地址 。網卡要正確獲取ip地址和tftp服務器地址(next-sever)就需要檢查dhcp配置選項。
3 正確獲取ip地址后,tftp服務無法使用的常見情況有下面幾種
dhcp配置文件中next-server地址與地址不符。
防火牆和selinux不允許訪問tftp,這時可以對其做相應配置。簡單方法是直接關閉。
tftp配置出現錯誤,可以通過這個目錄樹結構檢查
[root@centos7 tftpboot]# tree . ├── centos6.9 │?? ├── initrd.img │?? └── vmlinuz ├── centos7.3 │?? ├── initrd.img │?? └── vmlinuz ├── menu.c32 ├── pxelinux.0 └── pxelinux.cfg ├── default |
4 出現菜單文件后,基本上就與tftp沒什么太大關系了。這時如果出現錯誤就是內核選項的參數問題,或者鏡像倉庫問題。以及ks文件的問題。如果在搭建過程中搭建軟件倉庫的那個步驟做過詳細檢查的話,一般這里不會出現大的錯誤。
問題一般出現在權限問題,路徑問題。
5 特別提醒:在tftp服務器中的內核文件和ramfs一定要與安裝鏡像中的一致。