1. 程式人生 > >在CentOS 7上安裝PXE伺服器

在CentOS 7上安裝PXE伺服器

作者:張瑞旗 / 騰科IT教育集團RHCA講師

PXE,即Preboot eXecute Environment的縮寫,譯作“啟動前執行環境”,以“伺服器/客戶端”模式工作,可以讓我們通過網路啟動一臺沒有安裝過作業系統的電腦,並協助其安裝作業系統。安裝了這種環境、能提供網路安裝作業系統功能的伺服器,就是PXE伺服器。

安裝過作業系統的都知道,安裝過程中,我們需要不時地回答安裝程式提出的問題,脫不開身。以前使用光碟安裝作業系統的,還需要守到最後,根據提示及時更換光碟。要是公司新開一個辦公室,一次要安裝幾十臺甚至上百臺電腦,還要這樣一臺一臺地安裝,那可真得累個半死。

本文將在VMware Worksation上執行的一臺Linux CentOS 7安裝成PXE伺服器,並建立另外一臺虛擬機器充當客戶端主機,驗證一下網路安裝作業系統的過程。現在能搜尋到的教程,大多是Linux 6時代的攻略和命令,不忍卒讀,於是,我就整理出這篇在Linux CentOS 7上安裝PXE伺服器的文章來。好了,廢話少說,我們直奔主題。

要想在CentOS 7上安裝PXE伺服器,要完成以下任務:
1、    安裝dhcp、tftp、vsftpd伺服器等軟體
2、    設定IP地址,比如說:192.168.1.1
3、    關閉SELinux、firewalld
4、    配置dhcpd、tftp
5、    將CentOS 7映像檔案部署到FTP伺服器的輸入目錄中

具體步驟

第01步

安裝dhcpd、tftp、syslinux、wget和vsftpd
yum install -y dhcp tftp tftp-server syslinux wget vsftpd

第02步

關閉SELinux和防火牆
手動修改/etc/selinux/config,確保SELINUX=disabled
setenforce 0
systemctl disable firewalld
systemctl stop firewalld
poweroff

第03步

在VMWARE中將虛擬機器的網路介面卡設定為“橋接模式”。

第04步

這時候已經不需要上網了,所以可以為CentOS 7隨意設定IP地址。
nmcli con show
nmcli con modi ens32 ipv4.method manual ipv4.addresses 192.168.1.1/24
#我的網絡卡介面id是ens32。於是將它的IP設為192.168.1.1。
nmcli con up ens32
nmcli con show
ip a
#確認192.168.1.1已經成功設定。

第05步

設定dhcp伺服器。
vim /etc/dhcp/dhcpd.conf
確保配置檔案內容如下:

 ddns-update-style interim;
 ignore client-updates;
 authoritative;
 allow booting;
 allow bootp;
 allow unknown-clients;
 
# A slightly different configuration for an internal subnet.
 subnet 192.168.1.0 netmask 255.255.255.0 
{
   range 192.168.1.2 192.168.1.253;
   option domain-name-servers 192.168.1.1;
   option domain-name "server1.example.com";
   option routers 192.168.1.1;
   option broadcast-address 192.168.1.255;
   default-lease-time 600;
   max-lease-time 7200;
 
   # PXE SERVER IP
   next-server 192.168.1.1; #  DHCP server ip
   filename "pxelinux.0";
 }

至此,上文的filename所指的pxelinux.0目前還沒有部署到位。最終它的位置是/tftpboot/pxelinux.0,但不要在這裡使用路徑,僅使用這個名稱就好。上面的每一行結尾都是一個分號(;)。

第06步

為xinetd配置TFTP伺服器,即將tftp服務交給xinetd來管理。
vim /etc/xinetd.d/tftp
/etc/xinetd.d/tftp的內容如下:

service tftp
{
     socket_type             = dgram
     protocol                = udp
     wait                    = yes
     user                    = root
     server                  = /usr/sbin/in.tftpd
     server_args             = -s /tftpboot
     disable                 = no
     per_source              = 11
     cps                     = 100 2
     flags                   = IPv4
 }


我們要將tftp服務的位置挪到/tftpboot中,將有個程式仍然認為它的路徑在/var/lib/tftpboot中,所以,要改回來。
vim /usr/lib/systemd/system/tftp.service
將ExecStart=/usr/sbin/in.tftpd -s /var/lib/tftpboot
修改為:ExecStart=/usr/sbin/in.tftpd -s /tftpboot
看,只有這樣,才能與/etc/xinetd.d/tftp中的相應內容保持一致。

第07步

設定TFTP伺服器網路啟動檔案。首先要建立一個路徑/tftpboot。
mkdir /tftpboot
chmod 777 /tftpboot

 cp -v /usr/share/syslinux/pxelinux.0 /tftpboot
 cp -v /usr/share/syslinux/menu.c32 /tftpboot
 cp -v /usr/share/syslinux/memdisk /tftpboot
 cp -v /usr/share/syslinux/mboot.c32 /tftpboot
 cp -v /usr/share/syslinux/chain.c32 /tftpboot

