2021-05-12 14:32:11
RHEL7/CentOS7 PXE+Kickstart自動化系統安裝
PXE(preboot execute environment,預啟動執行環境)是由Intel公司開發的最新技術,工作於Client/Server的網路模式,支援工作站通過網路從遠端伺服器下載映像,並由此支援通過網路啟動作業系統,在啟動過程中,終端要求伺服器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)協定下載一個啟動軟體包到本機記憶體中執行,由這個啟動軟體包完成終端基本軟體設定,從而引導預先安裝在伺服器中的終端作業系統。PXE可以引導多種作業系統,如:Windows95/98/2000/windows2003/windows2008/win7/win8,linux等。
1. 系統環境介紹
虛擬機器軟體:VirtualBox
虛擬機器網路連線方式:僅主機(Host-Only)網路
伺服器端作業系統:CentOS 7
設定服務:DHCP+TFTP+FTP(也可以使用HTTP、NFS等)
完成目標:搭建pxe環境,結合kickstart響應檔案,完成CentOS 7系統的自動化安裝。
1.1 伺服器及引導檔案介紹
-
主要檔案
系統安裝時,由引導檔案載入核心檔案後才可以看到系統安裝介面。
-
pxelinux.0 - 系統引導檔案
-
vmlinuz、initrd.img - 核心檔案
-
-
DHCP 伺服器
為用戶端提供必要的網路資訊,如IP、netmask、gateway、dns等,並向用戶端提供引導檔案(pxelinux.0)的位置及TFTP伺服器地址等。
-
TFTP 伺服器
主要為用戶端提供核心檔案和引導檔案。
-
FTP 伺服器
為用戶端提供kickstart響應檔案和系統映象檔案。
pxe系統安裝時,首先由dhcp伺服器向用戶端提供IP、引導檔案位置、tftp地址等資訊,用戶端獲取相關資訊後,通過TFTP下載引導檔案和核心檔案,引導系統啟動,並通過ftp伺服器下載系統安裝過程中所需的各項軟體包和kickstart響應檔案。
kickstart響應檔案主要用來自動設定時區、密碼、系統分割區、軟體包選擇等資訊。
1.2 伺服器端詳細環境
詳細系統環境為:
[root@pxe1 ~]# uname -a Linux pxe1 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux [root@pxe1 ~]# [root@pxe1 ~]# hostnamectl Static hostname: pxe1 Icon name: computer-vm Chassis: vm Machine ID: 18ef8dea83044565b82bf6bed368cdab Boot ID: 9beedf23c4e14016a0a458ddcd9c487b Virtualization: kvm Operating System: CentOS Linux 7 (Core) CPE OS Name: cpe:/o:centos:centos:7 Kernel: Linux 3.10.0-514.el7.x86_64 Architecture: x86-64 [root@pxe1 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.56.14 pxe1 [root@pxe1 yum.repos.d]# ifconfig enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.56.14 netmask 255.255.255.0 broadcast 192.168.56.255 inet6 fe80::a00:27ff:fe43:c11d prefixlen 64 scopeid 0x20<link> ether 08:00:27:43:c1:1d txqueuelen 1000 (Ethernet) RX packets 1441 bytes 121057 (118.2 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 928 bytes 98905 (96.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ...
1.3 伺服器端初始環境準備
關閉SELinux和防火牆:
# 為了後續設定方便,首先關閉系統SELinux和防火牆 # 關閉SELinux,修改檔案使SELINUX=disabled [root@pxe1 ~]# vim /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted #重新啟動系統後設定生效,檢視SELinux的狀態。 [root@pxe1 ~]# sestatus SELinux status: disabled #關閉防火牆 [root@pxe1 ~]# systemctl stop firewalld [root@pxe1 ~]# systemctl disable firewalld [root@pxe1 ~]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1)
1.4 用戶端環境準備
在VirtualBox中新建linux虛擬機器:
-
名稱:隨便填寫
-
型別:linux
-
版本:Red Hat(64-bit)
-
虛擬硬碟:
現在建立虛擬硬碟,注意分配足夠的硬碟大小,避免因硬碟空間不足造成安裝失敗。我這裡選擇20G,動態分配。
-
開機啟動順序:網路啟動排第一位。
設定方法:選中新建虛擬機器,設定--系統--主機板--啟動順序--設定網路為第一位
-
網路:僅主機(Host-Only)網路
設定方法:選中新建虛擬機器,設定--網路--網絡卡1--啟用網路連線--連線方式:Host-Only
2. 設定yum源
這裡主要介紹使用系統光碟設定本地yum源的方法。
首先掛載系統光碟:
在虛擬機器右下角單擊光碟圖示,選擇需要掛載的系統映象檔案。
建立yum源組態檔:
# 首先將光碟掛載到/mnt目錄下 [root@pxe1 ~]# umount /dev/cdrom -l [root@pxe1 ~]# mount /dev/cdrom /mnt/ mount: /dev/sr0 is write-protected, mounting read-only #建立yum組態檔 [root@pxe1 ~]# cd /etc/yum.repos.d/ [root@pxe1 yum.repos.d]# ls CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Sources.repo CentOS-fasttrack.repo CentOS-CR.repo CentOS-Media.repo CentOS-Vault.repo #避免系統中的repo檔案影響,首先將其備份 [root@pxe1 yum.repos.d]# mkdir bak [root@pxe1 yum.repos.d]# mv *.repo bak/ [root@pxe1 yum.repos.d]# ls bak [root@pxe1 yum.repos.d]# vim my.repo [development] <--注意:這裡一定要寫development name=my-centos7-dvd baseurl=file:///mnt enabled=1 gpgcheck=0
注意:my.repo檔案中第一行[development],中括號中建議填寫development
,填寫其他內容會導致後面system-config-kickstart命令生成kickstart檔案檔案時,出現以下問題:
由於下載軟體包資訊失敗,軟體包選擇被禁止
建立yum快取:
[root@pxe1 yum.repos.d]# yum clean all Failed to set locale, defaulting to C Loaded plugins: fastestmirror, langpacks Cleaning repos: development Cleaning up everything [root@pxe1 yum.repos.d]# yum makecache Failed to set locale, defaulting to C Loaded plugins: fastestmirror, langpacks development | 3.6 kB 00:00:00 (1/4): development/filelists_db | 3.0 MB 00:00:00 (2/4): development/group_gz | 155 kB 00:00:00 (3/4): development/other_db | 1.3 MB 00:00:00 (4/4): development/primary_db | 3.0 MB 00:00:00 Determining fastest mirrors Metadata Cache Created
3. DHCP伺服器設定
dhcp為用戶端提供必要的網路資訊,如IP、netmask、gateway、dns等,並向用戶端提供引導檔案(pxelinux.0)的位置及TFTP伺服器地址等。
3.1 安裝dhcp軟體包
[root@pxe1 yum.repos.d]# yum install -y dhcp ... Installed: dhcp.x86_64 12:4.2.5-47.el7.centos Complete!
3.2 修改dhcp組態檔
dhcp組態檔位置:/etc/dhcp/dhcpd.conf
[root@pxe1 yum.repos.d]# cat /etc/dhcp/dhcpd.conf # # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.example # see dhcpd.conf(5) man page subnet 192.168.56.0 netmask 255.255.255.0 { range 192.168.56.10 192.168.56.20; default-lease-time 600; max-lease-time 7200; filename "pxelinux.0"; next-server 192.168.56.14; } # subnet 192.168.56.0 netmask 255.255.255.0 伺服器端IP網段及掩碼 # range 192.168.56.10 192.168.56.20; dhcp分發的地址範圍,最好將本機IP包含在內。 # default-lease-time 600;max-lease-time 7200; IP地址租約時間。 # filename "pxelinux.0"; 指定引導檔案位置,這裡是TFTP根目錄下的pxelinux.0。 # next-server 192.168.56.14; TFTP伺服器地址。
3.3 啟動dhcp服務
[root@pxe1 yum.repos.d]# systemctl restart dhcpd [root@pxe1 yum.repos.d]# systemctl enable dhcpd Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service. [root@pxe1 yum.repos.d]# systemctl status dhcpd ● dhcpd.service - DHCPv4 Server Daemon Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2017-05-25 11:00:26 CST; 26s ago Docs: man:dhcpd(8) man:dhcpd.conf(5) Main PID: 11849 (dhcpd) Status: "Dispatching packets..." CGroup: /system.slice/dhcpd.service └─11849 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid May 25 11:00:26 pxe1 dhcpd[11849]: No subnet declaration for virbr0 (192.168.122.1). May 25 11:00:26 pxe1 dhcpd[11849]: ** Ignoring requests on virbr0. If this is not what May 25 11:00:26 pxe1 dhcpd[11849]: you want, please write a subnet declaration May 25 11:00:26 pxe1 dhcpd[11849]: in your dhcpd.conf file for the network segment May 25 11:00:26 pxe1 dhcpd[11849]: to which interface virbr0 is attached. ** May 25 11:00:26 pxe1 dhcpd[11849]: May 25 11:00:26 pxe1 dhcpd[11849]: Listening on LPF/enp0s3/08:00:27:43:c1:1d/192.168.56.0/24 May 25 11:00:26 pxe1 dhcpd[11849]: Sending on LPF/enp0s3/08:00:27:43:c1:1d/192.168.56.0/24 May 25 11:00:26 pxe1 dhcpd[11849]: Sending on Socket/fallback/fallback-net May 25 11:00:26 pxe1 systemd[1]: Started DHCPv4 Server Daemon. [root@pxe1 yum.repos.d]# netstat -nulp | grep dhcp udp 0 0 0.0.0.0:67 0.0.0.0:* 11849/dhcpd udp 0 0 0.0.0.0:16465 0.0.0.0:* 11849/dhcpd udp6 0 0 :::31651 :::* 11849/dhcpd
注意:如果啟動dhcp服務報錯,請檢視
/var/log/messages
紀錄檔,會有明顯的錯誤提示,多數是組態檔格式或內容錯誤造成的。
3.4 驗證DHCP服務設定
dhcp伺服器設定完成後,便可啟動之前準備的用戶端虛擬機器檢視是否可以獲取到IP地址,能正常獲取IP則說明設定正常,如下:
至此,dhcp伺服器設定完成。
4. TFTP伺服器設定
TFTP伺服器主要為用戶端提供核心檔案和引導檔案。
4.1 安裝TFTP伺服器
安裝方法:
[root@pxe1 /]# yum install -y tftp-server ... Installed: tftp-server.x86_64 0:5.2-13.el7 Complete! # 安裝tftp命令,可用來測試TFTP服務能否正常執行 [root@pxe1 /]# yum install -y tftp
4.2 啟動TFTP伺服器
# 編輯組態檔/etc/xinetd.d/tftp [root@pxe1 /]# vim /etc/xinetd.d/tftp disable = no <--將yes修改為no
啟動tftp服務:
# 首先確保tftp.socket正常 [root@pxe1 /]# systemctl start tftp.socket [root@pxe1 /]# systemctl enable tftp.socket Created symlink from /etc/systemd/system/sockets.target.wants/tftp.socket to /usr/lib/systemd/system/tftp.socket. [root@pxe1 /]# systemctl status tftp.socket ● tftp.socket - Tftp Server Activation Socket Loaded: loaded (/usr/lib/systemd/system/tftp.socket; enabled; vendor preset: disabled) Active: active (listening) since 四 2017-05-25 14:57:33 CST; 1h 0min ago Listen: [::]:69 (Datagram) 5月 25 14:57:33 pxe1 systemd[1]: Listening on Tftp Server Activation Socket. 5月 25 14:57:33 pxe1 systemd[1]: Starting Tftp Server Activation Socket. # 然後啟動tftp.service [root@pxe1 ~]# systemctl restart tftp.service [root@pxe1 ~]# systemctl enable tftp.service Created symlink from /etc/systemd/system/sockets.target.wants/tftp.socket to /usr/lib/systemd/system/tftp.socket. [root@pxe1 ~]# systemctl status tftp.service ● tftp.service - Tftp Server Loaded: loaded (/usr/lib/systemd/system/tftp.service; indirect; vendor preset: disabled) Active: active (running) since 四 2017-05-25 14:57:33 CST; 20s ago Docs: man:in.tftpd Main PID: 14621 (in.tftpd) CGroup: /system.slice/tftp.service └─14621 /usr/sbin/in.tftpd -s /var/lib/tftpboot 5月 25 14:57:33 pxe1 systemd[1]: Started Tftp Server. 5月 25 14:57:33 pxe1 systemd[1]: Starting Tftp Server...
4.3 匯入必要檔案
需要匯入TFTP伺服器的主要檔案有:
-
引導檔案 - pxelinux.0
-
核心檔案:vmlinuz initrd.img
-
引導選單:isolinux.cfg -- 開機後選擇啟動項的選單檔案
4.3.1 匯入引導檔案
引導檔案pxelinux.0由軟體包syslinux生成,首先要安裝syslinux軟體包:
[root@pxe1 ~]# yum install -y syslinux # 將pxelinux.0拷貝至TFTP根目錄下 [root@pxe1 ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
4.3.2 匯入核心及選單檔案
核心檔案:vmlinuz initrd.img,一般存在於系統光碟的pxeboot目錄下:
[root@pxe1 syslinux]# cd /mnt/images/pxeboot/ [root@pxe1 pxeboot]# ls initrd.img TRANS.TBL vmlinuz
但是我們可以發現,在isolinux目錄下也有相同的內容,同時,還包括引導選單(isolinux.cfg)及其啟動時用到的檔案:
isolinux.cfg - 引導選單組態檔
vesamenu.c32 - 系統自帶的兩種視窗模組之一
boot.msg - 視窗提示資訊檔案,提示資訊在選單出現前出現,顯示時間較短,可以新增些藝術字之類的資訊。
splash.png - 視窗背景圖片
因此,我們可以從系統光碟的images/pxeboot/目錄下複製核心檔案,也可以從isolinux下複製,為了方便起見,這裡從isolinux目錄下複製,可以只複製我們需要的檔案,如:
isolinux.cfg
vesamenu.c32
boot.msg
splash.png
也可以將isolinux目錄下的檔案全部複製到TFTP根目錄/var/lib/tftpboot
:
[root@pxe1 /]# cp -rf /mnt/isolinux/* /var/lib/tftpboot/
然後準備pxe引導選單:
[root@pxe1 /]# mkdir /var/lib/tftpboot/pxelinux.cfg [root@pxe1 /]# mv /var/lib/tftpboot/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default [root@pxe1 /]# cd /var/lib/tftpboot/pxelinux.cfg [root@pxe1 pxelinux.cfg]# ls default
修改引導選單選項:
[root@pxe1 pxelinux.cfg]# vim /var/lib/tftpboot/pxelinux.cfg/default # 首先修改選單等待時間 timeout 600 <--選單顯示等待時間,單位為1/10秒,預設等待60秒。 #修改選單等待時間為60,即等待6秒,若無操作則進入預設選單; timeout 600 # 然後修改顯示選單 # ----------------------------------------------------------------- # 找到檔案中的以下部分 label linux menu label ^Install CentOS Linux 7 kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=CentOSx207x20x86_64 quiet label check menu label Test this ^media & install CentOS Linux 7 menu default kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=CentOSx207x20x86_64 rd.live.check quiet # 將其修改為 label linux menu label ^Install CentOS Linux 7 by kickstart menu default kernel vmlinuz append initrd=initrd.img inst.repo=ftp://192.168.56.14/pub inst.ks=ftp://192.168.56.14/ks.cfg label linux 2 menu label ^Install CentOS Linux 7 by vnc kernel vmlinuz append initrd=initrd.img inst.repo=ftp://192.168.56.14/pub inst.vnc inst.vncpassword=password label linux 3 menu label ^Install CentOS Linux 7 by vnc -listen kernel vmlinuz append initrd=initrd.img inst.repo=ftp://192.168.56.14/pub inst.vnc inst.vncconnect=192.168.56.1 # 本文中其他內容無需進行修改,有興趣可自己嘗試修改其他選項進行測試。
4.4 驗證TFTP服務
4.4.1 驗證TFTP服務設定
下面來驗證TFTP服務設定是否正確:
[root@pxe1 kk]# ls /var/lib/tftpboot/ boot.cat grub.conf isolinux.bin pxelinux.0 splash.png vesamenu.c32 boot.msg initrd.img memtest pxelinux.cfg TRANS.TBL vmlinuz [root@pxe1 kk]# [root@pxe1 kk]# tftp 192.168.56.14 tftp> get boot.msg tftp> quit [root@pxe1 kk]# [root@pxe1 kk]# ls boot.msg # 成功get到boot.msg檔案,說明TFTP服務正常。
4.4.2 驗證選單及引導檔案設定
啟動之前準備的用戶端虛擬機器檢視是否可以正常顯示引導選單,是否可以正常獲取initrd.img和vmlinuz核心檔案。
若設定正常,會看到之前設定的引導選單出現:
在對應的引導選單上按TAB
鍵會顯示出該選單項的具體設定:
按Enter
鍵後,會出現獲取核心檔案的介面:
最後系統提示獲取ks檔案失敗,原因是尚未進行ftp伺服器的設定:
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2017-07/145399p2.htm
相關文章