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

2022-09-24 06:01:42

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 地址分配給虛擬機器器

  • 組態檔 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 映像檔案

# 建立掛載點 /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

參考檔案:https://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]:     http://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: http://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.

問題原因:

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