Linux應該這麼學第19章使用 PXE+Kickstart 無人值守安裝服務

tjjingpan發表於2018-11-04

本章講解了如下內容:
➢ 無人值守安裝系統;
➢ 部署相關服務程式;
➢ 自動部署客戶端主機。
剛入職的運維新手經常會被要求去做一些安裝作業系統的工作。如果按照第 1 章講解的
用光碟映象來安裝作業系統,其效率會相當低下。本章將介紹可以實現無人值守安裝服務的
PXE+Kickstart 服務程式,並帶領大家動手安裝部署 PXE + TFTP + FTP + DHCP + Kickstart 等
服務程式,從而搭建出一套可批量安裝 Linux 系統的無人值守安裝系統。在學完本章內容之
後,運維新手就可以避免枯燥乏味的重複性工作,大大提供系統安裝的效率。

19.1 無人值守安裝系統
本書在第 1 章講解了使用光碟映象來安裝 Linux 系統的方法,坦白講,該方法適用於只
安裝少量 Linux 系統的情況。如果生產環境中有數百臺伺服器都需要安裝系統,這種方式就
不合時宜了。這時,我們就需要使用 PXE + TFTP +FTP + DHCP + Kickstart 服務搭建出一個
無人值守安裝系統。這種無人值守安裝系統可以自動地為數十臺伺服器安裝系統,這一方面
將運維人員從重複性的工作中解救出來,也大大提升了系統安裝的效率。
無人值守安裝系統的工作流程如圖 19-1 所示。

 PXE(Preboot eXecute Environment,預啟動執行環境)是由 Intel 公司開發的技術,
可以讓計算機通過網路來啟動作業系統(前提是計算機上安裝的網路卡支援 PXE 技術),主
要用於在無人值守安裝系統中引導客戶端主機安裝 Linux 作業系統。Kickstart 是一種無人
值守的安裝方式,其工作原理是預先把原本需要運維人員手工填寫的引數儲存成一個
ks.cfg 檔案,當安裝過程中需要填寫引數時則自動匹配 Kickstart 生成的檔案。所以只要
Kickstart 檔案包含了安裝過程中需要人工填寫的所有引數,那麼從理論上來講完全不需要

運維人員的干預,就可以自動完成安裝工作。TFTP、FTP 以及 DHCP 服務程式的配置與
部署已經在第 11 章和第 14 章進行了詳細講解,這裡不再贅述。
由於當前的客戶端主機並沒有完整的作業系統,也就不能完成 FTP 協議的驗證了,所以
需要使用 TFTP 協議幫助客戶端獲取引導及驅動檔案。vsftpd 服務程式用於將完整的系統安裝
映象通過網路傳輸給客戶端。當然,只要能將系統安裝映象成功傳輸給客戶端即可,因此也
可以使用 httpd 來替代 vsftpd 服務程式。

19.2 部署相關服務程式

19.2.1 配置 DHCP 服務程式

DHCP 服務程式用於為客戶端主機分配可用的 IP 地址,而且這是伺服器與客戶端主機進
行檔案傳輸的基礎,因此我們先行配置 DHCP 服務程式。首先按照表 19-1 為無人值守系統設
置 IP 地址,然後按照圖 19-2 和圖 19-3 在虛擬機器的虛擬網路編輯器中關閉自身的 DHCP 服務。

表19-1 無人值守系統與客戶端的設定

主機名稱 作業系統 IP地址
無人值守系統 RHEL7 192.168.10.1
客戶端主機 未安裝作業系統 -

當掛載好光碟映象並把 Yum 倉庫檔案配置妥當後,就可以安裝 DHCP 服務程式軟體包了。 

[root@localhost ~]# yum install dhcp

第 14 章已經詳細講解了 DHCP 服務程式的配置以及部署方法,相信各位讀者對相關的配
置引數還有一些印象。但是,我們在這裡使用的配置檔案與第 14 章中的配置檔案有兩個主要區
別:允許了 BOOTP 載入程式協議,旨在讓區域網內暫時沒有作業系統的主機也能獲取靜態 IP
地址;在配置檔案的最下面載入了引導驅動檔案 pxelinux.0(這個檔案會在下面的步驟中建立),
其目的是讓客戶端主機獲取到 IP 地址後主動獲取引導驅動檔案,自行進入下一步的安裝過程。

