Vmware部署Linux無人值守安裝Centos7系統

Linux – 無人值守安裝服務

# 需求分析
- 使用光碟鏡像來安裝 Linux 系統的方式; 坦白講, 該方法適用於只安裝少量 Linux 系統的情況, 如果生產環境中有數百台伺服器都需安裝系統, 這種方式就不太適合;

# 解決方案
- 使用 無人值守安裝系統 完成數百台伺服器的系統安裝;
- 無人值守安裝(Unattended Setup)指軟體安裝時無需任何用戶干預, 直接按默認或通過應答文件設置安裝, 這對於無特殊需求的用戶或企業大批量部署安裝作業系統及軟體時非常方便;

# 簡介
- 本節將介紹可以實現無人值守安裝服務的 PXE+Kickstart 服務程式, 並手動安裝部署 PXE + TFTP + FTP + DHCP + Kickstart 等服務程式, 從而搭建出一套可批量安裝 Linux 系統的無人值守安裝系統;

# 部署步驟
- 安裝 DHCP、TFTP、SYSLinux、vsftpd、xinetd、KickStart 服務程式
- 掛載 ISO 文件
- 配置 DHCP、TFTP、SYSLinux、vsftpd、xinetd、KickStart 
- 測試&上線

# 部署軟體
- PXE (Preboot eXecute Environment, 預啟動執行環境)
- TFTP (Trivial File Transfer Protocol, 簡單文件傳輸協議)
- DHCP (Dynamic Host Configuration Protocol, 動態主機配置協議)
- FTP (FileTransferProtocol, 文件傳輸協議)
- Kickstart (RedHat紅帽公司提供的應答文件)

簡介

PXE(Preboot eXecute Environment,預啟動執行環境)是由 Intel 公司開發的技術, 可以讓電腦通過網路來啟動作業系統(前提是電腦上安裝的網卡支援 PXE 技術), 主要用於在無人機值守安裝系統中引導客戶端主機安裝 Linux 作業系統;

Kickstart 是一種無人值守的安裝方式, 其工作原理是預先把原本需要運維人員手工填寫的參數保存成一個ks.cfg 文件, 當安裝過程中需要填寫參數時則自動匹配 Kickstart 生成的文件;

TFTP(Trivial File Transfer Protocol,簡單文件傳輸協議)是一種基於UDP協議在客戶端和伺服器之間進行簡單文件傳輸的協議;TFTP提供不複雜、開銷不大的文件傳輸服務,可將其當作FTP協議的簡化版本;

DHCP(Dynamic Host Configuration Protocol,動態主機配置協議) 是一種基於UDP協議且僅限於在區域網內部使用的網路協議;該協議用於自動管理區域網內主機的IP地址、子網掩碼、網關地址及DNS地址等參數,可以有效地提升IP地址的利用率,提高配置效率,並降低管理與維護成本;

FTP(FileTransferProtocol, 文件傳輸協議)是一種在互聯網中進行文件傳輸的協議,基於客戶端/伺服器模式,默認使用20、21號埠,其中埠20用於進行數據傳輸,埠21用於接受客戶端發出的相關FTP命令與參數;

xinetd(eXtended InterNET services daemon,擴展的InterNET服務守護程式)常用來管理多種輕量級 Internet 服務;xinetd 提供類似於 inetd+tcp_wrapper 的功能;

# 配置文件 簡介
- /var/lib/ftfpboot/vmlinuz: 可引導的壓縮的內核;
- /var/lib/ftfpboot/initrd.img: 啟動記憶體文件;
- /var/lib/ftfpboot/pxelinux.0: PXE引導程式;
- /var/lib/ftfpboot/pxelinux.cfg/default: 客戶機啟動安裝時選擇項;

安裝&卸載

# 方式一: 
# 一條命令安裝所需服務
$ sudo yum install -y dhcp tftp-server vsftpd syslinux xinetd

# 方式二:
# 按照一步一步安裝
# 安裝dhcp
$ sudo yum install -y dhcp
# 安裝tftp
$ sudo yum install -y tftp-server
# 安裝vsftpd
$ sudo yum install -y vsftpd
# 安裝syslinux
$ sudo yum install -y syslinux
# 安裝xinetd
$ sudo yum install -y xinetd

DHCP

  • 安裝
# 安裝
$ sudo yum install -y dhcp
  • 卸載
# 卸載
$ sudo yum remove dhcp

TFTP

  • 安裝
# 安裝
$ sudo yum install -y tftp-server
  • 卸載
# 卸載
$ sudo yum remove tftp-server

vsftpd

  • 安裝
