歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

詳解Linux系統下PXE服務器的部署過程

在大規模安裝服務器時,需要批量自動化方法來安裝服務器,來減少日常的工作量.
但是批量自動化安裝服務器的基礎是網絡啟動服務器(bootserver).
下面我們就介紹一下 網絡啟動服務器的 安裝和配置方法,供大家實踐之用!
1. 本文用到的術語解釋
PXE
PXE(Pre-boot Execution Environment)是由Intel設計的協議,它可以使計算機通過網絡而不是從本地硬盤、光驅等設備啟動。現代的網卡,一般都內嵌支持PXE的ROM芯片。當計算機引導時,BIOS把PXE client調入內存執行,並顯示出命令菜單,經用戶選擇後,PXE client將放置在遠端的操作系統通過網絡下載到本地運行.
DHCP
DHCP(Dynamic Host Control Protocol) 動態主機控制協議.用於集中、動態的給客戶機分配IP地址.
TFTP
TFTP(trivial file transfer protocol),一種開銷很小的文件傳輸協議,語法類似ftp.因簡單、高效,常用於網絡設備的OS和配置更新.
2. PXE 原理
2.1. PXE Client Api (架構)
20151120111318615.gif (600×501)

圖 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)
20151120111347530.png (750×343)

上圖啟動流程說明如下:
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.0
bootstrap文件由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)
20151120111412229.png (642×159)

Copyright © Linux教程網 All Rights Reserved