再建立兩個路徑:
mkdir /tftpboot/pxelinux.cfg
mkdir /tftpboot/netboot/

第08步

將CentOS的ISO檔案釋出到FTP的資料夾中。要做到這一點,必須要有一個CentOS 7的ISO檔案。我要把它以虛擬光碟的形式掛載到虛擬機器中。操作步驟如下圖所示:

點選螢幕右下方光碟圖示,在短選單中選擇“連線到主機”
lsblk檢視光碟掛載的路徑,
如sr0    /run/media/root/CentOS 7 x86_64
mkdir -p /var/ftp/pub
cp -r /run/media/root/'CentOS 7 x86_64'/* /var/ftp/pub
“CentOS 7 x86_64”要用引號括起來,否則會出錯。

第09步

將啟動時需要使用的映象檔案拷貝到目錄位置。
cp /var/ftp/pub/images/pxeboot/vmlinuz /tftpboot/netboot/
cp /var/ftp/pub/images/pxeboot/initrd.img /tftpboot/netboot/

第10步

建立一個kickstart,即無人值守安裝檔案,名字叫ks.cfg。
vim /var/ftp/pub/ks.cfg
其內容如下:
 

#platform=x86, AMD64, or Intel EM64T
 #version=DEVEL
 # Firewall configuration
 firewall --disabled
 # Install OS instead of upgrade
 install
 # Use NFS installation media
 url --url="ftp://192.168.1.1/pub/"
 rootpw --plaintext 123456
#root的密碼設為123456
 # Use graphical install
 graphical
 firstboot disable
 # System keyboard
 keyboard us
 # System language
 lang en_US
 # SELinux configuration
 selinux disabled
 # Installation logging level
 logging level=info
# System timezone
 timezone Asia/Shanghai
 # System bootloader configuration
 bootloader location=mbr
 clearpart --all --initlabel
 part swap --asprimary --fstype="swap" --size=1024
 part /boot --fstype xfs --size=200
 part pv.01 --size=1 --grow
 volgroup rootvg01 pv.01
 logvol / --fstype xfs --name=lv01 --vgname=rootvg01 --size=1 --grow

%packages
 @core
 wget
 %end
 %post
 %end

儲存後,用ksvalidator檢查一下是否有語法錯誤。
ksvalidator /var/ftp/pub/ks.cfg

這個kickstart檔案,一般分為三個部分,分別用“%pre %end”、“%packages %end”、“%post %end”來界定。上面這個檔案中的%pre %end部分的界定符號省略了,只剩下後面兩個。

第11步

建立一個pxe選單
vim /tftpboot/pxelinux.cfg/default
default的內容如下:

 default menu.c32
 prompt 0
 timeout 30
 MENU TITLE Togogo.net Linux Training

 LABEL centos7_x64
 MENU LABEL CentOS 7 X64
 KERNEL /netboot/vmlinuz
 APPEND  initrd=/netboot/initrd.img inst.repo=ftp://192.168.1.1/pub ks=ftp://192.168.1.1/pub/ks.cfg

最後這個APPEND寫成一行,中間不要斷行。

第12步

systemctl enable dhcpd
systemctl enable tftp
systemctl enable vsftpd
將以上服務設為開機自動啟動。

systemctl restart vsftpd
systemctl restart dhcpd
systemctl restart tftp
重新啟動以上服務。


驗證

在VMware中建立一個新的虛擬機器,以充當驗證PXE伺服器的客戶機。將其網路介面卡的網路連線設為“橋接模式”。
 
然後啟動這臺虛擬機器。於是,我們就能看到,這臺虛擬機器可以在無人干預的情況下安裝CentOS Linux的Minimal,即最小化安裝。

這個選單設定的是等待3秒就開始安裝。沒安裝之前,“CentOS 7 x64”選單項還在高亮的時候,按下Tab鍵,就會看到如下的字樣:

> vmlinuz initrd=initrd.img inst=ftp://192.168.1.1/pub ks=ftp://192.168.1.1/pub/ks.cfg

不正是我在第11步設定的選單項嗎?
 

後記

這個過程可能會遇到的困難是將PXE客戶機與PXE伺服器放到同一個網段中。如果我們在家裡上網,物理網絡卡的IP地址可能是192.168.1.X,那就可以完全按照上面的步驟進行。
如果物理網絡卡的IP地址是192.168.0.X,甚至是別的什麼,那就手動修改網絡卡的IP,把它變成192.168.1.X。因為,VMware的橋接設定,會讓“PXE客戶機”獲取192.168.1.0/24這個網段的IP地址,正好跟“PXE伺服器