PXE工作原理簡介
PXE (Preboot Excution Environment) 預啟動執行環境
工作環境介紹:
要實現PXE自動網絡安裝CentOS至少需要兩台主機
1)PXE服務器PXE Server(同時安裝DHCP,tftp,CentOS安裝yum源等)
2)准備通過網絡安裝系統的客戶機Clinet
3)准備好CentOS 6和CentOS 7兩個安裝光盤鏡像,並掛載.
4)使用VMware等虛擬機時應給所有虛擬機的網卡分配為僅主機或其他與物理機所在局域網相隔離的模式,避免DHCP服務器對外部局域網造成混亂.
工作步驟:
1) Client開機,發廣播向DHCP服務器請求IP地址,PXE Server上的DHCP服務接收到請求后,驗證Client的MAC等信息通過后,發送一個可用IP地址給Client,並將啟動文件pxelinux.0的存放地址(TFTP提供)發送給Client
2)得到地址的Client向TFTP服務器請求pxelinux.0文件,PXE Server(TFTP服務)向Client發送pxelinux.0的文件大小信息,Client驗證如果文件大小信息可接受,便返回同意信息,之后TFTP服務向Client發送pxelinux.0文件
3)Client執行pxelinux.0文件,之后向TFTP請求配置信息文件,(TFTP服務工作目錄中的pxelinux.cfg/default),TFTP服務把配置文件發給Client
4)Client向TFTP服務請求Linux內核和根文件系統,TFTP服務將kernel(vmlinuz)和initramfs(initrd.img)文件傳給Client
5)Client啟動Linux內核,之后通過http協議得到kickstart以及系統安裝文件,並根據kickstart文件自動安裝CentOS
實例:
下面一個實例來實現搭建能夠同時自動安裝CentOS 6和CentOS7的PXE服務器:
實例以CentOS 7為搭建環境.
1.安裝所需服務
需要安裝四個包:
dhcp,tftp-server,syslinux,httpd
]# yum install dhcp tftp-server syslinux httpd
所有服務設為開機啟動
]# systemctl enable dhcpd ]# systemctl enable tftp.socket ]# systemctl enable httpd
dhcp: 為Client分配ip地址
tftp服務: 輕量化的ftp服務,一般網卡中會內置tftp客戶端,無需操作系統支持便可實現文件下載.用於安裝系統前獲取啟動安裝系統所需的啟動文件等資源.
syslinux: syslinux是一個功能強大的引導加載程序,而且兼容各種介質。更加確切地說:SYSLINUX是一個小型的Linux操作系統,它的目的是簡化首次安裝Linux的時間,並建立修護或其它特殊用途的啟動盤。但我們在這里只需要用到syslinux包里的某幾個文件.
httpd: 主要方便用來提供網絡資源下載.
2.各服務配置:
tftp:
tftp服務不需要做什么配置,安裝並啟動就可以直接使用了.需要留意tftp的工作目錄為/var/lib/tftpboot/
httpd:
httpd服務默認配置即可使用,這里只需要記住httpd的文件目錄/var/www/html/
dhcp
cat /etc/dhcpd/dhcpd.conf
subnet部分修改為以下內容.
subnet 192.168.5.0 netmask 255.255.255.0 {
range 192.168.5.100 192.168.5.105;
next-server 192.168.5.72;
filename "pxelinux.0";
}
說明:
除此之外的其他配置可以注釋掉.
subnet 192.168.5.0 netmask 255.255.255.0
規划一個可以管理的子網段.可以設定多個.
range 192.168.5.100 192.168.5.105;
表示可以分配ip地址的范圍,例子中是100到105 一共6個地址
next-server 192.168.5.72;
網絡啟動時必備參數,表示tftp的IP地址.
filename "pxelinux.0";
啟動文件的文件名,位於tftp上.
3.所需文件的准備
/var/www/html/ 下需要的文件
]# tree -L 2 /var/www/html
├── centos
│ ├── 6
│ └── 7
└── ksdir
├── ks6-desktop.cfg
├── ks6-mini.cfg
├── ks7-desktop.cfg
└── ks7-mini.cfg
yum源
把centos6和centos7的光盤掛載到http工作目錄/var/www/html/中作為yum源.
]# mkdir -p /var/www/html/centos/{6,7}
掛載光盤
]# mount /dev/sr1 /var/www/html/centos/6
]# mount /dev/sr0 /var/www/html/centos/7
修改/etc/fstab,實現開機自動掛載
LABEL=CentOS\0407\040x86_64 /var/www/html/centos/7 iso9660 ro 0 0
LABEL=CentOS_6.9_Final /var/www/html/centos/6 iso9660 ro 0 0
kickstart文件
我這里提前准備了四個ks文件,分別為CentOS 6 和7的桌面版本和最小化安裝版本,分別為:
ks7-desktop.cfg,ks7-mini.cfg,ks6-desktop.cfg,ks6-mini.cfg
把他們放到/var/www/html/ksdir/下
]# mkdir /var/www/html/ksdir
修改ks文件中的相關參數:
只列出與本次安裝相關的參數
vim ks6-desktop.cfg
url --url=http://192.168.7.72/centos/6/
vim ks7-desktop.cfg
url --url=http://192.168.7.72/centos/7/
ks6-mini.cfg和ks7-mini.cfg對應上面兩個參數改成一樣
/var/lib/tftpboot/ 目錄下需要的文件
├── 6
│ ├── initrd.img
│ └── vmlinuz
├── 7
│ ├── initrd.img
│ └── vmlinuz
├── boot.msg
├── pxelinux.0
├── pxelinux.cfg
│ └── default
├── splash.png
└── vesamenu.c32
啟動文件
這里的文件為用於啟動安裝程序的文件
pxelinux.0
]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
kernel(vmlinuz)
我們需要用於啟動安裝程序的內核vmliuz,可從光盤復制
vesamenu.c32
菜單界面生成文件vesamenu.c32,這個菜單比menu.c32更美觀一些.配合需要的文件還有boot.msg和splash.png,也不需要區分CentOS版本,這里直接用CentOS 7的文件.
]# cp /var/www/html/centos/7/isolinux/{vesamenu.c32,boot.msg,splash.png} /var/lib/tftpboot/ ]# mkdir /var/lib/tftpboot/{6,7} ]# cp /var/www/html/centos/6/isolinux/{initrd.img,vmlinuz} /var/lib/tftpboot/6 ]# cp /var/www/html/centos/7/isolinux/{initrd.img,vmlinuz} /var/lib/tftpboot/7
此外還需要一個菜單內容文件pxelinux.cfg/default
]# mkdir /var/lib/ftptboot/pxelinux.cfg ]# cp /misc/cd/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
按照規划修改一下default內容
default vesamenu.c32
#prompt 1
timeout 60
display boot.msg
menu background splash.png
menu title PXE Install CentOS
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 c6desktop
menu label Install an CentOS ^6 desktop system
kernel 6/vmlinuz
append initrd=6/initrd.img ks=http://192.168.7.72/ksdir/ks6-desktop.cfg
label c7desktop
menu label Install an CentOS ^7 desktop system
kernel 7/vmlinuz
append initrd=7/initrd.img ks=http://192.168.7.72/ksdir/ks7-desktop.cfg
label c6mini
menu label Install an CentOS 6 mini system
kernel 6/vmlinuz
append initrd=6/initrd.img ks=http://192.168.7.72/ksdir/ks6-mini.cfg
label c7mini
menu label Install an CentOS 7 mini system
kernel 7/vmlinuz
append initrd=7/initrd.img ks=http://192.168.7.72/ksdir/ks7-mini.cfg
label local
menu default
menu label Boot from ^local drive
localboot 0xffff
完成之后,啟動所有服務.
新建虛擬機Client,開機引導設備選network,等待安裝菜單的出現,選定要安裝的系統版本即可.