使用PXE+DHCP+TFTP+Kickstart+FTP搭建無人值守安裝服務器。一般只有頻繁安裝系統才會搭建無人值守安裝服務器。
虛擬機環境:youxi1,CentOS7系統雙網卡,一個網卡橋接模式(182.168.1.6)可以上外網,一個網卡LAN區段(LAN1)模擬內網,作為無人值守安裝服務器
youxi2,CentOS系統,網卡LAN區段(LAN1)模擬內網,作為客戶端
youxi3,新建虛擬機
(1).PXE概述
PXE嚴格來說並不是一種安裝方式,而是一種引導的方式。進行 PXE 安裝的必要條件是要安裝的計算機中包含一個 PXE 支持的網卡(NIC),即網卡中必須要有 PXE Client。PXE (Pre-boot Execution Environment)協議使計算機可以通過網絡啟動。協議分為 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。PXE Client 通過 TFTP 協議到 TFTP Server 上下載所需的文件。
(2).Kickstart概述
KickStart是一種無人職守安裝方式。KickStart的工作原理是通過記錄典型的安裝過程中所需人工干預填寫的各種參數,並生成一個名為 ks.cfg的文件;在其后的安裝過程中(不只局限於生成KickStart安裝文件的機器)當出現要求填寫參數的情況時,安裝程序會首先去查找 KickStart生成的文件,當找到合適的參數時,就采用找到的參數,當沒有找到合適的參數時,才需要安裝者手工干預。這樣,如果KickStart文件涵蓋了安裝過程中出現的所有需要填寫的參數時,安裝者完全可以只告訴安裝程序從何處取ks.cfg文件,然后去忙自己的事情。等安裝完畢,安裝程序會根據ks.cfg中設置的重啟選項來重啟系統,並結束安裝。
(3).TFTP概述
TFTP(Trivial File Transfer Protocol,簡單文件傳輸協議)是TCP/IP協議族中的一個用來在客戶機與服務器之間進行簡單文件傳輸的協議,提供不復雜、開銷不大的文件傳輸服務。端口號為69。
TFTP是一個傳輸文件的簡單協議,它基於UDP協議而實現,但是我們也不能確定有些TFTP協議是基於其它傳輸協議完成的。此協議設計的時候是進行小文件傳輸的。因此它不具備通常的FTP的許多功能,它只能從文件服務器上獲得或寫入文件,不能列出目錄,不進行認證,它傳輸8位數據。傳輸中有三種模式:netascii,這是8位的ASCII碼形式,另一種是octet,這是8位源數據類型;最后一種mail已經不再支持,它將返回的數據直接返回給用戶而不是保存為文件。
(4).實驗拓撲圖和運行原理

