1. 程式人生 > >PXE+Kickstart 自動化部署系統

PXE+Kickstart 自動化部署系統

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

Kickstart是一種無人值守的安裝方式,其工作原理是預先把原本需要運維人員手工填寫的引數儲存成一個ks.cfg檔案,當安裝過程中需要填寫引數時則自動匹配Kickstart生成的檔案。所以只要Kickstart檔案包含了安裝過程中需要人工填寫的所有引數,那麼從理論上來講完全不需要運維人員的干預,就可以自動完成安裝工作。

由於當前的客戶端主機並沒有完整的作業系統,也就不能完成FTP協議的驗證了,所以需要使用TFTP協議幫助客戶端獲取引導及驅動檔案。vsftpd服務程式用於將完整的系統安裝映象通過網路傳輸給客戶端。當然,只要能將系統安裝映象成功傳輸給客戶端即可,因此也可以使用httpd來替代vsftpd服務程式。

PXE的工作原理圖解



配置DHCP服務程式

配置DHCP服務的目的是為了給區域網內暫時沒有IP地址的機器分配一個IP地址,同時傳輸引導配置檔案pxelinux.0,需要注意的是,應該開啟DHCP的BOOTP功能,這樣當用戶獲取到IP地址後,會主動請求獲取引導驅動檔案,從而進入下一步操作.

1.首先通過Yum倉庫,安裝DHCP服務程式.

[[email protected] ~]# yum install -y dhcp
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Package 12:dhcp-4.2.5-68.el7.x86_64 already installed and latest version
Nothing to do

2.編輯DHCP主配置檔案,寫入以下內容,開啟BOOTP功能.

[[email protected] ~]# vim /etc/dhcp/dhcpd.conf 
[[email protected] ~]# cat /etc/dhcp/dhcpd.conf 
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#

subnet 192.168.1.0 netmask 255.255.255.0 {          #指明分配網段
         range 192.168.1.100 192.168.1.200;         #分配的網段(100-200)
         next-server 192.168.1.10;                  #指定TFTP伺服器的地址
         filename "pxelinux.0";                     #指定PXE載入程式的檔名
         default-lease-time 21600;
         max-lease-time 4320;
}

3.啟動DHCP服務,並設定開機自啟動

[[email protected] ~]# systemctl restart dhcpd
[[email protected] ~]# systemctl enable dhcpd


配置TFTP服務程式

TFTP作為一種基於UDP協議的簡單檔案傳輸協議,不需要使用者認證即可獲取到使用者所需的檔案資源,因此接下來配置TFTP服務程式,為客戶主機提供引導及驅動檔案,當客戶端有了基本的驅動程式之後,在通過VSFTP服務程式將完整的光碟映象檔案傳輸過去.

1.首先通過Yum倉庫,安裝TFTP服務程式.

[[email protected] ~]# yum install -y tftp tftp-server xinetd
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Package tftp-5.2-22.el7.x86_64 already installed and latest version
Package tftp-server-5.2-22.el7.x86_64 already installed and latest version
Nothing to do

2.TFTP是由xinetd服務守護的,所以要開啟TFTP只需要修改xinetd服務的幾個引數即可

[[email protected] ~]# vim /etc/xinetd.d/tftp 
[[email protected] ~]# cat /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                     #設定ftp開機自啟動
    per_source      = 11
    cps         = 100 2
    flags           = IPv4
}

3.重啟xinetd服務,並設定為開機自啟動

[[email protected] ~]# systemctl restart xinetd
[[email protected] ~]# systemctl enable xinetd


配置SYSLinux服務程式

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

1.首先通過Yum倉庫,安裝SYSLinux服務程式.

[[email protected] ~]# yum install -y syslinux mtools
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Package syslinux-4.05-13.el7.x86_64 already installed and latest version
Package mtools-4.0.18-5.el7.x86_64 already installed and latest version
Nothing to do

2.然後拷貝pxelinux.0引導檔案到/var/lib/tftpboot目錄下

[[email protected] ~]# cp -a /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[[email protected] ~]# ls -l /var/lib/tftpboot/
total 28
-rw-r--r--. 1 root root 26826 May 10  2016 pxelinux.0

3.掛載RHEL光碟,並拷貝Linux的系統選單和微核心

