基於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以上,否則會出現下圖中錯誤:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM