PXE實現系統自動化安裝

十五十六發表於2018-09-24

PXE簡介

預啟動執行環境(Preboot eXecution Environment,PXE,也被稱為預執行環境)提供了一種使用網路介面(Network Interface)啟動計算機的機制。這種機制讓計算機的啟動可以不依賴本地資料儲存裝置(如硬碟)或本地已安裝的作業系統。

原理圖

在這裡插入圖片描述
圖片是網路上找的,侵刪

流程

第一步:客戶端廣播,尋找DHCP伺服器,DHCP伺服器響應,並提供ip地址和bootstrap檔案(即pxelinux.0)位置
第二步:客戶端有了ip地址之後,向TFTP請求pxelinux.0檔案(這個檔案的位置是DHCP伺服器告訴客戶端的),TFTP響應請求並返回pxelinux.0給客戶端
第三步:客戶端執行pxelinux.0檔案
第四步:客戶端向TFTP請求pxelinux.cfg檔案,TFTP響應並返回pxelinux.cfg給客戶端
第五步:客戶端讀pxelinux.cfg這個檔案
第六步:客戶端向TFTP請求壓縮格式的核心檔案vmlinuz,TFTP響應並返回vmlinuz給客戶端
第七步:客戶端向TFTP請求initrd.img檔案(臨時根檔案系統),TFTP響應並返回initrd.img檔案
第八步:客戶端載入核心,掛載臨時根檔案系統,啟動系統安裝流程
第九步:客戶端請求Kickstart檔案(http,nfs,cdrom等方式都可以,具體看設定)
第十步:客戶端讀取Kickstart檔案自動安裝系統

環境

DHCP伺服器
ip:192.168.253.129
系統:CentOS6
TFTP伺服器
ip:192.168.253.129
系統:CentOS6
HTTPD伺服器
ip:192.168.253.129

DHCP

簡介

DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)是一個區域網的網路協議,使用UDP協議工作, 主要有兩個用途:給內部網路或網路服務供應商自動分配IP地址,給使用者或者內部網路管理員作為對所有計算機作中央管理的手段,DHCP有3個埠,其中UDP67和UDP68為正常的DHCP服務埠,分別作為DHCP Server和DHCP Client的服務埠;546號埠用於DHCPv6 Client,而不用於DHCPv4,是為DHCP failover服務,這是需要特別開啟的服務,DHCP failover是用來做“雙機熱備”的。

DHCP原理

在這裡插入圖片描述

  1. DHCP Client以廣播的方式發出DHCP Discover報文。
  2. 所有的DHCP Server都能夠接收到DHCP Client傳送的DHCP Discover報文,所有的DHCP Server都會給出響應,向DHCP Client傳送一個DHCP Offer報文。
    DHCP Offer報文中“Your(Client) IP Address”欄位就是DHCP Server能夠提供給DHCP Client使用的IP地址,且DHCP Server會將自己的IP地址放在“option”欄位中以便DHCP Client區分不同的DHCP Server。DHCP Server在發出此報文後會存在一個已分配IP地址的紀錄。
    DHCP Client只能處理其中的一個DHCP Offer報文,一般的原則是DHCP Client處理最先收到的DHCP Offer報文。
  3. DHCP Client會發出一個廣播的DHCP Request報文,在選項欄位中會加入選中的DHCP Server的IP地址和需要的IP地址。
  4. DHCP Server收到DHCP Request報文後,判斷選項欄位中的IP地址是否與自己的地址相同。如果不相同,DHCP Server不做任何處理只清除相應IP地址分配記錄;如果相同,DHCP Server就會向DHCP Client響應一個DHCP ACK報文,並在選項欄位中增加IP地址的使用租期資訊。
  5. DHCP Client接收到DHCP ACK報文後,檢查DHCP Server分配的IP地址是否能夠使用。如果可以使用,則DHCP Client成功獲得IP地址並根據IP地址使用租期自動啟動續延過程;如果DHCP Client發現分配的IP地址已經被使用,則DHCP Client向DHCPServer發出DHCP Decline報文,通知DHCP Server禁用這個IP地址,然後DHCP Client開始新的地址申請過程。
  6. DHCP Client在成功獲取IP地址後,隨時可以通過傳送DHCP Release報文釋放自己的IP地址,DHCP Server收到DHCP Release報文後,會回收相應的IP地址並重新分配

安裝

安裝dhcp程式包

 yum install -y dhcp 

複製DCHP模版檔案

/bin/cp /usr/share/doc/dhcp*/dhcpd.conf.sample /etc/dhcp/dhcpd.conf

修改模版檔案/etc/dhcp/dhcpd.conf

[root@localhost ~]# grep -vE "#|^$" /etc/dhcp/dhcpd.conf
option domain-name "ice.com";  
option domain-name-servers 192.168.253.2;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.253.0 netmask 255.255.255.0 {     #負責的網段
 range 192.168.253.200 192.168.253.205;   #分配的地址範圍
 option routers 192.168.253.2;                      #告知客戶端閘道器地址
}
next-server 192.168.253.129;  #tftp伺服器地址
filename="pxelinux.0";    #向tftp請求的檔案