[root@localhost ~]# vi /etc/dhcp/dhcpd.conf 
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
allow booting;
allow bootp;
dns-update-style interim;
ignore client-updates;
subnet 192.168.10.0 netmask 255.255.255.0 {
        option subnet-mask 255.255.255.0;
        option domain-name-servers 192.168.10.1;
        range dynamic-bootp 192.168.10.100 192.168.10.200;
        default-lease-time 21600;
        max-lease-time 43200;
        next-server 192.168.10.1;
        filename "pxelinux.0";
}

在確認 DHCP 服務程式的引數都填寫正確後,重新啟動該服務程式,並將其新增到開機啟動
項中。這樣在裝置下一次重啟之後,在無須人工干預的情況下,自動為客戶端主機安裝系統。

[root@localhost ~]# systemctl restart dhcpd
[root@localhost ~]# systemctl enable dhcpd
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.

19.2.2 配置 TFTP 服務程式

我們曾經在第 11 章中學習過 vsftpd 服務與 TFTP 服務。vsftpd 是一款功能豐富的檔案傳
輸服務程式,允許使用者以匿名開放模式、本地使用者模式、虛擬使用者模式來進行訪問認證。但
是,當前的客戶端主機還沒有安裝作業系統,該如何進行登入認證呢?而 TFTP 作為一種基
於 UDP 協議的簡單檔案傳輸協議,不需要進行使用者認證即可獲取到所需的檔案資源。因此
接下來配置 TFTP 服務程式,為客戶端主機提供引導及驅動檔案。當客戶端主機有了基本的
驅動程式之後,再通過 vsftpd 服務程式將完整的光碟映象檔案傳輸過去。

[root@localhost ~]# yum install tftp-server

TFTP 是一種非常精簡的檔案傳輸服務程式,它的執行和關閉是由 xinetd 網路守護進
程服務來管理的。xinetd 服務程式會同時監聽系統的多個埠,然後根據使用者請求的埠
號調取相應的服務程式來響應使用者的請求。需要開啟 TFTP 服務程式,只需在 xinetd 服務
程式的配置檔案中把 disable 引數改成 no 就可以了。儲存配置檔案並退出,然後重啟 xinetd
服務程式,並將其加入到開機啟動項中(在 RHEL 7 系統中,已經預設啟用了 xinetd 服務
程式,因此在將其新增到開機啟動項中的時候沒有輸出資訊屬於正常情況)。

[root@localhost ~]# vi /etc/xinetd.d/tftp 
# default: off
# description: The tftp server serves files using the trivial file transfer \
#       protocol.  The tftp protocol is often used to boot diskless \
#       workstations, download configuration files to network-aware printers, \
#       and to start the installation process for some operating systems.
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}
[root@localhost ~]# systemctl restart xinetd
[root@localhost ~]# systemctl enable xinetd

TFTP 服務程式預設使用的是 UDP 協議,佔用的埠號為 69,所以在生產環境中還需要
在 firewalld 防火牆管理工具中寫入使其永久生效的允許策略,以便讓客戶端主機順利獲取到
引導檔案。

[root@localhost ~]# firewall-cmd --permanent --add-port=69/udp
success
[root@localhost ~]# firewall-cmd --reload
success

19.2.3 配置 SYSLinux 服務程式

SYSLinux 是一個用於提供引導載入的服務程式。與其說 SYSLinux 是一個服務程式,不
如說更需要裡面的引導檔案,在安裝好 SYSLinux 服務程式軟體包後,/usr/share/syslinux 目錄
中會出現很多引導檔案。

[root@localhost ~]# yum install syslinux

我們首先需要把 SYSLinux 提供的引導檔案複製到 TFTP 服務程式的預設目錄中,也就是前
文提到的檔案 pxelinux.0,這樣客戶端主機就能夠順利地獲取到引導檔案了。另外在 RHEL7 系統
光碟映象中也有一些我們需要調取的引導檔案。確認光碟映象已經被掛載到/media/cdrom 目錄後,
使用複製命令將光碟映象中自帶的一些引導檔案也複製到 TFTP 服務程式的預設目錄中。

