天天看點

kickstart + dhcp + tftp-server + tftp + httpd自動化安裝作業系統

一、簡介

1、什麼是PXE

PXE(preboot execute environment,預啟動執行環境)是由Intel公司開發的最新技術,工作于Client/Server的網絡模式,支援工作站通過網絡從遠端伺服器下載下傳映像,并由此支援通過網絡啟動作業系統,在啟動過程中,終端要求伺服器配置設定IP位址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)協定下載下傳一個啟動軟體包到本機記憶體中執行,由這個啟動軟體包完成終端(用戶端)基本軟體設定,進而引導預先安裝在伺服器中的終端作業系統。PXE可以引導多種作業系統。

嚴格來說,PXE 并不是一種安裝方式,而是一種引導方式。進行 PXE 安裝的必要條件是在要安裝的計算機中必須包含一個 PXE 支援的網卡(NIC),即網卡中必須要有 PXE Client。PXE 協定可以使計算機通過網絡啟動。此協定分為 Client端和 Server 端,而PXE Client則在網卡的 ROM 中。當計算機引導時,BIOS 把 PXE Client 調入記憶體中執行,然後由 PXE Client 将放置在遠端的檔案通過網絡下載下傳到本地運作。運作 PXE 協定需要設定 DHCP 伺服器和 TFTP 伺服器。DHCP 伺服器會給 PXE Client(将要安裝系統的主機)配置設定一個 IP 位址,由于是給 PXE Client 配置設定 IP 位址,是以在配置 DHCP 伺服器時需要增加相應的 PXE 設定。此外,在 PXE Client 的 ROM 中,已經存在了 TFTP Client,那麼它就可以通過 TFTP 協定到 TFTP Server 上下載下傳所需的檔案了。

PXE的工作過程:

1)、 PXE Client 從自己的PXE網卡啟動,向本網絡中的DHCP伺服器索取IP;

2)、DHCP 伺服器傳回配置設定給客戶機的IP * 以及PXE檔案的放置位置(該檔案一般是放在一台TFTP伺服器上) ;

3)、PXE Client 向本網絡中的TFTP伺服器索取pxelinux.0 檔案;

4)、PXE Client 取得pxelinux.0 檔案後之執行該檔案;

5)、 根據pxelinux.0 的執行結果,通過TFTP伺服器加載核心和檔案系統 ;

6)、 進入安裝畫面, 此時可以通過選擇HTTP、FTP、NFS 方式之一進行安裝;

詳細工作流程,請參考下面這幅圖:

kickstart + dhcp + tftp-server + tftp + httpd自動化安裝作業系統

要達成PXE必須要有兩個環節:

(1)一個是用戶端的網卡必須要支援PXE使用者端功能,并且開機時選擇從網卡啟動,這樣系統才會以網卡進入PXE用戶端的程式;

(2)一個是PXE伺服器必須要提供至少含有DHCP以及TFTP的服務!

其中:

  • DHCP服務必須要能夠提供用戶端的網絡參數,還要告知用戶端TFTP所在的位置;
  • TFTP則提供用戶端的boot loader及kernel file下載下傳路徑。

還要加上NFS/FTP/HTTP(選擇一樣即可)等提供安裝檔案(安裝鏡像的解壓檔案),才算是比較完整的PXE伺服器。一般TFTP和DHCP服務都由同一台伺服器提供,且大多數時候還提供NFS/FTP/HTTP服務,是以PXE伺服器一般是提供3合一的服務

2、什麼是Kickstart

Kickstart是一種無人值守的安裝方式。它的工作原理是在安裝過程中記錄典型的需要人工幹預填寫的各種參數,并生成一個名為ks.cfg的檔案。如果在安裝過程中(不隻局限于生成Kickstart安裝檔案的機器)出現要填寫參數的情況,安裝程式首先會去查找Kickstart生成的檔案,如果找到合适的參數,就采用所找到的參數;如果沒有找到合适的參數,便需要安裝者手工幹預了。是以,如果Kickstart檔案涵蓋了安裝過程中可能出現的所有需要填寫的參數,那麼安裝者完全可以隻告訴安裝程式從何處取ks.cfg檔案,然後就去忙自己的事情。等安裝完畢,安裝程式會根據ks.cfg中的設定重新開機系統,并結束安裝。