# 安裝
$ sudo yum install -y vsftpd
  • 卸載
# 卸載
$ sudo yum remove vsftpd

SYSLinux

  • 安裝
# 安裝
$ sudo yum install -y syslinux
  • 卸載
# 卸載
$ sudo yum remove syslinux

xinetd

  • 安裝
# 安裝
$ sudo yum install -y xinetd
  • 卸載
# 卸載
$ sudo yum remove xinetd

配置

主機名稱 (Host) 作業系統 (OS) IP 地址(ip address)
無人值守系統 Centos7 192.168.158.2
客戶端主機 未安裝作業系統

網路配置

  • 配置 vmware 網路

vmware網路配置步驟:編輯 -> 虛擬網路編輯器 -> 添加網路 -> 使用本地 DHCP 服務將 IP 地址分配給虛擬機

image-20220922145631123.png

image-20220922150139860.png

  • 配置文件 ifcfg-ensxx
$ vi /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static # 靜態配置
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens32
UUID=53eb3239-d967-4079-9e11-28c7ccd12821
DEVICE=ens32
ONBOOT=yes # 開啟網路配置
IPADDR=192.168.158.2 # IP地址
NETWASK=255.255.255.0 # 子網掩碼
GATEWAY=192.168.158.1 # 網關

ISO掛載

掛載光碟鏡像方式:在伺服器使用wget下載iso到伺服器上、下載iso文件,通過光碟機掛載到伺服器上;

將虛擬機的 CD/DVD 光碟選項設置為「使用 ISO 鏡像文件」,並選擇已經下載好的系統 鏡像;

vmware掛載配置步驟: 虛擬機設置 -> CD/DVD (SATA) -> 使用 ISO 映像文件

image-20220923102217330.png

# 創建掛載點 /media/cdrom
$ mkdir -p /media/cdrom

# 掛載 ISO 到 /media/cdrom
$ mount /dev/cdrom /media/cdrom/

DHCP

DHCP配置文件中允許 BOOTP 引導程式協議, 旨在讓區域網內暫時沒有作業系統的主機也能獲取靜態 IP地址;在配置文件的最下面載入了引導驅動文件 pxelinux.0(這個文件會在下面的步驟中創建), 其目的是讓客戶端主機獲取到 IP 地址後主動獲取引導驅動文件;

$ vi /etc/dhcp/dhcpd.conf
allow booting; 
allow bootp; 
ddns-update-style interim; 
ignore client-updates; 
subnet 192.168.158.0 netmask 255.255.255.0 { 
    option subnet-mask 255.255.255.0; 
    option domain-name-servers 192.168.158.2; 
    range dynamic-bootp 192.168.158.100 192.168.158.200; 
    default-lease-time 21600; 
    max-lease-time 43200; 
    next-server 192.168.158.2; 
    filename "pxelinux.0"; 
}

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

$ systemctl restart dhcpd
$ systemctl enable dhcpd

TFTP

vsftpd 是一款功能豐富的文件傳輸服務程式,允許多種認證方式來進行訪問認證;但是,當前的客戶端主機沒有安裝作業系統,無法進行登錄認證;而 TFTP 作為一種基於 UDP 協議的簡單文件傳輸協議,不需要進行用戶認證即可獲取到所需的文件資源;配置 TFTP 服務程式,為客戶端主機提供引導及驅動文件;當客戶端主機有了基本的驅動程式之後,再通過 vsftpd 服務程式將完整的光碟鏡像文件傳輸過去;

TFTP 是一種非常精簡的文件傳輸服務程式, 它的運行和關閉是由 xinetd 網路守護進程服務來管理的;xinetd 服務程式會同時監聽系統的多個埠, 然後根據用戶請求的埠號調取相應的服務程式來響應用戶的請求;

$ vi /etc/xinetd.d/tftp
service tftp
{ 
    socket_type = dgram 
    protocol = udp 
    wait = yes 
    user = root 
    server = /usr/sbin/in.tftpd 
    server_args = -s /var/lib/tftpboot 
    disable = no  # 將 YES 改為 NO
    per_source = 11 
    cps = 100 2 
    flags = IPv4 
}

$ systemctl restart xinetd
$ systemctl enable xinetd

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

# 添加 TFTP 埠
$ firewall-cmd --permanent --add-port=69/udp

# 重啟防火牆
$ firewall-cmd --reload

SYSLinux

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

將 SYSLinux 提供的引導文件複製到 TFTP 服務程式的默認目錄中,也就是文件 pxelinux.0,這樣客戶端主機就能夠順利地獲取到引導文件了;

