2021-05-12 14:32:11
基於PXE網路啟動的Linux系統自動化安裝
在實際工作中,傳統純手動安裝作業系統的方式是有一定的局限性的,例如:現在大多數的伺服器都不自帶光碟機,若要安裝系統需要外接光碟機插入光碟,整個安裝過程中需要人工互動確認,手動設定每一個安裝設定項,人必須要在機器前值守,時間大多花費在安裝的等待過程中。假如有一大批伺服器需要安裝作業系統,這種傳統手動的方式去逐台安裝系統的方式,效率是極其低下的,而且由於需要人工互動式設定系統的安裝設定項,無法確保每一台機器的系統安裝設定都是完全一致的,即無法做到完全的統一標準化。(在大量重複的操作過程中,人工方式是極易出錯的)
為了解決上述問題,可以採用PXE網路的方式來實現系統自動化安裝,整個安裝過程中無需人工干預,極大的提供了工作效率。
一、PXE的基本概念
PXE(Pre-boot Execution Environment,預啟動執行環境)是由Inter公司開發的網路引導技術,工作在Client/Server模式,PXE網絡卡的ROM內建了對dhcp和tftp協定的支援,允許客戶機通過網路從遠端伺服器下載引導映象,並載入安裝檔案或者整個作業系統。
二、PXE伺服器的相關元件及基本原理
PXE伺服器需要的服務:
DHCP服務:為用戶端分配IP地址,定位啟動引導檔案
TFTP服務:提供網絡卡啟動載入程式、系統核心檔案及initrd映象檔案下載
FTP服務(或http/nfs):提供系統映象的yum安裝源及ks應答檔案下載
用戶端機應具備的條件:
網絡卡必須支援PXE協定(現在大多數的網絡卡都已支援)
主機板BIOS支援從網路啟動
1、通過PXE伺服器安裝系統原理示意圖:
通常情況下,為了節省資源我們也可以將上述原理圖中的提供DHCP服務、TFTP服務、FTP(或HTTP、NFS)服務的3台不同伺服器整合部署到同一台伺服器,作為PXE的伺服器端,視具體情況而定。
2、PXE網路安裝系統的優勢:
規模化:高效率,同時安裝多台伺服器,輕鬆應對大規模批次安裝
自動化:安裝過程中無需人工干預、實現自動化無人值守安裝
標準化:按照自設定的系統安裝規則設定硬碟分割區及系統元件包,實現系統安裝的統一標準化
遠端實現:不需要光碟機光碟、U盤等外部安裝媒介
三、PXE伺服器搭建步驟詳解
本文以CentOS7為例,對PXE伺服器的搭建過程總結如下:
1、準備作業系統映象YUM源,並通過HTTP服務對外發布
安裝httpd服務:
[root@centos7 ~]#yum -y install httpd
[root@centos7 ~]#systemctl start httpd.service #啟動httpd服務
[root@centos7 ~]#systemctl enable httpd.service #設定httpd服務開機啟動
建立系統映象ISO檔案存放目錄
[root@centos7 ~]#mkdir -p /data/myios #建立 /data/myios 作為系統映象檔案存放目錄
通過xftp等工具將系統映象ISO檔案上傳到 /data/myios 目錄
[root@centos7 myiso]#ll
total 14390272
-rw-r--r-- 1 root root 3991928832 Sep 7 13:51 CentOS-6.10-x86_64-bin-DVD1.iso
-rw-r--r-- 1 root root 10743709696 Sep 7 13:54 CentOS-7-x86_64-Everything-1810.iso
在httpd預設的documentroot目錄 /var/www/html 下建立各個系統映象源的子目錄
[root@centos7 ~]#mkdir -pv /var/www/html/centos/{6,7}/os/x86_64/
mkdir: created directory ‘/var/www/html/centos’
mkdir: created directory ‘/var/www/html/centos/6’
mkdir: created directory ‘/var/www/html/centos/6/os’
mkdir: created directory ‘/var/www/html/centos/6/os/x86_64/’
mkdir: created directory ‘/var/www/html/centos/7’
mkdir: created directory ‘/var/www/html/centos/7/os’
mkdir: created directory ‘/var/www/html/centos/7/os/x86_64/’
[root@centos7 ~]#
掛載系統ISO映象檔案到httpd對應的目錄下
vim編輯修改 /etc/fstab檔案
[root@centos7 ~]#vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat Sep 7 12:12:42 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=4d76f02b-0ebf-4238-89a6-e18709a1025d / xfs defaults 0 0
UUID=b2d24305-3936-4e25-8a40-18b53cd4d809 /boot xfs defaults 0 0
UUID=e5586dc6-a9e2-453b-90da-c009996214ad /data xfs defaults 0 0
UUID=3417eb37-c6ee-4c17-aea5-153413c631c6 swap swap defaults 0 0
/data/myiso/CentOS-6.10-x86_64-bin-DVD1.iso /var/www/html/centos/6/os/x86_64 iso9660 defaults 0 0
/data/myiso/CentOS-7-x86_64-Everything-1810.iso /var/www/html/centos/7/os/x86_64 iso9660 defaults 0 0
新增最後兩行,將/data/myiso 目錄中的2個iso映象檔案以iso映象檔案系統掛載到httpd的對應documentroot目錄下
[root@centos7 ~]#mount -a
mount: /dev/loop0 is write-protected, mounting read-only
mount: /dev/loop1 is write-protected, mounting read-only
[root@centos7 ~]#
df檢視一下,ISO映象已經掛載到httpd對應目錄下
說明:10.10.10.254為PXE伺服器的IP,需提前設定好,且設定為靜態IP。
設定本機IP與PXE伺服器同網段,通過URL存取 http://10.10.10.254/centos/ 可以到yum源已經發布成功。
2、準備系統自動安裝ks應答檔案(kickstart),並使用HTTP發布
kickstart檔案用途:
ks應答檔案的作用就是實現系統安裝過程中的無人值守,自動安裝的。系統安裝的時候就是依靠讀取KS檔案裡面預先定義的各項安裝設定,如硬碟分割區、系統語言、安裝哪些元件包等。
ks檔案的設定方式:
(1)從現有已經安裝好的系統中獲取anaconda-ks.cfg(此檔案是anaconda系統安裝嚮導在系統安裝完成後生成的),然後根據anaconda-ks.cfg裡面的設定項來修改設定為自己需要的ks檔案(需要注意的是centos6和centos7系統的ks設定不通用,需要使用對應的系統的anaconda檔案來修改設定)
ks檔案檔案的格式範例和設定項說明如下(適用centos7)
[root@centos7 ksdir]#cat ks7_desktop.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install #全新安裝
# Keyboard layouts
keyboard 'us' #鍵盤模式,美式US
# Root password
rootpw --iscrypted $1$7Q46UR0F$uZjZh2p9X.MlrV0dW8euj. #設定root賬號口令並採用加密
# Use network installation
url --url="http://10.10.10.254/centos7/os/x86_64" #系統映象yum源的URL地址
# System language
lang en_US #系統預設語言,en_US
# System authorization information
auth --useshadow --passalgo=sha512 #系統預設使用shadow檔案作為賬號登入驗證
# Use text mode install
text #安裝過程預設使用text文字的tui介面
firstboot --disable
# SELinux configuration
selinux --disabled #禁用selinux
# Firewall configuration
firewall --disabled #禁用系統防火牆
# Network information
network --bootproto=dhcp --device=eth0 #系統預設的網絡卡設定
# Reboot after installation
reboot #安裝完成後自動重新啟動系統
# System timezone
timezone Asia/Shanghai #設定系統預設時區 Asia/Shanghai
# System bootloader configuration
bootloader --append="net.ifnames=0" --location=mbr #安裝新的bootload程式,並新增核心啟動引數 net.ifnames=0
# Clear the Master Boot Record
zerombr #清除原有的MBR引導記錄
# Partition clearing information
clearpart --all --initlabel #清除原有的硬碟分割區標籤
# Disk partitioning information #硬碟分割區資訊,按實際需求設定
part /boot --fstype="xfs" --size=1024
part / --fstype="xfs" --size=51200
part swap --fstype="swap" --size=4096
part /data --fstype="xfs" --grow --size=1 # /data分割區使用所有剩餘硬碟空間
%packages #要安裝的包組,以%packages行開始,到%end結尾,包組以@符號開頭,單個包直接寫包名
@desktop-debugging
@fonts
@gnome-desktop
@input-methods
@legacy-x
@remote-desktop-clients
@x11
vinagre
%end #需要注意的是,centos6中,如果選擇最小化安裝,ks檔案最後需要寫上 %packages開始行%end結尾行的2行,否則系統會預設安裝所有的包組,centos7系統如果最小化安裝,則可以不用寫這2行
[root@centos7 ksdir]#
通過anaconda檔案為模板修改生成的ks檔案,可以使用命令 ksvalidator /PATH/KICKSTART_FILE 來檢查ks檔案語法是否正確。
(2)使用system-config-kickstart工具,通過圖形介面設定嚮導來設定生成(需要伺服器帶有圖形介面的包組,如果是最小化安裝的系統,需要安裝x11圖形包組)
[root@centos7 ~]#yum -y install system-config-kickstart #此工具包來自epel源
[root@centos7 ~]#yum -y groupinstall x11 #最小化安裝的系統需要安裝x11圖形包組才能支援system-config-kickstart工具調出圖形介面的ks檔案設定向導視窗
執行system-config-kickstart工具調出kickstart圖形設定向導視窗
[root@centos7 ~]#system-config-kickstart
system-config-kickstart工具的設定如下:
設定完成後,點選左上角save儲存
修改ks檔名稱,指定存放路徑,點選右下角save儲存
注意:如果是通過system-config-kickstart工具生成centos6系統最小化安裝的ks檔案,需要手動修改ks檔案,在最後新增%package開始行和%end結束行的2行,否則安裝嚮導會預設安裝所有包組,如下圖:
在http伺服器documentroot目錄下建立 ksdir目錄,作為ks檔案的專用存放路徑
[root@centos7 ksdir]#cd /var/www/html/
[root@centos7 html]#mkdir ksdir/
將通過上述任一方式設定好的ks檔案,上傳到http伺服器專用的ks檔案存放路徑下,對外發布,並確保所有ks檔案通過url可以正常存取
[root@centos7 ksdir]#ll
total 16
-rw-r--r-- 1 root root 2109 Sep 7 20:00 ks6_desktop.cfg #centos6帶gnome桌面安裝
-rw-r--r-- 1 root root 1757 Sep 7 22:13 ks6_mininal.cfg #centos6最小化安裝
-rw-r--r-- 1 root root 1809 Sep 7 20:02 ks7_desktop.cfg #centos7帶gnone桌面安裝
-rw-r--r-- 1 root root 1695 Sep 7 20:02 ks7_mininal.cfg #centos7最小化安裝
3、安裝設定TFTP服務,並部署網絡卡引導檔案、系統核心檔案及系統初始化映象檔案
設定並啟用TFTP服務,安裝tftp-server軟體包,監聽埠為UDP 69
TFTP根目錄:/var/lib/tftpboot/
[root@centos7 ~]#yum -y install tftp-server
[root@centos7 ~]#systemctl start tftp.socket
[root@centos7 ~]#systemctl enable tftp.socket
TFTP根目錄需要部署的檔案如下:
[root@centos7 tftpboot]#ll
total 84
drwxr-xr-x 2 root root 39 Sep 7 14:48 centos6
drwxr-xr-x 2 root root 39 Sep 7 14:48 centos7
-rw-r--r-- 1 root root 55140 Sep 7 14:46 menu.c32
-rw-r--r-- 1 root root 26759 Sep 7 14:46 pxelinux.0
drwxr-xr-x 2 root root 21 Sep 7 21:36 pxelinux.cfg
[root@centos7 tftpboot]#tree
.
├── centos6 #centos6系統核心檔案和intrd.img存放目錄
│ ├── initrd.img
│ └── vmlinuz
├── centos7 #centos7系統核心檔案和intrd.img存放目錄
│ ├── initrd.img
│ └── vmlinuz
├── menu.c32 #PXE啟動選單介面背景圖
├── pxelinux.0 #網絡卡啟動引導檔案
└── pxelinux.cfg #PXE啟動選單檔案存放目錄,目錄名必須為pxelinux.cfg
└── default #PXE啟動選單檔案,檔名必須為default
準備網絡卡啟動引導檔案pxelinux.0和PXE啟動選單介面背景圖片檔案menu.c32
yum安裝syslinux包
[root@centos7 ~]#yum -y install syslinux
複製pxelinux檔案到tftp的根目錄下
[root@centos7 ~]#cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
複製PXE啟動選單介面背景圖片檔案到tftp根目錄下
[root@centos7 ~]#cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/
在tftp根目錄建立系統核心檔案及initrd映象檔案的存放目錄,並從系統ISO映象yum源目錄複製對應的檔案到tftp中對應的目錄
在tftp根目錄建立centos6和centos7系統核心檔案及initrd映象檔案的存放目錄
[root@centos7 ~]#mkdir -pv /var/lib/tftpboot/centos{6,7}
mkdir: created directory ‘/var/lib/tftpboot/centos6’
mkdir: created directory ‘/var/lib/tftpboot/centos7’
分別從centos6和centos7映象yum源路徑複製系統核心檔案和initrd映象檔案到tftp根目錄中對應的目錄
[root@centos7 ~]#cp /var/www/html/centos/6/os/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos6/
[root@centos7 ~]#cp /var/www/html/centos/7/os/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos7/
準備安裝選單檔案並放到tftp指定目錄中
在tftp根目錄中建立安裝選單檔案存放目錄 pexlinux.cfg/
[root@centos7 ~]#mkdir /var/lib/tftpboot/pxelinux.cfg/
從系統ISO映象yum源路徑複製啟動選單檔案到對應目錄中,並改為為default
vim編輯修改pxe啟動選單default檔案,修改為如下內容:
[root@centos7 pxelinux.cfg]#vim default
default menu.c32 #使用menu.c32作為背景圖片
timeout 600 #預設等待時間60秒(600的十分之一)
menu title Auto Install CentOS #啟動選單的標題
label CentOS6_Mininal #label標籤說明
menu label Install CentOS 6.10 Mininal #安裝選項選單
kernel centos6/vmlinuz #系統核心檔案在tftp中的相對路徑
append initrd=centos6/initrd.img ks=http://10.10.10.254/ksdir/ks6_mininal.cfg #boot啟動引導的引數,指定系統initrd映象檔案在tftp中的相對路徑以及ks應答檔案的存取地址
label CentOS6_Desktop
menu label Install CentOS 6.10 Desktop
kernel centos6/vmlinuz
append initrd=centos6/initrd.img ks=http://10.10.10.254/ksdir/ks6_desktop.cfg
label CentOS7
menu label Install CentOS 7.6 Mininal
kernel centos7/vmlinuz
append initrd=centos7/initrd.img ks=http://10.10.10.254/ksdir/ks7_mininal.cfg
label CentOS7
menu label Install CentOS 7.6 Desktop
kernel centos7/vmlinuz
append initrd=centos7/initrd.img ks=http://10.10.10.254/ksdir/ks7_desktop.cfg
label Local
menu label Boot from Local drive #從本地硬碟啟動
menu default #預設啟動選項,游標預設選中此項,timeout時間後預設從此項啟動,建議預設設定為此項,防止60秒等待時間後未經過人工選擇,造成直接進入系統安裝
localboot 0xffff
4、安裝設定DHCP服務
安裝dhcp服務
[root@centos7 ~]#yum -y install dhcp
dhcp服務安裝完成後,預設無法啟動,需要對組態檔進行修改,否則啟動報錯。
預設的組態檔中無內容,根據提示從範例檔案複製組態檔進行修改
複製dhcp服務的範例組態檔覆蓋預設組態檔
[root@centos7 ~]#cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
vim編輯修改dhcp服務組態檔,並新增如下內容
[root@centos7 ~]#vim /etc/dhcp/dhcpd.conf
subnet 10.10.10.0 netmask 255.255.255.0 { #dhcp伺服器分配的網段需要與本機的固定IP地址位於同一網段 (本機IP為 10.10.10.254)
range 10.10.10.200 10.10.10.250; #指定自動分配的IP地址範圍
option routers 10.10.10.1; #指定閘道器地址
option domain-name-servers 114.114.114.114,8.8.8.8; #指定DNS伺服器地址
option domain-name "test.org"; #DNS搜尋域名
next-server 10.10.10.254; #指定TFTP伺服器IP(關鍵設定項)
filename "pxelinux.0"; #指定網絡卡pxe啟動引導檔名(關鍵設定項)
}
啟動dhcp服務,並設定開機啟動
[root@centos7 ~]#systemctl start dhcpd.service
[root@centos7 ~]#systemctl enable dhcpd.service
如啟動成功,dhcp服務將監聽udp 67埠,如發生報錯,則需檢查組態檔。
四、使用用戶端機器安裝系統測試PXE環境
設定用戶端機器BIOS預設從網絡卡啟動
如能順利進入到啟動選單選擇介面,則證明DHCP服務工作正常
根據選單專案,選擇安裝對應的系統,例如選擇centos7.6最小化安裝:
安裝選項及磁碟分割區介面
可以看到centos7.6最小化安裝需要裝310個包
centos6.10最小化安裝的過程介面:
至此,整個PXE伺服器的搭建過程完成。
注意事項:
1、預先設定關閉並禁用PXE伺服器selinux
2、預先關閉並禁用系統防火牆,如考慮安全,需要保持系統防火牆開啟,則需要將HTTP服務、TFTP服務、DHCP服務需要使用到的網路埠在防火牆中開啟,否則用戶端將無法通過網路存取相關服務
3、不可在已存在DHCP伺服器的網路內再設定新的DHCP伺服器,否則會造成一個網路內多個DHCP伺服器,造成IP地址獲取混亂導致網路故障。可以直接使用現有的DHCP伺服器,修改新增相應的組態檔即可。
4、如通過虛擬機器來使用PXE安裝centos7系統,則虛擬機器的記憶體分配需要大於1G以上,否則會出現下圖中錯誤:
鑑於水平有限,本文相關表述難免會存在紕漏之處,歡迎大家指出並糾正。
相關文章