PXE+Kickstart 無人值守安裝作業系統完整過程如下:

kickstart + dhcp + tftp-server + tftp + httpd自動化安裝作業系統

滿足Kickstart安裝系統的需求:

  1. 網卡必須支援PXE引導;
  2. 用戶端需要有與Kickstart 通信的IP位址,這裡一般都是通過DHCP自動配置設定IP位址來實作;
  3. 提供引導所需的檔案,核心檔案,核心鏡像檔案等,此時一般通過tftp-server等實作;
  4. kickstart檔案,它主要實作自動化安裝的過程,比如配置主機名、添加使用者、安裝系統後相關操作;
  5. 提供安裝源,一般就是NFS/ftp/httpd等;

總結: 通過如上需求,我們就知道需要安裝的相關服務,如DHCP/tftp-server/syslinux/kickstart/vsftpd等;

二、環境介紹及初紹化

1、環境介紹

  • 作業系統:CentOS Linux release 7.4.1708 (Core)
  • 網卡位址:192.168.10.7/24
  • CD光牒鏡像:CentOS-7-x86_64-DVD-1708.iso
  • 安裝工具:kickstart + dhcp + tftp-server + tftp + httpd
  • Workstaion網絡:VMNet3

2、準備工作

1、伺服器禁用SElinux,然後進行重新開機操作

[[email protected] ~]# cat /etc/redhat-release

CentOS Linux release 7.4.1708 (Core)

[[email protected] ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g'

/etc/selinux/config

[[email protected] ~]# setenforce 0

[[email protected] ~]# systemctl reboot

[[email protected] ~]# getenforce

Permissive

2、關閉防火牆及清空政策

[[email protected] ~]# systemctl stop firewalld.service

[[email protected] ~]# systemctl disable firewalld.service

Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

[[email protected] ~]# iptables -F

[[email protected] ~]# iptables -L -n

Chain INPUT (policy ACCEPT)

target prot opt source destination

Chain FORWARD (policy ACCEPT)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

[[email protected]~]#

3、軟體安裝

[[email protected] ~]# yum install -y httpd dhcp tftp-server tftp syslinux

[[email protected] ~]# rpm -q httpd dhcp tftp-server tftp syslinux

httpd-2.4.6-67.el7.centos.x86_64

dhcp-4.2.5-58.el7.centos.x86_64

tftp-server-5.2-13.el7.x86_64

tftp-5.2-13.el7.x86_64

syslinux-4.05-13.el7.x86_64

三、各元件配置及準備

一)DHCP服務配置

1、修改dhcpd配置檔案

[[email protected] ~]# cp -rf /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf

[[email protected] ~]# egrep -v "^#|^$" /etc/dhcp/dhcpd.conf

option domain-name "contoso.com";  #對應client 的/etc/resolve.conf裡面的option contoso.com,預設解析所帶域名。

option domain-name-servers ns1.contoso.com, contoso.com; #定義域名伺服器

default-lease-time 600;

max-lease-time 7200;

log-facility local7;

subnet 192.168.10.0 netmask 255.255.255.0 { //服務端IP網段及掩碼

option routers 192.168.10.254; //網關

option subnet-mask 255.255.255.0; //掩碼

option domain-name-servers 192.168.10.2;

range dynamic-bootp 192.168.10.100 192.168.10.120; //dhcp分發的位址範圍

default-lease-time 21600; //設定預設的IP租用期限

max-lease-time 43200; //設定最大的IP租用期限

next-server 192.168.10.7;    #TFTP伺服器位址

filename "pxelinux.0";  #指定引導檔案位置,這裡是TFTP根目錄下的pxelinux.0

}

