做者:張瑞旗 / 騰科IT教育集團RHCA講師linux
PXE,即Preboot eXecute Environment的縮寫,譯做「啓動前運行環境」,以「服務器/客戶端」模式工做,可讓咱們經過網絡啓動一臺沒有安裝過操做系統的電腦,並協助其安裝操做系統。安裝了這種環境、能提供網絡安裝操做系統功能的服務器,就是PXE服務器。vim
安裝過操做系統的都知道,安裝過程當中,咱們須要不時地回答安裝程序提出的問題,脫不開身。之前使用光盤安裝操做系統的,還須要守到最後,根據提示及時更換光盤。要是公司新開一個辦公室,一次要安裝幾十臺甚至上百臺電腦,還要這樣一臺一臺地安裝,那可真得累個半死。centos
本文將在VMware Worksation上運行的一臺Linux CentOS 7安裝成PXE服務器,並建立另一臺虛擬機充當客戶端主機,驗證一下網絡安裝操做系統的過程。如今能搜索到的教程,大可能是Linux 6時代的攻略和命令,不忍卒讀,因而,我就整理出這篇在Linux CentOS 7上安裝PXE服務器的文章來。好了,廢話少說,咱們直奔主題。bash
要想在CentOS 7上安裝PXE服務器,要完成如下任務:
一、 安裝dhcp、tftp、vsftpd服務器等軟件
二、 設置IP地址,好比說:192.168.1.1
三、 關閉SELinux、firewalld
四、 配置dhcpd、tftp
五、 將CentOS 7映像文件部署到FTP服務器的輸入目錄中服務器
具體步驟網絡
安裝dhcpd、tftp、syslinux、wget和vsftpd
yum install -y dhcp tftp tftp-server syslinux wget vsftpddom
關閉SELinux和防火牆
手動修改/etc/selinux/config,確保SELINUX=disabled
setenforce 0
systemctl disable firewalld
systemctl stop firewalld
poweroffsocket
在VMWARE中將虛擬機的網絡適配器設置爲「橋接模式」。post
這時候已經不須要上網了,因此能夠爲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已經成功設置。url
設置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,但不要在這裏使用路徑,僅使用這個名稱就好。上面的每一行結尾都是一個分號(;)。
爲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中的相應內容保持一致。
設置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/
將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」要用引號括起來,不然會出錯。
將啓動時須要使用的鏡像文件拷貝到目錄位置。
cp /var/ftp/pub/images/pxeboot/vmlinuz /tftpboot/netboot/
cp /var/ftp/pub/images/pxeboot/initrd.img /tftpboot/netboot/
建立一個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部分的界定符號省略了,只剩下後面兩個。
建立一個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寫成一行,中間不要斷行。
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服務器」相同。