CentOS8 kickstart UEFI

批量部署

概述

什麼是PXE
預啓動執行環境(PXE)是由Intel公司開發的最新技術,工作於Client/Server的網絡模式,支持工作站通過網絡從遠端服務器下載映像,並由此支持通過網絡啓動操作系統,在啓動過程中,終端要求服務器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)協議下載一個啓動軟件包到本機內存中執行,由這個啓動軟件包完成終端(客戶端)基本軟件設置,從而引導預先安裝在服務器中的終端操作系統。PXE可以引導多種操作系統,如:Windows95/98/2000/windows2003/windows2008/winXP/win7/win8,linux系列系統等。

PXE原理
PXE是在沒有軟驅、硬盤、CD-ROM的情況下引導計算機的一種方式,也就是BIOS將使用PXE協議從網絡引導。整個安裝的過程是這樣的:PXE網卡啓動 => DHCP獲得IP地址 => 從TFTP上下載 pxelinux.0、vmlinuz、initr.img 等 => 引導系統進入安裝步驟 => 通過PEX linux 下載ks.cfg文件並跟據ks.cfg自動化安裝系統 => 完成。

CentOS8 kickstart UEFI

TFTP服務
TFTP是用來下載遠程文件的最簡單網絡協議,它其於UDP協議而實現。

什麼是kickstart
KickStart是一種無人職守安裝方式。KickStart的工作原理是通過記錄典型的安裝過程中所需人工干預填寫的各種參數,並生成一個名爲ks.cfg的文件;在其後的安裝過程中(不只侷限於生成KickStart安裝文件的機器)當出現要求填寫參數的情況時,安裝程序會首先去查找KickStart生成的文件,當找到合適的參數時,就採用找到的參數,當沒有找到合適的參數時,才需要安裝者手工干預。這樣,如果KickStart文件涵蓋了安裝過程中出現的所有需要填寫的參數時,安裝者完全可以只告訴安裝程序從何處取ks.cfg文件,然後去忙自己的事情。等安裝完畢,安裝程序會根據ks.cfg中設置的重啓選項來重啓系統,並結束安裝。

什麼是PXE+Kickstart+TFTP?

CentOS8 kickstart UEFI

1.PXE Client向DHCP發送請求:
  PXE Client從自己的PXE網卡啓動,通過PXE BootROM(自啓動芯片)會以UDP(簡單用戶數據報協議)發送一個廣播請求,向本網絡中的DHCP服務器索取IP。

2.DHCP服務器提供信息:
  DHCP服務器收到客戶端的請求,驗證是否來至合法的PXE Client的請求,驗證通過它將給客戶端一個“提供”響應,這個“提供”響應中包含了爲客戶端分配的IP地址、pxelinux啓動程序(TFTP)位置,以及配置文件所在位置。

3.PXE客戶端請求下載啓動文件:
  客戶端收到服務器的“迴應”後,會迴應一個幀,以請求傳送啓動所需文件。這些啓動文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。

4.Boot Server響應客戶端請求並傳送文件:
  當服務器收到客戶端的請求後,他們之間之後將有更多的信息在客戶端與服務器之間作應答, 用以決定啓動參數。BootROM由TFTP通訊協議從Boot Server下載啓動安裝程序所必須的文件(pxelinux.0、pxelinux.cfg/default)。default文件下載完成後,會根據該文件中定義的引導順序,啓動Linux安裝程序的引導內核。

5.請求下載自動應答文件:
  客戶端通過pxelinux.cfg/default文件成功的引導Linux安裝內核後,安裝程序首先必須確定你通過什麼安裝介質來安裝linux,如果是通過網絡安裝(NFS, FTP, HTTP),則會在這個時候初始化網絡,並定位安裝源位置。接着會讀取default文件中指定的自動應答文件ks.cfg所在位置,根據該位置請求下載該文件。
  這裏有個問題,在第2步和第5步初始化2次網絡了,這是由於PXE獲取的是安裝用的內核以及安裝程序等,而安裝程序要獲取的是安裝系統所需的二進制包以及配置文件。因此PXE模塊和安裝程序是相對獨立的,PXE的網絡配置並不能傳遞給安裝程序,從而進行兩次獲取IP地址過程,但IP地址在DHCP的租期內是一樣的。

