首頁 > 軟體

使用PXE方式引導Ubuntu系統

2020-06-16 17:08:58

一、何為PXE

Preboot Eexcution Environment,簡稱PXE,暫且翻譯為預啟動執行環境。用一句話來概括PXE的功能——它能通過網路為計算機(特別是“裸機”)安裝作業系統。在PXE下,“裸機”的BIOS和網絡卡能通過網路來引導啟動自身,而不是通過傳統的磁碟引導方式。PXE的這種功能大大簡化了伺服器的部署和管理流程。

那麼在PXE下,一台計算機如何引導啟動?這其中涉及到DHCP、NBP、TFTP等多項技術。這些技術細節將在文件的後面部分講述,這裡以客戶機(client端,即裸機)為主體,大致介紹PXE的工作流程。

PXE工作流程

  1. client端向本網路的DHCP伺服器獲取IP及NBP的存放路徑
  2. client端向TFTP伺服器請求下載NBP
  3. client端執行NBP,並向TFTP伺服器請求下載系統映象、組態檔等
  4. 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的步驟。


IT145.com E-mail:sddin#qq.com