PXE + KickStart大概運行原理:1、DHCP 服務器用來給客戶機分配IP; 2、TFTP 服務器用來存放PXE的相關文件,比如:系統引導文件; 3、FTP 服務器用來存放系統安裝文件; 4、KickStart所生成的ks.cfg配置文件;5、帶有一個 PXE 支持網卡的將安裝的主機。
注意:實驗是將3台服務器合並成1台服務器進行實驗。
(5).實驗
在開始之前請將防火牆和SELinux關閉。
1)搭建ftp服務
服務器端youxi1安裝vsftpd服務,並開機自啟
[root@youxi1 ~]# yum -y install vsftpd [root@youxi1 ~]# systemctl start vsftpd [root@youxi1 ~]# systemctl enable vsftpd Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
客戶端youxi2(由於沒有網絡所以使用本地yum源)安裝lftp,配置本地yum源詳見:配置本地yum源。另外為了提高安裝效率,將原有的所有yum源遷移到備份目錄
[root@youxi2 ~]# mkdir -p /backup/yum.repo [root@youxi2 ~]# mv /etc/yum.repos.d/*.repo /backup/yum.repo [root@youxi2 ~]# vim /etc/yum.repos.d/CentOS7.repo [CentOS7] //yum的ID,本地唯一,用於區分不同yum源 name=CentOS-server //描述信息 baseurl=file:///mnt //前面的file://是協議,后面的/mnt是光盤掛載點 enabled=1 //1啟用yum源,0禁用yum源 gpgcheck=0 //1使用公鑰驗證rpm包的正確性,0不驗證 [root@youxi2 ~]# yum clean all //清空yum緩存 [root@youxi2 ~]# yum makecache //重新讀取yum源 [root@youxi2 ~]# yum -y install lftp
把服務器端的系統光盤掛在到/var/ftp/pub/目錄下
[root@youxi1 ~]# mount /dev/sr0 /var/ftp/pub/ //光盤掛載到ftp匿名用戶訪問的主目錄 mount: /dev/sr0 寫保護,將以只讀方式掛載
2)搭建tftp服務
在服務器端youxi1上安裝tftp,修改配置文件,並開機自啟
[root@youxi1 ~]# yum -y install tftp tftp-server xinetd
[root@youxi1 ~]# vim /etc/xinetd.d/tftp //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 //設置tftp的主目錄,可以改可以不改,但要將PXE啟動所需的相關文件放到這里指定的位置
disable = no //yes表示關閉,no表示打開
per_source = 11
cps = 100 2
flags = IPv4
}
[root@youxi1 ~]# systemctl start xinetd
[root@youxi1 ~]# systemctl enable xinetd
[root@youxi1 ~]# netstat -antup | grep 69 //檢測tftp是否啟動
udp 0 0 0.0.0.0:69 0.0.0.0:* 9768/xinetd
在客戶端youxi2上安裝tftp客戶端
[root@youxi2 ~]# yum -y install tftp
3)准備PXE啟動相關文件
在服務器端youxi1上准備PXE啟動相關文件
[root@youxi1 ~]# yum -y install system-config-kickstart syslinux [root@youxi1 ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ //系統引導文件 [root@youxi1 ~]# cp /var/ftp/pub/images/pxeboot/vmlinuz /var/lib/tftpboot/ //內核文件 [root@youxi1 ~]# cp /var/ftp/pub/images/pxeboot/initrd.img /var/lib/tftpboot/ //內核初始化鏡像文件 [root@youxi1 ~]# mkdir /var/lib/tftpboot/pxelinux.cfg [root@youxi1 ~]# cp /var/ftp/pub/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default //引導菜單 [root@youxi1 ~]# chmod 644 /var/lib/tftpboot/pxelinux.cfg/default
4)搭建DHCP服務
服務器端youxi1添加新網卡,修改網卡配置文件,並啟動網卡
[root@youxi1 ~]# cd /etc/sysconfig/network-scripts/ [root@youxi1 network-scripts]# cp ifcfg-ens33 ifcfg-ens38 [root@youxi1 network-scripts]# vim ifcfg-ens38 TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" DEFROUTE="yes" IPV4_FAILURE_FATAL="yes" IPADDR="192.168.2.6" NETMASK="255.255.255.0" #GATEWAY="192.168.2.1" #DNS1="192.168.2.1" NAME="ens38" DEVICE="ens38" ONBOOT="yes" [root@youxi1 network-scripts]# ifup ens38
注意:將GATEWAY(網關)和DNS1刪除是為了讓ens33網卡能夠正常訪問外網,ens38只可以用來訪問同一網段的IP。
服務器端youxi1安裝dhcp服務,修改配置文件,並開機自啟
[root@youxi1 ~]# yum -y install dhcp
[root@youxi1 ~]# vim /etc/dhcp/dhcpd.conf
subnet 192.168.2.0 netmask 255.255.255.0 { //IP網段和掩碼
range 192.168.2.100 192.168.2.254; //dhcp取值范圍
option domain-name-servers 192.168.2.1; //指定默認DNS地址
option domain-name "localdhcp.cn"; //指定默認域名
option routers 192.168.2.1; //指定默認網關
option broadcast-address 192.168.2.255; //指定廣播地址
default-lease-time 600; //最小租約時間
max-lease-time 7200; //最大租約時間
next-server 192.168.2.6; //TFTP服務器地址
filename "pxelinux.0"; //指定引導文件位置,這里是TFTP根目錄下的pxelinux.0
}
[root@youxi1 ~]# systemctl start dhcpd
[root@youxi1 ~]# systemctl enable dhcpd
5)測試各個服務是否能正常運行
在客戶端youxi2上首先驗證dhcp服務是否正常工作
[root@youxi2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="dhcp" DEFROUTE="yes" IPV4_FAILURE_FATAL="yes" NAME="ens33" UUID="2c20e953-4536-49e1-8fe4-2c9079ea30ad" DEVICE="ens33" ONBOOT="yes" [root@youxi2 ~]# systemctl restart network [root@youxi2 ~]# ip a sh dev ens33 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:f2:7e:52 brd ff:ff:ff:ff:ff:ff inet 192.168.2.100/24 brd 192.168.2.255 scope global dynamic ens33 valid_lft 539sec preferred_lft 539sec inet6 fe80::20c:29ff:fef2:7e52/64 scope link valid_lft forever preferred_lft forever
在客戶端youxi2上測試ftp服務是否正常工作
[root@youxi2 ~]# lftp 192.168.2.6 lftp 192.168.2.6:~> ls drwxrwxr-x 8 0 0 2048 Nov 25 23:53 pub lftp 192.168.2.6:/> exit
在客戶端youxi2上測試tftp是否正常工作
[root@youxi2 ~]# tftp 192.168.2.6 tftp> get vmlinuz tftp> quit [root@youxi2 ~]# ll vmlinuz -rw-r--r-- 1 root root 6639904 5月 25 18:12 vmlinuz
6)修改引導菜單文件
在服務器端youxi1上修改tftp主目錄下的引導菜單文件
[root@youxi1 ~]# vim /var/lib/tftpboot/pxelinux.cfg/default //修改引導菜單文件的第一行,default后面的值必須與下方label標簽名中的一個相同,這里選擇直接安裝CentOS7的標簽名linux default linux timeout 600 label linux menu label ^Install CentOS 7 kernel vmlinuz //指定通過網絡啟動系統時,通過ftp訪問kickstart文件 append initrd=initrd.img inst.repo=ftp://192.168.2.6/pub inst.ks=ftp://192.168.2.6/ks.cfg
注意:此處的ks.cfg文件尚未創建(kickstart文件)
擴展:安裝程序指向kickstart文件常見格式
ks=ftp://server/dir/file,如ks=ftp://192.168.2.6/ks.cfg,對應FTP
ks=http://server/dir/file,如ks=http://192.168.2.6/ks.cfg,對應HTTP
ks=nfs:server:/dir/file,如ks=nfs:192.168.2.6:/var/ftp/pub/ks.cfg,對應NFS
7)生成kickstart文件,可以在任何安裝圖形界面的
首先服務器端youxi1安裝一下gdm插件(圖形界面)
[root@youxi1 ~]# yum -y install gdm
接着將服務器端youxi1的yum源進行修改,只保留本地yum源
[root@youxi1 ~]# mkdir -p /backup/yum.repo [root@youxi1 ~]# mv /etc/yum.repos.d/*.repo /backup/yum.repo/ [root@youxi1 ~]# vim /etc/fstab /dev/sr0 /var/ftp/pub iso9660 defaults 0 0 //添加 [root@youxi1 ~]# mount -a mount: /dev/sr0 is write-protected, mounting read-only [root@youxi1 ~]# vim /etc/yum.repos.d/development.repo [development] //必須是development,否則kickstart讀取不到 name=local-CentOS7 baseurl=file:///var/ftp/pub enabled=1 gpgcheck=0 [root@youxi1 ~]# yum clean all [root@youxi1 ~]# yum makecache
使用Xshell(或Xstart)執行命令system-config-kickstart打開圖形操作界面。
注意:echo $LANG輸出的是zh_CN.UTF-8,請將LANG改為en_US.UTF-8(LANG=en_US.UTF-8),否則會出現亂碼。
之后就會出現如下圖所示的配置界面

