首頁 > linux教程 > linux熱點 閱讀:0更新時間:2020-12-28 09:51:37

centos8+kickstart+uefi實現linux批量部署

概述

什么是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實現linux批量部署

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

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

什么是PXE+Kickstart+TFTP?
centos8+kickstart+uefi實現linux批量部署

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實現linux批量部署

獲取IP和相關文件
centos8+kickstart+uefi實現linux批量部署
開啟安裝進程
centos8+kickstart+uefi實現linux批量部署
安裝完成后自動重啟

centos8+kickstart+uefi實現linux批量部署

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/

如果需要自己額外指定密碼,請使用其它工具進行轉換,例如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,避免干擾。

有問題可以聯系我
樹明的技術交流群

白樹明技術圈4群:320990728

白樹明技術圈9群:643736601

beylze編程學院,一個分享編程知識和seo優化知識的網站。跟著beylze一起學習,每天都有進步。

通俗易懂,深入淺出,一篇文章只講一個知識點。

文章不深奧,不需要鉆研,在公交、在地鐵、在廁所都可以閱讀,隨時隨地漲姿勢。

文章不涉及代碼,不燒腦細胞,人人都可以學習。

當你決定關注beylze(公眾號:beylze),你已然超越了90%的其他從業者!

相關文章

優秀教程

国产亚洲欧美日韩