6.客戶端安裝操作系統:
  將ks.cfg文件下載回來後,通過該文件找到OS Server,並按照該文件的配置請求下載安裝過程需要的軟件包。
  OS Server和客戶端建立連接後,將開始傳輸軟件包,客戶端將開始安裝操作系統。安裝完成後,將提示重新引導計算機。

kickstart實戰

環境:

selinux關閉,防火牆關閉

Server:192.168.2.100

Step 1 配置dnf源

[root@localhost ~]# cat server.repo 
[serverApp]
name=app
enabled=1
gpgcheck=0
baseurl=file:///mnt/AppStream
[serverOS]
name=os
enabled=1
gpgcheck=0
baseurl=file:///mnt/BaseOS

Step 2 安裝軟件包

[root@localhost ~]# dnf install dhcp-server tftp-server httpd syslinux -y

Step 3 搭建並啓動DHCP

[root@localhost ~]# vim /etc/dhcp/dhcpd.conf 
subnet 192.168.2.0 netmask 255.255.255.0 {
        option routers          192.168.2.100;
        range                   192.168.2.10    192.168.2.20;
        next-server             192.168.2.100;
        filename                "pxelinux.0";
}

[root@localhost ~]# systemctl start dhcpd
[root@localhost ~]# systemctl status dhcpd
[root@localhost ~]# netstat -antlup | grep :67
udp        0      0 0.0.0.0:67              0.0.0.0:*                           31465/dhcpd         
udp        0      0 0.0.0.0:67              0.0.0.0:*                           1345/dnsmasq        

Step 4 生成需要的文件並啓動tftp服務

[root@localhost ~]# cp /usr/share/syslinux/pxelinux.0       /var/lib/tftpboot/
[root@localhost ~]# cp /mnt/isolinux/{vmlinuz,ldlinux.c32,initrd.img}       /var/lib/tftpboot/
[root@localhost ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@localhost ~]# vim /var/lib/tftpboot/pxelinux.cfg/default          #生成default文件
default linux
timeout 3
label linux
  kernel vmlinuz
  append initrd=initrd.img ip=dhcp method=http://192.168.2.100/RHEL ks=http://192.168.2.100/ks.cfg
[root@localhost mnt]# systemctl start tftp          #啓動tftp服務
[root@localhost mnt]# systemctl status tftp
[root@localhost mnt]# netstat -antulp | grep :69
udp6       0      0 :::69                   :::*                                1/systemd           

Step5 搭建並啓動http服務

[root@localhost ~]# mkdir /var/www/html/RHEL        #建立軟件包存放目錄
[root@localhost ~]# mount /dev/cdrom /var/www/html/RHEL     #將光盤掛載到對應目錄中

Step6 生成ks.cfg文件

由於CentOS8.0中沒有system-config-kickstart包,所以無法通過工具生成ks文件,需要手動生成,例子中root用戶和新建的hello用戶的密碼都爲‘`123qwe’

如果需要自己額外指定密碼,請使用其它工具進行轉換,例如doveadm命令

cp /root/anaconda-ks.cfg /var/www/html/ks.cfg   #生成ks.cfg文件
[root@localhost ~]# vim /var/www/html/ks.cfg
#version=RHEL8
ignoredisk --only-use=sda
autopart --type=lvm
# Partition clearing information
clearpart --all         #刪除所有分區
# Use graphical install
graphical
url     --url="http://192.168.2.100/RHEL/"          #指定安裝URL
# Keyboard layouts
keyboard --vckeymap=cn --xlayouts='cn'
# System language
lang zh_CN.UTF-8
# Network information
network  --bootproto=dhcp --device=ens33 --ipv6=auto --activate
network  --hostname=localhost.localdomain
# Root password “`123qwe”           #root用戶的密碼"`123qwe"
rootpw --iscrypted $6$lYV8xqOfEWbJZ/8Y$YXDve/YNwljyh6BnrMHkKm.18kyUqZkHBpA4DHA/nEhXckJfNPLpclgNcQUS64XQSDZRAdlWzjPsI8sCe1dPo0
# X Window System configuration information
xconfig  --startxonboot
# Run the Setup Agent on first boot
#firstboot disable      #初次啓動設置
firstboot --disable
# System services
services --enabled="chronyd"
# System timezone
timezone America/New_York --isUtc
#Reboot after installation  #安裝完成後自動重啓
reboot
# License agreement     #同意授權協議
eula --agreed
#Add a new user named hello password “`123qwe” group whell          #普通用戶名字爲hello密碼"`123qwe"
user --groups=wheel --name=hello --password=$6$GnUoYHa8rYy7XfrK$0OSNtZwn7.mq4mTeEXQvebx8AEKMV7/PYBS0qfLXUUMJFQozCVMGZY3c0gYcfaKhkCDVQAcxCpi01A5f6a9XC. --iscrypted --gecos="hello"
%packages
@^graphical-server-environment
%end