基礎配置(Basic Configuration):

安裝方案(Installation Method):全新安裝(Perform new installation)

引導裝載程序選項(Boot Loader Options):如果grub需要加密可以選擇使用GRUB密碼(Use GRUB passwd)

分區信息(Partition Information):

網絡配置(Network Configuration):

驗證(Authentication):默認即可
防火牆(Firewall Configuration):可以全部關閉,也可以關閉SELinux而開啟firewall。如果開啟了firewall可以根據需求勾選服務端口。

顯示設置(Display Configuration):想安裝圖形界面的就打勾,不想安裝的就去掉
軟件包選擇(Package Selection):根據需求勾選更多,Compatibility Libraries針對以前版本的CentOS構建應用程序的兼容庫。

預安裝腳本(Pre-Installation Script)和安裝后腳本(Post-Installation Script):根據需求運行一個腳本,可有可無。
配置完后,選擇左上角的File-->Save進行保存:

選擇保存到上面設置的tftp主目錄下的引導菜單文件中設置的kickstart文件位置,並且保證文件名要相同。

最后再查看下服務器端youxi1的SELinux和防火牆狀態,確保關閉,並重啟下dhcpd、network、vsftp。
8)新建一台虛擬機youxi3
網卡選擇LAN1網段,確保能夠獲取DHCP分配的IP地址。並且光盤里沒有鏡像。內存給個2G,我給1G的適合會報錯,報錯信息如下,內存擴大到2G就沒問題。

開啟虛擬機,新建的虛擬機直接開機就好,等待運行完成。如果原本有系統需要將網絡引導排在啟動項的第一位,安裝完成后,將硬盤引導移到第一位,否則會不停的重新安裝系統。