$ cd /var/lib/tftpboot
# 複製 pxelinux.0 文件到 /var/lib/tftpboot
$ cp /usr/share/syslinux/pxelinux.0 .

# 需進行 ISO 掛載, 否則出現 `No such file or directory`
$ cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} .
$ cp /media/cdrom/isolinux/{vesamenu.c32,boot.msg} . 

在 TFTP 服務程式的目錄中新建 pxelinux.cfg 目錄;將系統光碟中的開機選項菜單複製到該目錄中,並命名為 default, 這個 default 文件就是開機時的選項菜單;

$ mkdir /var/lib/tftpboot/pxelinux.cfg
$ cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

Centos 鏡像默認的開機菜單中有兩個選項,安裝系統 |安裝介質檢驗 ;採用無人值守的方式安裝系統,所以編輯 default 文件,把第 1 行的 default 參數 修改為 linux,這樣系統在開機時就會默認執行那個名稱為 linux 的選項;對應的 linux 選項 大約在 64 行,將默認的光碟鏡像安裝方式修改成 FTP 文件傳輸方式,並指定好光碟鏡像的獲取網址以及 Kickstart 應答文件的獲取路徑;

$ vi /var/lib/tftpboot/pxelinux.cfg/default
1 default linux # 將 這個修改為 default linux
64 append initrd=initrd.img inst.stage2=ftp://192.168.158.2 ks=ftp://192.168.158.2/pub/ks.cfg quiet # 鏡像安裝方式改成FTP傳輸方式

vsftpd

參考文檔://www.cnblogs.com/HOsystem/p/16629572.html

無人值守安裝系統的服務中,光碟鏡像是通過 FTP 協議傳輸的,因此要用到 vsftpd 服務程式;當然,也可以使用 httpd 服務程式來提供 Web 網站訪問的方式,只要能確保將光碟鏡像順利傳輸給客戶端主機即可;

打算使用 Web 網站服務來提供光碟鏡像,一定記得將上面配置文件中的光碟鏡像獲取網址和 Kickstart 應答文件獲取網址 修改一下;

在確認系統光碟鏡像已經正常掛載到/media/cdrom 目錄後,把目錄中的光碟鏡像文件全部複製到 vsftpd 服務程式的工作目錄中;