%addon com_redhat_kdump --disable --reserve-mb='auto'

%end

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end

Step7 修改文件權限,啓動http服務

[root@localhost ~]# chmod a+r /var/www/html/ks.cfg
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl status httpd
[root@localhost ~]# netstat -antlp | grep :80
tcp6       0      0 :::80                   :::*                    LISTEN      33976/httpd         

Step8 測試

選擇網絡啓動

CentOS8 kickstart UEFI

獲取IP和相關文件

CentOS8 kickstart UEFI
開啓安裝進程

CentOS8 kickstart UEFI
安裝完成後自動重啓

CentOS8 kickstart UEFI

kickstart+uefi

環境:

selinux關閉,防火牆關閉

Server:192.168.2.100

Step 1 配置dnf源

[root@localhost ~]# cat server.repo 
[serverApp]
name=app
enabled=1
gpgcheck=0
baseurl=file:///mnt/AppStream
[serverOS]
name=os
enabled=1
gpgcheck=0
baseurl=file:///mnt/BaseOS

Step 2 安裝軟件包

[root@localhost ~]# dnf install dhcp-server tftp-server httpd -y

Step 3 搭建並啓動DHCP

[root@localhost ~]# vim /etc/dhcp/dhcpd.conf 
subnet 192.168.2.0 netmask 255.255.255.0 {
        option routers          192.168.2.100;
        range                   192.168.2.10    192.168.2.20;
        next-server             192.168.2.100;
        filename                "BOOTX64.EFI";#注意差異,使用的不是pxelinux.0
}

[root@localhost ~]# systemctl start dhcpd
[root@localhost ~]# systemctl status dhcpd
[root@localhost ~]# netstat -antlup | grep :67
udp        0      0 0.0.0.0:67              0.0.0.0:*                           31465/dhcpd         
udp        0      0 0.0.0.0:67              0.0.0.0:*                           1345/dnsmasq        

Step 4 生成需要的文件並啓動tftp服務

[root@localhost ~]# cd /mnt/EFI/BOOT/
[root@localhost BOOT]# cp BOOTX64.EFI grub.cfg grubx64.efi /var/lib/tftpboot/

[root@localhost ~]# cp /mnt/isolinux/{vmlinuz,initrd.img}       /var/lib/tftpboot/

[root@localhost ~]# vim /var/lib/tftpboot/grub.cfg
set default="0"
set timeout=3
menuentry 'Install CentOS Linux 8.0.1905'  {
        linuxefi /vmlinuz ip=dhcp ks=http://192.168.2.100/ks.cfg
        initrdefi /initrd.img
}
[root@localhost mnt]# systemctl start tftp          #啓動tftp服務
[root@localhost mnt]# systemctl status tftp
[root@localhost mnt]# netstat -antulp | grep :69
udp6       0      0 :::69                   :::*                                1/systemd           

Step5 搭建並啓動http服務

[root@localhost ~]# mkdir /var/www/html/RHEL        #建立軟件包存放目錄
[root@localhost ~]# mount /dev/cdrom /var/www/html/RHEL     #將光盤掛載到對應目錄中