2、啟動dhcpd服務,并設定為開機啟動

[[email protected] kickstart ~]# systemctl start dhcpd.service

[[email protected] kickstart ~]# systemctl enable dhcpd.service

3、dhcp服務端口檢視

[[email protected] ~]# ss -nulp | grep dhcpd

UNCONN 0 0 *:44810 *:* users:(("dhcpd",pid=5197,fd=20))

UNCONN 0 0 *:67 *:* users:(("dhcpd",pid=5197,fd=7))

UNCONN 0 0 :::5138 :::* users:(("dhcpd",pid=5197,fd=21))

二)Httpd服務配置

1、目錄建立及CD光牒挂載

[[email protected] ~]# mkdir -pv /var/www/html/CentOS7

[[email protected] ~]# mount --bind /media/cdrom/ /var/www/html/CentOS7/

2、啟動httpd服務,并設定為開機啟動

[[email protected] kickstart ~]# systemctl start httpd.service

[[email protected] kickstart ~]# systemctl enable httpd.service

3、httpd服務端口檢視

[[email protected] ~]# ss -tnl | grep 80

LISTEN 0 128 :::80

[[email protected] ~]# lftp http://192.168.10.7/CentOS7 //用lftp對CentOS7進行測試

cd: received redirection to `http://192.168.10.7/CentOS7/'

cd ok, cwd=/CentOS7

lftp 192.168.10.7:/CentOS7> ls

drwxr-xr-x -- /

-rw-r--r-- -- CentOS_BuildTag

drwxr-xr-x -- EFI

-rw-r--r-- -- EULA

-rw-r--r-- -- GPL

drwxr-xr-x -- LiveOS

drwxr-xr-x -- Packages

-rw-r--r-- -- RPM-GPG-KEY-CentOS-7

-rw-r--r-- -- RPM-GPG-KEY-CentOS-Testing-7

-rw-r--r-- -- TRANS.TBL

drwxr-xr-x -- images

drwxr-xr-x -- isolinux

drwxr-xr-x -- repodata

lftp 192.168.10.7:/CentOS7>

三)tftp服務配置

1、配置xinetd

[[email protected] ~]# vim /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  #修改tftp的根目錄

disable = no                                 #disable是yes的,把它改為no即可

per_source = 11

cps = 100 2

flags = IPv4

}

2、確定tftp.socket正常

[[email protected] ~]# systemctl start tftp.socket

[[email protected] ~]# systemctl enable tftp.socket

3、然後啟動tftp.service

[[email protected] ~]# systemctl start tftp.service

[[email protected] ~]# systemctl enable tftp.service

[[email protected] ~]# systemctl status tftp.service

[[email protected] ~]# ss -unlp | grep 69 //端口為UDP:69

UNCONN 0 0 :::69 :::* users:(("systemd",pid=1,fd=42))

3、導入必要的引導檔案

需要導入TFTP伺服器的主要檔案有:

  • 引導檔案 - pxelinux.0
  • 核心檔案:vmlinuz initrd.img
  • 引導菜單:isolinux.cfg -- 開機後選擇啟動項的菜單文

(1)引導檔案pxelinux.0, 由軟體包syslinux生成,安裝syslinux軟體包

[[email protected] ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/   #boot loader檔案

(2)導入核心及菜單檔案

核心檔案:vmlinuz initrd.img

引導菜單配置檔案: isolinux.cfg

系統自帶的兩種視窗子產品之一:vesamenu.c32

視窗提示資訊檔案:boot.msg

視窗背景圖檔:splash.png

[[email protected] pxeboot]# cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/      #導入核心檔案

[[email protected] ~]# cp /media/cdrom/isolinux/{vesamenu.c32,boot.msg,splash.png} /var/lib/tftpboot/

[[email protected] ~]# cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/

[[email protected] ~]# mkdir /var/lib/tftpboot/pxelinux.cfg/     #建立pxelinux.cfg檔案夾

[[email protected] ~]# ls /var/lib/tftpboot/   #檢視目錄下準備的檔案

boot.msg chain.c32 initrd.img mboot.c32 memdisk menu.c32 pxelinux.0 pxelinux.cfg splash.png vesamenu.c32 vmlinuz

(3)複制引導菜單進行修改

[[email protected] ~]# cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

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

timeout 600  //菜單顯示等待時間,機關為1/10秒,預設等待60秒。

//修改菜單等待時間為60,即等待6秒,若無操作則進入預設菜單;

timeout 600

//然後修改顯示菜單,找到檔案中的以下部分

label linux  

menu label ^Install CentOS Linux 7

kernel vmlinuz  

append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet

label check

menu label Test this ^media & install CentOS Linux 7  

menu default  

kernel vmlinuz  

append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet

# 将其修改為

label linux

menu label ^Install CentOS 7

kernel vmlinuz

append initrd=initrd.img

label linux 2

menu label ^Install CentOS 7 by Kickstart

kernel vmlinuz

append initrd=initrd.img inst.repo=http://192.168.10.7/CentOS7

inst.ks=http://192.168.10.7/CentOS7.cfg

label linux 3

menu label ^Install CentOS 7 by Kickstart_Min

kernel vmlinuz

append initrd=initrd.img inst.repo=http://192.168.10.7/CentOS7 inst.ks=http://192.168.10.7/CentOS7Min.cfg

(4)将CentOS7.kfg放到/var/www/html目錄下面,CentOS7. cfg檔案内容如下:

[[email protected] html]# cat CentOS7.cfg

#platform=x86, AMD64, or Intel EM64T

#version=DEVEL

# Install OS instead of upgrade

install

# Keyboard layouts

keyboard --vckeymap=us --xlayouts='us'

# Root password

rootpw --iscrypted $1$xBL2ptUE$hJOPvy.dysetezxpEXCaL0

# Use network installation

url --url="http://192.168.10.7/CentOS7" //指定網絡安裝的服務位址及目錄

# System language

lang en_US.UTF-8 --addsupport=zh_CN.UTF-8 //語言

# Firewall configuration

firewall --disabled

# System authorization information

auth --useshadow --passalgo=sha512

# Use graphical install

graphical

firstboot --disable

# SELinux configuration

selinux --disabled

# Network information

network --bootproto=dhcp --device=ens33 --onboot=yes --noipv6 --activate //啟動并激活網卡的名稱

network --hostname=Centos7.contoso.com //設定主機名

# Reboot after installation

reboot

# System timezone

timezone Asia/Shanghai --isUtc --nontp //設定時區

user --groups=wheel --name=tony --gecos="tony" //增加tony使用者

# System bootloader configuration

bootloader --location=mbr --boot-drive=sda

# Clear the Master Boot Record

zerombr //清除mbr資訊

# Partition clearing information

clearpart --all --initlabel

# Disk partitioning information //磁盤為50G的硬碟,這裡根據自己來進行修改

part /boot --fstype="xfs" --size=200

part / --fstype="xfs" --size=20480

part swap --fstype="swap" --size=2048

part /usr --fstype="xfs" --size=20480

part /tmp --fstype="xfs" --grow --size=1

%packages

@base

@compat-libraries

@desktop-debugging

@development

@dial-up

@fonts

@gnome-apps

@gnome-desktop

@legacy-x

@platform-devel

@remote-desktop-clients

@x11

vinagre

%end

說明:生成kickstart檔案時,需要安裝通過yum -y install system-config-kickst 安裝此軟體包,安裝的軟體包之前,首先需要repo檔案中第一行寫成[development],括号中建議填寫development,填寫其他内容會導緻後面system-config-kickstart指令生成kickstart檔案檔案時無法選擇軟體包

四、驗證自動化安裝

啟動之前準備的用戶端虛拟機檢視是否可以正常顯示引導菜單,是否可以正常擷取initrd.img和vmlinuz核心檔案。

若配置正常,會看到之前配置的引導菜單出現:

繼續閱讀