$ cp -r /media/cdrom/* /var/ftp

$ firewall-cmd --permanent --add-service=ftp
$ firewall-cmd --reload
$ setsebool -P ftpd_connect_all_unreserved=on

# 開啟vsftpd服務
$ systemctl start vsftpd
# 加入vsftpd至開機啟動項
$ systemctl enable vsftpd

KickStart

Kickstart 其實並不是一個服務程式,而是一個應答文件;Kickstart 應答文件中包含了系統安裝過程中需要使用的選項和參數 資訊,系統可以自動調取這個應答文件的內容,從而徹底實現了無人值守安裝系統;

在 root 管理員的家目錄中有一個名為 anaconda-ks.cfg 的文件,它就是應答文件;下面將這個文件複製到 vsftpd 服務程式的工作目 錄中(在開機選項菜單的配置文件中已經定義了該文件的獲取路徑,也就是 vsftpd 服務程式 數據目錄中的 pub 子目錄中);使用 chmod 命令設置該文件的許可權,確保所有人都有可讀的權 限,以保證客戶端主機可以順利獲取到應答文件及裡面的內容;

$ cp ~/anaconda-ks.cfg /var/ftp/pub/ks.cfg
$ chmod +r /var/ftp/pub/ks.cfg

Kickstart 應答文件並沒有想像中的那麼複雜,它總共只有 46 行左右的參數和注釋內容, 完全可以通過參數的名稱及介紹來快速了解每個參數的作用;

把第 6 行的光碟鏡像安裝方式修改成 FTP 協議,仔細填寫好 FTP 伺服器的 IP 地址,並 用本地瀏覽器嘗試打開下檢查有沒有報錯。然後把第 21 行的時區修改成上海(Asia/Shanghai),再把 29 行的磁碟選項設置為清空所有磁碟內容並初始化磁碟,最後再把

$ vi /var/ftp/pub/ks.cfg
# Use CDROM installation media 
url --url=ftp://192.168.158.2 # 在Use CDROM 下添加 url
# System timezone
timezone Asia/Shanghai --isUtc --nontp
# Partition clearing information 
clearpart --all --initlabel
reboot

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

問題匯總

問題一:

問題描述:

在配置 dhcpd.conf 後,使用 systemctl restart dhcpd 時,出現以下錯誤:

Sep 23 00:29:39 localhost.localdomain dhcpd[9744]: Please report for this software via the CentOS Bugs Database:
Sep 23 00:29:39 localhost.localdomain dhcpd[9744]:     //bugs.centos.org/
Sep 23 00:29:39 localhost.localdomain dhcpd[9744]: nt
Sep 23 00:29:39 localhost.localdomain dhcpd[9744]: exiting.
Sep 23 00:29:39 localhost.localdomain systemd[1]: dhcpd.service: main process exited, code=exited, status=1/FAILUR
Sep 23 00:29:39 localhost.localdomain systemd[1]: Failed to start DHCPv4 Server Daemon.
-- Subject: Unit dhcpd.service has failed
-- Defined-By: systemd
-- Support: //lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit dhcpd.service has failed.
-- 
-- The result is failed.
Sep 23 00:29:39 localhost.localdomain systemd[1]: Unit dhcpd.service entered failed state.
Sep 23 00:29:39 localhost.localdomain systemd[1]: dhcpd.service failed.
Sep 23 00:29:39 localhost.localdomain polkitd[8602]: Unregistered Authentication Agent for unix-process:9738:3132 

問題原因:

虛擬機網卡 ensxxx 和dhcpd.conf的網段不一致;總的來說,就是 dhcpd.conf 配置中出現錯誤;

問題解決:

重新配置 dhcpd.conf 文件;

$ 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;  # 允許 booting 模式
allow bootp;    
ddns-update-style interim;
ignore client-updates;
# subnet: 子網IP段
# netmask: 子網掩碼
# subnet-mask: 子網掩碼
# option domain-name-servers: 無人值守系統IP地址
# range dynamic-bootp: 客戶端主機可獲取的IP範圍
# default-lease-time: 
# max-lease-time: 
# next-server: 
# filename: 
subnet 192.168.158.0 netmask 255.255.255.0 {   
    option subnet-mask 255.255.255.0;
    option domain-name-servers 192.168.158.2;
    range dynamic-bootp 192.168.158.100 192.168.158.200;
    default-lease-time 21600;
    max-lease-time 43200;
    next-server 192.168.158.2;
    filename "pxelinux.0";
}

問題二:

問題描述:

在 進行無人值守安裝時,啟動系統時,出現PXE-E32: TFTP open timeout錯誤;

問題原因:

  • 原因一:

TFTP配置文件錯誤,將disable = yes 改為 disable = no

  • 原因二:

xinetd 服務未安裝或未開啟

  • 原因三:

防火牆未放行ftp服務

問題解決:

  • 原因一解決:修改TFTP配置文件
$ vi /etc/xinetd.d/tftp
disable = no
  • 原因二解決:安裝xinetd或開啟xinetd
$ yum install -y xinetd
$ systemctl start xinetd
  • 原因三解決:放行ftp服務
$ firewall-cmd --permanent --add-service=ftp
$ firewall-cmd --reload
$ setsebool -P ftpd_connect_all_unreserved=on

問題三:

問題描述:

在 進行無人值守安裝時,啟動系統時,出現以下錯誤

Warning: /dev/root does not exist

Generaing "/run/initramfs/rdsosreport.txt"

Entering emergency mode. Exit the shell to continue
Type "journalctl" to view system logs.
You might want to save "/run/initramfs/rdsosreport.txt" to a USB stick or /boot
after moounting them and attach it to a bug report.

image-20220923130704760

問題原因:

default 文件中,append行沒設置正確;

問題解決:

重新配置 default文件;

問題四:

問題描述:

在 進行無人值守安裝時,啟動系統時,出現以下錯誤:

PXE-E51: No DHCP or proxyDHCP offers were received.

PXE-M0F: Exiting Intel PXE ROM.
Operating System not found

問題原因:

dhcp服務未配置正確

問題解決:

重新配置 dhcpd.conf 文件;

$ 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;  # 允許 booting 模式
allow bootp;    
ddns-update-style interim;
ignore client-updates;
# subnet: 子網IP段
# netmask: 子網掩碼
# subnet-mask: 子網掩碼
# option domain-name-servers: 無人值守系統IP地址
# range dynamic-bootp: 客戶端主機可獲取的IP範圍
# default-lease-time: 
# max-lease-time: 
# next-server: 
# filename: 
subnet 192.168.158.0 netmask 255.255.255.0 {   
    option subnet-mask 255.255.255.0;
    option domain-name-servers 192.168.158.2;
    range dynamic-bootp 192.168.158.100 192.168.158.200;
    default-lease-time 21600;
    max-lease-time 43200;
    next-server 192.168.158.2;
    filename "pxelinux.0";
}

# 重啟DHCP服務
$ systemctl restart dhcpd