[[email protected] ~]# mount /dev/sr0 /mnt
mount: /dev/sr0 is write-protected, mounting read-only

[[email protected] ~]# cp -a /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/
[[email protected] ~]# cp -a /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/

[[email protected] ~]# cp -a /mnt/isolinux/vesamenu.c32 /var/lib/tftpboot/
[[email protected] ~]# cp -a /mnt/isolinux/boot.msg /var/lib/tftpboot/

4.然後再TFTP目錄中新建pxelinux.cfg目錄,並將開機選項選單複製到TFTP目錄中,重新命名為default.

[[email protected] ~]# mkdir -p /var/lib/tftpboot/pxelinux.cfg
[[email protected] ~]# cp -a /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/
[[email protected] ~]# mv /var/lib/tftpboot/pxelinux.cfg/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

5.編輯這個default檔案,修改以下內容

[[email protected] ~]# vim /var/lib/tftpboot/pxelinux.cfg/default

 59 menu separator # insert an empty line
 60 
 61 label linux
 62   menu label ^Install Red Hat Enterprise Linux 7.5
 63   menu default                                                      #新增預設選擇選單
 64   kernel vmlinuz
 65   append initrd=initrd.img ks=ftp://192.168.1.10/pub/ks.cfg         #指定主伺服器IP地址
 66 
 67 label check
 68   menu label Test this ^media & install Red Hat Enterprise Linux 7.5
 69 #  menu default                                                     #註釋掉,不用測試功能
 70   kernel vmlinuz
 71   append initrd=initrd.img inst.stage2=hd:LABEL=RHEL-7.5\x20Server.x86_64 rd.live.check quiet
 72 
 73 menu separator # insert an empty line


配置VSFTP服務程式

前面的微核心傳輸完畢後,載入了開機選單,下面我們就要使用VSFTP完整的傳輸RHEL映象到遠端主機了,當然你也可以使用Web網站替代VSFTP的功能,不過還是推薦使用VSFTP.

1.首先通過Yum倉庫,安裝VSFTP服務程式.

[[email protected] ~]# yum install -y vsftpd
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Package vsftpd-3.0.2-22.el7.x86_64 already installed and latest version
Nothing to do

2.拷貝RHEL光碟檔案到/var/ftp/pub目錄下,並賦予相應的許可權.

[[email protected] ~]# mkdir -r /var/ftp/pub
[[email protected] ~]# cp -r /mnt/* /var/ftp/pub

[[email protected] ~]# chmod 777 -R /var/ftp/pub
[[email protected] ~]# chown ftp.ftp -R /var/ftp/pub

3.開啟VSFTP匿名訪問模式,並設定開機自啟動

[[email protected] ~]# systemctl restart vsftpd
[[email protected] ~]# systemctl enable vsftpd


建立KickStart應答檔案

KickStart其實準確的說,並不是一個服務程式,而是一個應答檔案,其中包含了系統安裝過程中所需要的配置引數選項等,在我們安裝完系統後,root的家目錄裡會有一個anaconda-ks.cfg檔案,其實這就是安裝完本系統的劇本,我們也可以多次利用.

1.這裡我們直接複製下面的應答檔案,改個名字即可使用啦.

#此處應配置生成裝機檔案    本步驟跳過(以下是測試指令碼)
#-------------------------------------------------------------------
[[email protected] ~]# vim ks.cfg

#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
# Use network installation#
url --url="ftp://192.168.1.10/pub/"                     #此處修改為伺服器IP
# Root password
rootpw --iscrypted $1$K4WAmqxk$ccusVq9PIk6f1uMqJ48fI1
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use graphical install
graphical
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# Installation logging level
logging --level=info

# System timezone
timezone  Asia/Shanghai
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all  
# Disk partitioning information
part /boot --asprimary --fstype="ext4" --size=500
part swap --fstype="swap" --size=2000
part / --fstype="ext4" --grow --size=1
clearpart --all --initlabel

%packages
@base

%end
#-------------------------------------------------------------------

[[email protected] ~]# cp -a ks.cfg /var/ftp/pub           #拷貝生成的指令碼到指定目錄下

如果您覺得以上指令碼不能滿足生產需求,您可以安裝system-config-kickstart軟體包,這是一款圖形介面工具,可以方便的配置生成系統安裝指令碼.

另開一臺機器,測試效果即可