接下來可以測試一下看是否配置成功了
啟動DHCP

/etc/init.d/dhcpd start

在這裡插入圖片描述
為了不影響實驗,先把vmware的dhcp關了
在這裡插入圖片描述
另外開一臺虛擬機器測試,從下圖可以看到DHCP工作的幾個步驟。
在這裡插入圖片描述

TFTP

簡介

簡單檔案傳輸協議也稱小型檔案傳輸協議(Trivial File Transfer Protocol, TFTP),是一種於1981年在RFC 783中定義的簡化的檔案傳輸協議(FTP)。
小型檔案傳輸協議非常簡單,通過少量儲存器就能輕鬆實現——這在當時是很重要的考慮因素。所以TFTP被用於引導計算機,例如沒有大容量儲存器的路由器。現在它仍然被用於在一個網路上主機之間傳輸小檔案,例如從一臺網路主機或伺服器引導一個遠端X Window System終端或其他的瘦客戶端。TFTP 用 UDP 埠號 69 進行檔案傳輸活動。

流程

  1. 初始化主機A送一個讀請求(RRQ)或寫請求(WRQ)包給主機B,包含了檔名和傳輸模式。
  2. B向A發一個ACK包應答,同時也通知了A其餘送往B包應該傳送的埠號。
  3. 源主機向目的主機送編過號的資料包,除了最後一個都應該包含一個全尺寸的資料塊。目的主機用編號的ACK包應答所有的資料包。
  4. 最終的資料包必須包含少於最大尺寸的資料塊以表明這是最後一個包。如果被傳輸檔案正好是尺寸塊的整數倍,源主機最後送的資料包就是0位元組的。

安裝

安裝tftp服務和syslinux(包含我們需要的pxelinux.0等檔案)

yum -y install syslinux tftp-server tftp

複製相關檔案到tftp共享目錄下(需要先掛載光碟)

CentOS6與CentOS7目錄結構有一些不一樣
這是CentOS6的情況

cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /media/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
cp /media/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/
mkdir /var/lib/tftpboot/pxelinux.cfg/
cp /media/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

修改配置檔案/var/lib/tftpboot/pxelinux.cfg/default

default vesamenu.c32
#prompt 1
timeout 600

display boot.msg

menu background splash.jpg
menu title Welcome to CentOS 6.9!
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 linux
  menu label ^Install or upgrade an existing system
  menu default
  kernel vmlinuz
  append initrd=initrd.img ip=192.168.253.200 netmask=255.255.255.0 gateway=192.168.253.2 ks=http://192.168.253.129/ks.cfg #這裡指定ks檔案位置

啟動tftp順便測試一下

chkconfig tftp on
service xinetd restart

在這裡插入圖片描述
說明tftp沒有問題

如果是CentOS7

cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /media/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/ 
cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/
mkdir /var/lib/tftpboot/pxelinux.cfg/

修改配置檔案/var/lib/tftpboot/pxelinux.cfg/default

default menu.c32
  prompt 5
  timeout 30
  MENU TITLE CentOS 7 PXE Menu

  LABEL linux
  MENU LABEL Install CentOS 7 x86_64
  KERNEL vmlinuz
  APPEND initrd=initrd.img   ip=192.168.253.200 netmask=255.255.255.0 gateway=192.168.253.2 ks=http://192.168.253.129/ks.cfg  #這裡的ks檔案根據具體情況自定義

httpd

這裡使用http方式傳送ks檔案所以需要個httpd服務

安裝

yum install httpd -y

編寫ks檔案/var/www/html/ks.cfg

[root@localhost ~]# cat /var/www/html/ks.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
# Use network installation
url --url="https://mirrors.aliyun.com/centos/6/os/x86_64/"
# Root password
rootpw --iscrypted $1$.EaLyDeQ$FujxZcce.b3ZpI1MI9JWR0
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use graphical install
graphical
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# Installation logging level
logging --level=info
# Reboot after installation
reboot
# System timezone
timezone  Asia/Shanghai
# Network information
network  --bootproto=static --device=eth0 --gateway=192.168.253.2 --ip=192.168.253.181 --nameserver=192.168.253.2 --netmask=255.255.255.0 --onboot=on
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel 
# Disk partitioning information
part /boot --fstype="ext4" --size=150
part swap --fstype="swap" --size=2048
part / --fstype="ext4" --grow --size=1

%packages
@base
@development

%end

啟動httpd服務

/etc/init.d/httpd  start

測試一下
在這裡插入圖片描述

接下來就簡單了,建立一臺虛擬機器,不需要匯入映象直接開機,然後就可以喝茶看報紙等安裝完成了

相關文章