Step6 生成ks.cfg文件

由於CentOS8.0中沒有system-config-kickstart包,所以無法通過工具生成ks文件,需要手動生成,例子中root用戶和新建的hello用戶的密碼都爲‘`123qwe’

也可訪問https://access.redhat.com/labs/kickstartconfig/ 來幫助我們生成ks文件(你可能需要註冊,軟件包選擇有些煩)

如果需要自己額外指定密碼,請使用其它工具進行轉換,例如doveadm命令,但是系統沒有這個工具,所以推薦使用python來實現

[root@localhost ~]# python3 -c 'import crypt,getpass;pw="gongjunhe";print(crypt.crypt(pw))'
cp /root/anaconda-ks.cfg /var/www/html/ks.cfg   #生成ks.cfg文件
[root@localhost ~]# vim /var/www/html/ks.cfg
#version=RHEL8
ignoredisk --only-use=nvme0n1    ###注意這是與BIOS方式差異的位置,注意設備類型,可在BIOS中查看到
autopart --type=lvm  #使用lvm
# Partition clearing information
clearpart --all         #刪除所有分區
# Use graphical install
graphical   #使用圖形界面安裝
url     --url="http://192.168.2.100/RHEL/"          #指定安裝URL
# Keyboard layouts
keyboard --vckeymap=cn --xlayouts='cn'  #指定鍵盤佈局
# System language
lang zh_CN.UTF-8    #定義語言環境
# Network information
network  --bootproto=dhcp --device=ens33 --ipv6=auto --activate  #ip獲取方式
network  --hostname=localhost.localdomain #定義主機名稱
# Root password “`123qwe”           #root用戶的密碼"`123qwe"
rootpw --iscrypted $6$lYV8xqOfEWbJZ/8Y$YXDve/YNwljyh6BnrMHkKm.18kyUqZkHBpA4DHA/nEhXckJfNPLpclgNcQUS64XQSDZRAdlWzjPsI8sCe1dPo0
# X Window System configuration information
xconfig  --startxonboot #圖形窗口配置
# Run the Setup Agent on first boot
#firstboot disable      #初次啓動設置
firstboot --disable
# System services
services --enabled="chronyd" #設置systemd運行的默認服務器幾何
# System timezone
timezone America/New_York --isUtc #時區
#Reboot after installation  #安裝完成後自動重啓
reboot
# License agreement     #同意授權協議
eula --agreed
#Add a new user named hello password “`123qwe” group whell          #普通用戶名字爲hello密碼"`123qwe"
user --groups=wheel --name=hello --password=$6$GnUoYHa8rYy7XfrK$0OSNtZwn7.mq4mTeEXQvebx8AEKMV7/PYBS0qfLXUUMJFQozCVMGZY3c0gYcfaKhkCDVQAcxCpi01A5f6a9XC. --iscrypted --gecos="hello"
%packages #定義安裝的軟件包
@^graphical-server-environment
%end

%addon com_redhat_kdump --disable --reserve-mb='auto' #額外設置,這裏是關閉kdump功能

%end

%anaconda # 額外的規則設置,這裏主要針對的是用戶的密碼規則的定義
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end

Step7 修改文件權限,啓動http服務

[root@localhost ~]# chmod a+r /var/www/html/ks.cfg#如果是拷貝的anaconda-ks.cfg文件,注意修改權限
#否則安裝過程中會出現faild .... ks.cfg的報錯提示,因爲anaconda-ks.cfg的文件權限是600,除了root別人無法讀取
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl status httpd
[root@localhost ~]# netstat -antlp | grep :80
tcp6       0      0 :::80                   :::*                    LISTEN      33976/httpd         

Step8 測試

新建虛擬機測試,根據軟件版本不同,建議在新建虛擬機時選擇自定義,在自定義中的過程中選擇虛擬機固件時,選擇UEFI類型的,同時主機調整服務端和客戶端的網路連接設置,我這裏面,ks服務器和測試機的網絡連接選擇的是vmnet4,避免干擾。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章