文章目錄
- 1. 本文用到的術語解釋
- 2. PXE 原理
- 3. PXE BOOT Server 配置過程
- 4. 總結(Summary)
1. 本文用到的術語解釋
-
PXE
-
PXE(Pre-boot ExecutionEnvironment)是由Intel設計的協議,它可以使電腦通過網路而不是從本地硬碟、光碟機等裝置啟動。現代的網卡,一般都內嵌支援PXE的ROM晶片。當電腦引導時,BIOS把PXE client調入記憶體執行,並顯示出命令菜單,經使用者選擇後,PXEclient將放置在遠端的作業系統通過網路下載到本地運行.
-
DHCP
-
DHCP(Dynamic Host Control Protocol) 動態主機控制協議.用於集中、動態給客戶機分配IP地址.
-
TFTP
-
TFTP(trivial file transfer protocol),一種開銷很小的檔案傳輸通訊協定,文法類似ftp.因簡單、高效,常用於網路裝置的OS和配置更新.
2. PXE 原理2.1. PXE Client Api (架構)
圖 PXE API架構圖。(圖片來源:PXE Specification Version 2.1)
說明: 當BIOS把PXE Client載入記憶體,此時便具有DHCP Client及TFTP Client的能力。
PXE Client具備DHCP Client能力,可以透過DHCP Server來取得IP位址。
PXE Client具備TFTP Client能力”,可通過TFTP來下載kernel image等檔案。
2.2. PXE啟動流程圖(pxe boot)
啟動流程說明如下:
- PXE Client 向 UDP 67連接埠 廣播 DHCPDDISCOVER 訊息.
- DHCP SERVER 或者 DHCP Proxy 收到廣播訊息後,發送DHCPOFFER(包含ip地址)訊息 到 PXE Client的 68 連接埠.
- PXE Client 發送 DHCPREQUEST 訊息到 DHCP SERVER ,擷取開機檔案(boot file name).
- DHCP SERVER 發送DHCPACK(包含Network Bootstrap Program file name)訊息 到PXE Client.
- PXE Client 向 Boot Server 擷取 NBP(Network Bootstrap Program) 檔案.
- PXE Client 從TFTP SERVER 下載 NBP,然後在用戶端執行NBP檔案
注意: 在NBP執行初始化後,NBP會按照自己預設的方式從TFTP SERVER中下載其他所需的設定檔.
這個時候 PXE 啟動流程已經完成了,剩下的工作都是有NBP來執行完成的.
例如: pxelinux.0(NBP) 他會下載 default 設定檔,來顯示菜單,根據需要啟動不同的kernel image.
如果是RIS(window安裝)的NBP,會啟動 Windows boot loader 來執行安裝部署widows任務.
3. PXE BOOT Server 配置過程
以下配置和測試 都是在 Centos5 上完成的,其他系統請酌情參考!
3.1. DHCP的安裝與配置
在PXE引導過程中,PXE Client通過DHCP Server 擷取ip地址,NBP檔案名稱,然後從TFTP SERVER 下載NBP檔案並在用戶端執行,從而啟動電腦。
- 請確認系統中安裝 dhcp 軟體包
- 編輯 /etc/dhcpd.conf 設定檔,設定檔內容如下
[root@linux]# cat /etc/dhcpd.conf
ddns-update-style interim;
allow booting;#定義能夠PXE啟動
allow bootp;#定義支援bootp
next-server 192.168.0.1; #TFTP Server的IP地址
filename "pxelinux.0";#bootstrap 檔案(NBP)
default-lease-time 1800;
max-lease-time 7200;
ping-check true;
option domain-name-servers 192.168.0.1;
subnet 192.168.0.0 netmask 255.255.255.0
{
range 192.168.0.128 192.168.0.220;
option routers 192.168.0.1;
option broadcast-address 192.168.0.255;
}
注意:在 /etc/dhcpd.conf 設定檔中 filename "pxelinux.0";
檔案目錄是相對於 tftp 的根目錄(預設是 /tftpboot),
所以檔案的絕對路徑就是: /tftpboot/pxelinux.0";當然也可以指定為其它的路徑.
- 配置完成後,重啟DHCP服務,並將它設為開機自啟動
[root@linux]# /etc/init.d/dhcpd start
啟動 dhcpd: [確定]
[root@linux]# chkconfig --level 35 dhcpd on
3.2. 安裝配置TFTP伺服器
在PXE引導過程中,PXE Client 使用TFTP協議從TFTP伺服器下載bootstrap檔案並執行.
- 請確認系統中安裝 tftp-server 軟體包
- 配置tftp服務,tftp 服務由xinetd服務管理
編輯 /etc/xinetd.d/tftp 檔案,將 disable = yes 改為:disable = no .設定檔內容如下: [root@linux]# cat /etc/xinetd.d/tftp
# default: off
# description: The tftp server serves files using the trivial file transfer /
# protocol. The tftp protocol is often used to boot diskless /
# workstations, download configuration files to network-aware printers, /
# and to start the installation process for some operating systems.
# default: off
# description: The tftp server serves files using the trivial file transfer /
#protocol. The tftp protocol is often used to boot diskless /
#workstations, download configuration files to network-aware printers, /
#and to start the installation process for some operating systems.
service tftp
{
socket_type= dgram
protocol= udp
wait= yes
user= root
server= /usr/sbin/in.tftpd
server_args= -s /tftpboot
disable= no
per_source= 11
cps= 100 2
flags= IPv4
}
注意:TFTP伺服器的根目錄是 /tftpboot,配置完成後重啟xinetd服務,使TFTP伺服器生效.
[root@linux]# /etc/init.d/xinetd restart
- bootstrap 檔案配置 (NBP),這裡使用 pxelinux.0bootstrap檔案由syslinux軟體包提供,我們只要安裝了syslinux,將 pxelinux.0 這個檔案複製到 /tftpboot 目錄即可:
[root@linux]# rpm -ql syslinux | grep "pxelinux.0"
/usr/lib/syslinux/pxelinux.0
[root@linux]# cp /usr/lib/syslinux/pxelinux.0 /tftpboot/
- 配置 pxelinux.0(NBP) 使用的設定檔
- 接下來建立/tftpboot/pxelinux.cfg/ 目錄,該目錄用於存放用戶端的設定檔
[root@linux]# mkdir /tftpboot/pxelinux.cfg
- 預設設定檔default,檔案內容如下
[root@linux]# cat /tftpboot/pxelinux.cfg/default
default linux# 預設啟動的是 'label linux' 中標記的啟動核心
prompt 1 # 顯示 'boot: ' 提示符
timeout 60 # 等待逾時時間,單位為 1/10 秒,逾時後自動啟動 預設指定的label
display boot.msg# 顯示boot.msg的內容,檔案路徑是相對tftp server 的根目錄(預設 /tftpboot),所以boot.msg檔案絕對路徑在 /tftpboot/boot.msg .
F1 boot.msg # 按下'F1' 鍵後顯示的檔案
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
label 1# 'label' 指定你在 'boot:' 提示符下輸入的關鍵字。
kernel linux/rh44-x86-32/vmlinuz
append initrd=linux/rh44-x86-32/initrd.img ramdisk_size=8192 ks=http://install.test.com/conf/ks_module.cfg ksdevice=link
label 2
kernel linux/rh44-x86-64/vmlinuz
append initrd=linux/rh44-x86-64/initrd.img ramdisk_size=8192 ks=http://install.test.com/conf/ks_module.cfg ksdevice=link
label 3
kernel linux/rh46-x86-64/vmlinuz
append initrd=linux/rh46-x86-64/initrd.img ramdisk_size=8192 ks=http://install.test.com/conf/ks_module.cfg ksdevice=link
label 4
kernel linux/rh46-x86-32/vmlinuz
append initrd=linux/rh46-x86-32/initrd.img ramdisk_size=8192 ks=http://install.test.com/conf/ks_module.cfg ksdevice=link
label 5
kernel image/linux/rh38-x86-32/vmlinuz
append initrd=image/linux/rh38-x86-32/initrd.img ramdisk_size=8192 ks=http://install.test.com/conf/ks_module.cfg ksdevice=link
label 6
kernel linux/rh38-x86-64/vmlinuz
append initrd=linux/rh38-x86-64/initrd.img ramdisk_size=8192 ks=http://install.test.com/conf/ks_module.cfg ksdevice=link
注意事項: 預設 pxelinux.0 和 pxelinux.cfg 一定要在同一個目錄下
3.3. pxelinx.0(NBP)程式設定檔搜尋順序
由於多個用戶端可以從一個PXE伺服器引導,PXE引導映像使用了一個複雜的設定檔搜尋方式來尋找針對客戶機的設定檔.
假設 用戶端伺服器的網卡的MAC地址為 88:99:AA:BB:CC:DD ,對應的IP地址為192.168.1.195,那麼用戶端的pxelinux.0 程式 搜尋順序如下:
- 首先以MAC地址為檔案名稱匹配的設定檔,如果不存在,繼續尋找.
- 其次以IP地址來尋找.根據IP地址16進位命名的設定檔尋找,從小範圍到打大分為尋找(子網路遮罩由小到大),如果不存在,繼續尋找.
- 最後嘗試default檔案
總體來說,pxelinux.0 搜尋的檔案的順序是(可以通過tcpdum得到結果):
/tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd
/tftpboot/pxelinux.cfg/C0A801C3
/tftpboot/pxelinux.cfg/C0A801C
/tftpboot/pxelinux.cfg/C0A801
/tftpboot/pxelinux.cfg/C0A80
/tftpboot/pxelinux.cfg/C0A8
/tftpboot/pxelinux.cfg/C0A
/tftpboot/pxelinux.cfg/C0
/tftpboot/pxelinux.cfg/C
/tftpboot/pxelinux.cfg/default
4. 總結(Summary)
5. pxe的ks.cfg檔案----備忘
# Kickstart file automatically generated by anaconda.
install
url --url http://192.168.1.100/CentOS4.5
lang en_US
langsupport --default=en_US.UTF-8 zh_CN.UTF-8 en_US.UTF-8
keyboard us
mouse
text
#xconfig --card "ATI ES1000" --videoram 16384 --hsync 28-64 --vsync 48-78 --resolution 800x600 --depth 16
network --device eth0 --bootproto static --ip 192.168.1.200 --netmask 255.255.255.0 --gateway=192.168.1.1 --hostname=test.insenz.com
rootpw --iscrypted $1$u//jMrgX$dW9ytxBLCyaafVKvwOcnF0
firewall --disabled
selinux --disabled
authconfig --enableshadow --enablemd5
timezone Asia/Shanghai
bootloader --location=mbr
zerombr yes
clearpart --linux --initlabel
part /boot --fstype ext3 --size=150 --ondisk=sda --asprimary
part swap --size=4096 --ondisk=sda
part / --size=20480 --fstype ext3 --ondisk=sda
part /home --fstype ext3 --size=1 --grow --ondisk=sda
part /data --fstype ext3 --size=1 --grow --ondisk=sdb
skipx
%packages --resolvedeps
@ editors
@ emacs
@ system-tools
@ x-software-development
@ dialup
@ chinese-support
@ development-tools
-ckermit
kernel-devel
kernel-smp-devel
-bluez-pin
-gamin-devel
-OpenIPMI-tools
vlock
iptraf
lslk
e2fsprogs
-xdelta
-zsh
sysstat
kernel-smp
grub
-iiimf-libs-devel
%post