一、何為PXE Preboot Eexcution Environment,簡稱PXE,暫且翻譯為預啟動執行環境。用一句話來概括PXE的功能——它能通過網路為電腦(特別是“裸機”)安裝操作系統。在PXE下,“裸機”的BIOS和網卡能通過網路來引導啟動自身,而不是通過傳統的磁碟引導方式。PXE的這種 ...
一、何為PXE
Preboot Eexcution Environment,簡稱PXE,暫且翻譯為預啟動執行環境。用一句話來概括PXE的功能——它能通過網路為電腦(特別是“裸機”)安裝操作系統。在PXE下,“裸機”的BIOS和網卡能通過網路來引導啟動自身,而不是通過傳統的磁碟引導方式。PXE的這種功能大大簡化了伺服器的部署和管理流程。
那麼在PXE下,一臺電腦如何引導啟動?這其中涉及到DHCP、NBP、TFTP等多項技術。這些技術細節將在文檔的後面部分講述,這裡以客戶機(client端,即裸機)為主體,大致介紹PXE的工作流程。
PXE工作流程
- client端向本網路的DHCP伺服器獲取IP及NBP的存放路徑
- client端向TFTP伺服器請求下載NBP
- client端執行NBP,並向TFTP伺服器請求下載系統鏡像、配置文件等
- client端根據配置文件,執行引導過程
二、註意事項
1. 本文檔中命令均以root身份執行!
2. 請不要直接複製本文檔中的命令!
三、配置環境
1. 配置server端
使用virtualbox創建一臺虛擬機,命名為pxe-server。它作為整個引導過程的服務端——同時充當DHCP服務端、TFTP服務端和HTTP服務端。
1.1 系統版本
ubuntu-16.04.2-server-amd64
1.2 網卡配置
安裝好系統後,對網卡進行如下配置。
1.2.1 網卡1
連接方式選擇“僅主機(Host-Only)網路”,隨意選擇一個界面名稱,我在這裡選擇的是192.168.202.0/24網段,混雜模式選擇“全部允許”。
1.2.2 網卡2
連接方式選擇“網路地址轉換(NAT)”。
編輯/etc/network/interfaces文件:
...
# The primary network interface
auto enp0s3
iface enp0s3 inet static
address 192.168.202.131
netmask 255.255.255.0
auto enp0s8
iface enp0s8 inet dhcp
重啟兩張網卡:
ifup enp0s3 enp0s8
2. 配置client端
使用virtualbox創建一臺虛擬機,命名為pxe-client。它實際上是一臺裸機,在整個引導過程中,在client端上起重要作用的是BIOS和網卡。
2.1 網卡配置
連接方式選擇“僅主機(Host-Only)網路”,選擇和server端相同的界面名稱,混雜模式選擇“全部允許”。
四、配置DHCP服務
在引導過程中,client端的BIOS會使用DHCP,向server端的DHCP伺服器發送請求,為client端的網卡申請到到一個IP地址,並且定位到網路引導程式(Network Bootstrap Program, NBP)在server端的存放路徑。關於NBP,地位等同於傳統磁碟引導中的boot loader,NBP在真實環境中的文件名一般為pxelinux.0
。
以下是server端上,配置DHCP服務的詳細步驟:
1. 安裝DHCP服務包
apt install isc-dhcp-server
2. 配置DHCP服務的網卡
編輯/etc/default/isc-dhcp-server文件(修改最後一行):
...
INTERFACES="enp0s3"
3. 配置IP地址池
編輯/etc/dhcp/dhcpd.conf文件(先註釋掉原有內容):
...
ddns-update-style interim;
ignore client-updates;
default-lease-time 600;
max-lease-time 7200;
allow booting;
allow bootp;
subnet 192.168.202.0 netmask 255.255.255.0 {
range 192.168.202.200 192.168.202.250;
option routers 192.168.202.131;
option subnet-mask 255.255.255.0;
# address of tftp server
next-server 192.168.202.131;
# name of NBP
filename "pxelinux.0";
}
五、配置TFTP服務
TFTP是一個簡單的文件傳輸協議。在引導過程中,client端獲取到NBP的存放路徑後,使用TFTP從server端下載NBP,系統內核和文件系統也由TFTP伺服器提供。本文檔中,NBP將存放在TFTP伺服器的預設根目錄/var/lib/tftpboot
下。
以下是server端上,配置TFTP服務的詳細步驟:
1. 安裝TFTP服務包
apt install inetutils-inetd tftpd-hpa pxelinux
2. 編輯/etc/inetd.conf文件
在最後一行添加:
tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot
3. 編輯/etc/default/tftpd-hpa文件
在最後添加:
RUN_DAEMON="yes"
OPTIONS="-l -s /var/lib/tftpboot"
4. 重啟TFTP服務
service tftp restart
六、配置HTTP服務
在server端,通過HTTP服務向client端提供系統安裝過程中需要的包。當然也可以使用FTP、NFS等其他方式。
1. 安裝HTTP服務包
apt install apache2
HTTP服務的根目錄預設為/var/www/html。
七、組建PXE服務環境
1. 掛載鏡像
在server端準備一份鏡像,並把它掛載到合適的路徑。
mkdir /media/cdrom
mount -o loop /root/ubuntu-16.04.2-server-amd64.iso /media/cdrom
註:我的鏡像存放在/root/目錄下,掛載到/media/cdrom目錄。
2. 拷貝鏡像文件
將鏡像文件、配置文件拷貝到適當路徑,如下:
cp -a /media/cdrom/install/netboot/* /var/lib/tftpboot/
cp -a /media/cdrom/* /var/www/html
3. 修改配置文件——default
編輯/var/lib/tftpboot/pxelinux.cfg/default文件,註釋掉其中以default
開頭的一行。
編輯/var/lib/tftpboot/ubuntu-installer/amd64/boot-screens/txt.cfg文件(修改第6行):
...
append ks=http://192.168.202.131/ks.cfg vga=788 initrd=ubuntu-installer/amd64/initrd.gz --- quiet live-installer/net-image=http://192.168.202.131/install/filesystem.squashfs
4. 修改配置文件——ks.cfg
在/var/www/html/目錄下創建並編輯ks.cfg文件,進行如下最小化配置:
install
text
lang en_US
langsupport en_US
keyboard us
mouse
timezone --utc Asia/Shanghai
rootpw --disabled
user xxx --fullname="xxx" --password xxx
reboot
url --url http://192.168.202.131
bootloader --location=mbr
zerombr yes
clearpart --all --initlabel
part /boot --fstype ext4 --size 200
part swap --size 1024
part / --fstype ext4 --size 1 --grow
auth --useshadow --enablemd5
network --bootproto=dhcp --device=enp0s3 --onboot=on --nameserver=192.168.202.131
firewall --disabled
skipx
%packages
@^minimal
@core
八、啟動客戶機
啟動client端機器,按F12
進入引導方式選擇界面,再按l
開始網路引導,之後就進入自動部署安裝階段,OK!
註:引導初期,會有一次開機硬體自檢。這裡需要手動跳過為網卡設置nameserver的步驟。