[root@localhost ~]# cd /var/lib/tftpboot/
[root@localhost tftpboot]# cp /usr/share/syslinux/pxelinux.0 .
[root@localhost media]# file /dev/cdrom
/dev/cdrom: symbolic link to `sr0'
[root@localhost media]# file /dev/sr0 
/dev/sr0: block special
[root@localhost /]# cd /var/lib/tftpboot/
[root@localhost tftpboot]# ll
總用量 28
-rw-r--r--. 1 root root 26764 11月  4 13:23 pxelinux.0
[root@localhost tftpboot]# mount /dev/cdrom /media/
mount: /dev/sr0 防寫,將以只讀方式掛載        
[root@localhost tftpboot]# cp /media/images/pxeboot/{vmlinuz,initrd.img} .
[root@localhost tftpboot]# cp /media/isolinux/{vesamenu.c32,boot.msg} .

然後在 TFTP 服務程式的目錄中新建 pxelinux.cfg 目錄,雖然該目錄的名字帶有字尾,但
依然也是目錄,而非檔案!將系統光碟中的開機選項選單複製到該目錄中,並命名為 default。
這個 default 檔案就是開機時的選項選單,如圖 19-4 所示。

 

[root@localhost tftpboot]# mkdir pxelinux.cfg
[root@localhost tftpboot]# cp /media/isolinux/isolinux.cfg pxelinux.cfg/default

預設的開機選單中有兩個選項,要麼是安裝系統,要麼是對安裝介質進行檢驗。既然我
們已經確定採用無人值守的方式安裝系統,還需要為每臺主機手動選擇相應的選項,未免與
我們的主旨(無人值守安裝)相悖。現在我們編輯這個 default 檔案,把第 1 行的 default 引數
修改為 linux,這樣系統在開機時就會預設執行那個名稱為 linux 的選項了。對應的 linux 選項
大約在 64 行,我們將預設的光碟映象安裝方式修改成 FTP 檔案傳輸方式,並指定好光碟映象
的獲取網址以及 Kickstart 應答檔案的獲取路徑:

[root@linuxprobe tftpboot]# vim pxelinux.cfg/default
1 default linux
2 timeout 600
3
4 display boot.msg
5
6 # Clear the screen when exiting the menu, instead of leaving the menu displa yed.
7 # For vesamenu, this means the graphical background is still displayed witho ut
8 # the menu itself for as long as the screen remains in graphics mode.
9 menu clear
10 menu background splash.png
11 menu title Red Hat Enterprise Linux 7.0
12 menu vshift 8
13 menu rows 18
14 menu margin 8
15 #menu hidden
16 menu helpmsgrow 15
17 menu tabmsgrow 13
18
19 # Border Area
20 menu color border * #00000000 #00000000 none
21
22 # Selected item
23 menu color sel 0 #ffffffff #00000000 none
24
25 # Title bar
26 menu color title 0 #ff7ba3d0 #00000000 none
27
28 # Press [Tab] message
29 menu color tabmsg 0 #ff3a6496 #00000000 none
30
31 # Unselected menu item
32 menu color unsel 0 #84b8ffff #00000000 none
33
34 # Selected hotkey
35 menu color hotsel 0 #84b8ffff #00000000 none
36
37 # Unselected hotkey
38 menu color hotkey 0 #ffffffff #00000000 none
39
40 # Help text
《Linux 就該這麼學》 - 必讀的 Linux 系統與紅帽 RHCE 認證免費自學書籍
389
41 menu color help 0 #ffffffff #00000000 none
42
43 # A scrollbar of some type? Not sure.
44 menu color scrollbar 0 #ffffffff #ff355594 none
45
46 # Timeout msg
47 menu color timeout 0 #ffffffff #00000000 none
48 menu color timeout_msg 0 #ffffffff #00000000 none
49
50 # Command prompt text
51 menu color cmdmark 0 #84b8ffff #00000000 none
52 menu color cmdline 0 #ffffffff #00000000 none
53
54 # Do not display the actual menu unless the user presses a key. All that is
displayed is a timeout message.
55
56 menu tabmsg Press Tab for full configuration options on menu items.
57 
58 menu separator # insert an empty line
59 menu separator # insert an empty line
59 menu separator # insert an empty line
60 
61 label linux
62 menu label ^Install Red Hat Enterprise Linux 7.0
63 kernel vmlinuz
64 append initrd=initrd.img inst.stage2=ftp://192.168.10.1 ks=ftp://192.168.
10.1/pub/ks.cfg quiet
65
………………省略部分輸出資訊………………

19.2.4 配置 vsftpd 服務程式

在我們這套無人值守安裝系統的服務中,光碟映象是通過 FTP 協議傳輸的,因此勢必
要用到 vsftpd 服務程式。當然,也可以使用 httpd 服務程式來提供 Web 網站訪問的方式,
只要能確保將光碟映象順利傳輸給客戶端主機即可。如果打算使用 Web 網站服務來提供
光碟映象,一定記得將上面配置檔案中的光碟映象獲取網址和 Kickstart 應答檔案獲取網
址修改一下。

[root@localhost tftpboot]# yum install vsftpd

劉遄老師再囉嗦一句,在配置檔案修改正確之後,一定將相應的服務程式新增到開機啟
動項中,這樣無論是在生產環境中還是在紅帽認證考試中,都可以在裝置重啟之後依然能提
供相應的服務。希望各位讀者一定養成這個好習慣。

[root@localhost tftpboot]# systemctl restart vsftpd
[root@localhost tftpboot]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

在確認系統光碟映象已經正常掛載到/media/cdrom 目錄後,把目錄中的光碟映象檔案全
部複製到 vsftpd 服務程式的工作目錄中。

這個過程大約需要 3~5 分鐘。在此期間,我們也別閒著,在 firewalld 防火牆管理工具中
寫入使 FTP 協議永久生效的允許策略,然後在 SELinux 中放行 FTP 傳輸:

[root@localhost tftpboot]# firewall-cmd --permanent --add-service=ftp
success
[root@localhost tftpboot]# firewall-cmd --reload
success
[root@localhost tftpboot]# setsebool -P ftpd_connect_all_unreserved=on

19.2.5 建立 KickStart 應答檔案

畢竟,我們使用 PXE + Kickstart 部署的是一套“無人值守安裝系統服務”,而不是“無人值
守傳輸系統光碟映象服務”,因此還需要讓客戶端主機能夠一邊獲取光碟映象,還能夠一邊自動幫
我們填寫好安裝過程中出現的選項。簡單來說,如果生產環境中有 100 臺伺服器,它們需要安裝
相同的系統環境,那麼在安裝過程中單擊的按鈕和填寫的資訊也應該都是相同的。那麼,為什麼
不建立一個類似於備忘錄的需求清單呢?這樣,在無人值守安裝系統時,可以從這個需求清單中
找到相應的選項值,從而免去了手動輸入之苦,更重要的是,也徹底解放了人的干預,徹底實現
無人值守自動安裝系統,而不是單純地傳輸系統光碟映象。
有了上文做鋪墊,相信大家現在應該可以猜到 Kickstart 其實並不是一個服務程式,而是
《Linux 就該這麼學》 - 必讀的 Linux 系統與紅帽 RHCE 認證免費自學書籍
391
一個應答檔案了。是的!Kickstart 應答檔案中包含了系統安裝過程中需要使用的選項和引數
資訊,系統可以自動調取這個應答檔案的內容,從而徹底實現了無人值守安裝系統。那麼,既
然這個檔案如此重要,該去哪裡找呢?其實在 root 管理員的家目錄中有一個名為 anacondaks.cfg 的檔案,它就是應答檔案。下面將這個檔案複製到 vsftpd 服務程式的工作目錄中(在開
機選項選單的配置檔案中已經定義了該檔案的獲取路徑,也就是 vsftpd 服務程式資料目錄中
的 pub 子目錄中)。使用 chmod 命令設定該檔案的許可權,確保所有人都有可讀的許可權,以保證
客戶端主機可以順利獲取到應答檔案及裡面的內容:

[root@localhost tftpboot]# cp ~/anaconda-ks.cfg /var/ftp/pub/ks.cfg
[root@localhost tftpboot]# chmod +r /var/ftp/pub/ks.cfg 

Kickstart 應答檔案並沒有想象中的那麼複雜,它總共只有 46 行左右的引數和註釋內容,
大家完全可以通過引數的名稱及介紹來快速瞭解每個引數的作用。劉遄老師在這裡挑選幾個
比較有代表性的引數進行講解,其他引數建議大家自行修改測試。
首先把第 6 行的光碟映象安裝方式修改成 FTP 協議,仔細填寫好 FTP 伺服器的 IP 地址,並
用本地瀏覽器嘗試開啟下檢查有沒有報錯。然後把第 21 行的時區修改成上海(Asia/Shanghai),最
後再把 29 行的磁碟選項設定為清空所有磁碟內容並初始化磁碟:

[root@localhost ~]# vim /var/ftp/pub/ks.cfg
1 #version=RHEL7
2 # System authorization information
3 auth --enableshadow --passalgo=sha512
4
5 # Use CDROM installation media
6 url --url=ftp://192.168.10.1
7 # Run the Setup Agent on first boot
8 firstboot --enable
9 ignoredisk --only-use=sda
10 # Keyboard layouts
11 keyboard --vckeymap=us --xlayouts='us'
12 # System language
13 lang en_US.UTF-8
14
15 # Network information
16 network --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto
17 network --hostname=localhost.localdomain
18 # Root password
19 rootpw --iscrypted $6$pDjJf42g8C6pL069$iI.PX/yFaqpo0ENw2pa7MomkjLyoae2zjMz2
UZJ7b H3UO4oWtR1.Wk/hxZ3XIGmzGJPcs/MgpYssoi8hPCt8b/
20 # System timezone
21 timezone Asia/Shanghai --isUtc
22 user --name=linuxprobe --password=$6$a9v3InSTNbweIR7D$JegfYWbCdoOokj9sodEccdO.
zL F4oSH2AZ2ss2R05B6Lz2A0v2K.RjwsBALL2FeKQVgf640oa/tok6J.7GUtO/ --iscrypted --gecos =
"linuxprobe"
23 # X Window System configuration information
24 xconfig --startxonboot
25 # System bootloader configuration
26 bootloader --location=mbr --boot-drive=sda
27 autopart --type=lvm
28 # Partition clearing information
29 clearpart --all --initlabel
30
31 %packages
32 @base
33 @core
34 @desktop-debugging
35 @dial-up
36 @fonts
37 @gnome-desktop
38 @guest-agents
39 @guest-desktop-agents
40 @input-methods
41 @internet-browser
42 @multimedia
43 @print-client
44 @x11
45
46 %end

如果覺得系統預設自帶的應答檔案引數較少,不能滿足生產環境的需求,則可以通過 Yum
軟體倉庫來安裝 system-config-kickstart 軟體包。這是一款圖形化的 Kickstart 應答檔案生成工
具,可以根據自己的需求生成自定義的應答檔案,然後將生成的檔案放到/var/ftp/pub 目錄中
並將名字修改為 ks.cfg 即可。

19.3 自動部署客戶端主機

在按照上文講解的方法成功部署各個相關的服務程式後,就可以使用 PXE + Kickstart 無人值
守安裝系統了。在採用下面的步驟建立虛擬主機時,一定要把客戶端的網路卡模式設定成與服務端
一致的“僅主機模式”,否則兩臺裝置無法進行通訊,也就更別提自動安裝系統了。其餘硬體配置
選項並沒有強制性要求,大家可參考這裡的配置選項來設定。

第1步:開啟“新建虛擬機器嚮導”程式,選擇“典型(推薦) ”配置型別,然後單擊“下
一步”按鈕,如圖 19-5 所示。

 圖 19-5 選擇虛擬機器的配置型別

第2步:將虛擬機器作業系統的安裝來源設定為“稍後安裝作業系統”。這樣做的目的是讓
虛擬機器真正從網路中獲取系統安裝映象,同時也可避免 VMware Workstation 虛擬機器軟體按照
內設的方法自行安裝系統。單擊“下一步”按鈕,如圖 19-6 所示。

第3步:將“客戶機作業系統”設定為“Centos 7 64 位”,然後單擊“下
一步”按鈕,如圖 19-7 所示。 

圖 19-7 選擇客戶端主機的作業系統

第4步:對虛擬機器進行命名並設定安裝位置。大家可自行定義虛擬機器的名稱,而安裝位
置則儘量選擇磁碟空間較大的分割槽。然後單擊“下一步”按鈕,如圖 19-8 所示。

圖 19-8 命名虛擬機器並設定虛擬機器的安裝位置

第5步:指定磁碟容量。這裡將“最大磁碟大小”設定為 20GB,指的是虛擬機器系統能夠
使用的最大上限,而不是會被立即佔滿,因此設定得稍微大一些也沒有關係。然後單擊“下一
步”按鈕,如圖 19-9 所示。

第6步:結束“新建虛擬機器嚮導程式”後,先不要著急開啟虛擬機器系統。大家還需要單擊圖
19-10 中的“自定義硬體”按鈕,在彈出的如圖 19-11 所示的介面中,把“網路介面卡”裝置同樣
也設定為“僅主機模式”(這個步驟非常重要),然後單擊“確定”按鈕。

 

現在,我們就同時準備好了 PXE + Kickstart 無人值守安裝系統與虛擬主機。在生產環
境中,大家只需要將配置妥當的伺服器上架,接通伺服器和客戶端主機之間的網線,然後啟
動客戶端主機即可。接下來就會按照圖 19-12 和圖 19-13 那樣,開始傳輸光碟映象檔案並進
行自動安裝了—期間完全無須人工干預,直到安裝完畢時才需要運維人員進行簡單的初
始化工作。

 

由此可見,當生產環境工作中有數百臺伺服器需要批量安裝系統時,使用無人值守安裝
系統的便捷性是不言而喻的。

 

相關文章