PXE服務器原理與實戰搭建


一、PXE服務器簡介:

  PXE(preboot execute environment)是由Intel公司開發的最新技術,工作於Client/Server的網絡模式,支持工作站通過網絡從遠端服務器下載映像,並由此支持來自網絡的操作系統的啟動過程,其啟動過程中,終端要求服務器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)協議下載一個啟動軟件包到本機內存中並執行,由這個啟動軟件包完成終端基本軟件設置,從而引導預先安裝在服務器中的終端操作系統。在Linux中有多種的安裝方式:HD、USB、CDROM、PXE及遠程管理卡等。在我們的系統運維的生涯中,經常要安裝操作系統,然而我們維護的機器不是一兩台而已,一般的企業服務器數量都在幾十、幾百、幾千、甚至上萬台。這么多的機器,如果人工的一台一台去安裝,那我們這些運維人員,可能要把大部分時間都花費在了安裝系統上,所以,我們一般都會建立一個PXE服務器,通過網絡來批量部署系統。

wKioL1h-KGSRE72eAACtZeO_uVA103.png

二、無人值守部署系統安裝系統流程

1.部署PXE需要的環境:

  首先在pxe服務器端需要有一個DHCP服務器,需要有tftp服務器和一個文件服務器,其中文件服務器可以是ftp,http,nfs等文件服務器,如果服務器性能好或者流量不是太大,這些服務器完全可以放在一台服務器上面。當然pxe啟動需要網卡支持這樣的功能,好在現在的絕大部分的網卡已經支持這樣的功能了!

2.PXE部署系統自動化安裝流程

(1)    設置擁有pex功能的客戶端主機開機啟動項為網絡啟動,一般默認都此選項,如果沒有可自行設置bios啟動項

(2)    客戶端開機之后進入網絡啟動,此時客戶端沒有IP地址需要發送廣播報文(pxe網卡內置dhcp客戶端程序),dhcp服務器相應客戶端請求,分配給客戶端相應的IP地址與掩碼等信息

(3)    客戶端得到IP地址之后,與tftp通信,下載pxelinux.0,default文件,根據default指定的vmlinuz,initrd.img啟動系統內核,並下載指定的ks.cfg文件

(4)    根據ks.cfg文件去文件共享服務器(http/ftp/nfs)上面下載RPM包開始安裝系統,注意此時的文件服務器是提供yum服務器的功能的。

三、部署各服務器

1.tftp服務的安裝:

tftp的服務器需要安裝tftp-server包,tftp工作在udp 69號端口在啟動服務稍有不同,在CentOS7需要啟動tftpd.socket ,而在CentOS6的版本中需要保證服務開機啟用,並且重新啟動xinetd,因為在CentOS7是將所有進程托管給systemd進程,只需啟動tftp.socket,打開監聽的端口套接字即可,而在CentOS6中則是將不常用的服務統一托管給了xinetd進程,由xinetd進程統一進行管理,所以重啟xinetd即可tftp-server默認沒有配置文件,直接啟用服務,就可以使用(當然可以手動建立,但是沒有必要)

(1)    安裝tftp-server:

[root@cnode6_8 ~]# yum -y install tftp-server tftp
 

(2)    默認根文件路徑:

/var/lib/tftpboot

(3)    啟用服務:

CentOS6

[root@cnode6_8 ~]# chkconfig tftp on [root@cnode6_8 ~]# service xinetd restart
 

 

CentOS7

[root@centos7 ~]# systemctl start tftp.socket
 

                 

(4)tftp客戶端測試:

[root@cnode6_8 ~]# yum -y install tftp [root@cnode6_8 ~]# cd /var/lib/tftpboot [root@cnode6_8 tftpboot]# touch tftp.test [root@cnode6_8 tftpboot]# cd [root@cnode6_8 ~]# tftp 10.1.255.166 tftp> get tftp.test tftp> quit [root@cnode6_8 ~]# ll tftp.test -rw-r--r-- 1 root root 0 Sep 2 23:28 tftp.test
 

 

2. DHCP服務器安裝配置:

DHCP使用udp的67號端口,使用ss -unl 可以查看到監聽的67號端口。

(1)安裝dhcp服務器包:

[root@centos7 ~]# yum -y install dhcp

(2)復制樣例配置文件並覆蓋原來文件,因為原配置文件為空。

[root@centos7 dhcp]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example ./dhcpd.conf
 

 

(3)編輯配置文件:

[root@centos7 dhcp]# vim dhcpd.conf # dhcpd.conf #設置租約時間和最大租約時間 default-lease-time 600; max-lease-time 7200; #定義域名 option domain-name "jackcui.com"; #定義地址池的子網和掩碼,並定義地址池大小 subnet 10.1.255.0.0 netmask 255.255.255.0 { range 10.1.255.10 10.1.255.100; #定義引導服務器,即tftp服務器的引導文件和tftp服務器地址,注意此處的filename是有針對性的,此處的文件只是基於linux -X86的架構有效。 next-server 10.1.255.177 filename "pxelinux.0"; } [root@centos7 dhcp]#systemctl start dhcpd [root@centos7 dhcp]# ss -unl| grep 67 UNCONN 0 0 *:67 *:*
 

 

(4)    啟用服務:

[root@centos7 ~]# systemctl start dhcpd
 

3.ks.cfg文件的生成:

Anaconda是RedHat、CentOS、Fedora等Linux的安裝管理程序。它可以提供文本、圖形等安裝管理方式,並支持 Kickstart等腳本提供自動安裝的功能。該程序的功能是把位於光盤或其他源上的數據包,根據設置安裝到主機上。為實現該定制安裝,它提供一個定制界面,可以實現交互式界面供用戶選擇配置(如選擇語言,鍵盤,時區等信息)。

(1)Anaconda支持的管理模式: 
    (a)Kickstart提供的自動化安裝;  
    (b)對一個RedHat實施upgrade; 
    (c)Rescuse模式對不能啟動的系統進行故障排除。

要進入安裝步驟,需要先有一個引導程序引導啟動一個特殊的Linux安裝環境系統;

2)引導有多種方式: 
    (a)基於網絡方式的小型引導鏡像,需要提供小型的引導鏡像; 
    (b)U盤引導,通過可引導存儲介質中的小型引導鏡像啟動安裝過程;  
    (c)基於PXE的網絡安裝方式,要提供PXE的完整安裝環境; 
    (d)其他bootloder引導(如GRUB)。 
   注: 可用的安裝方式:本地CDROM、硬盤驅動器、網絡方式(NFS、FTP、HTTP)

(3)為Anaconda在圖形化的環境下安裝system-config-kickstart工具包:

         如果是最小化的系統要安裝包組(yum groupinstall “GNOME Desktop”

[root@cnode6_8 ~]# yum -y install system-config-kickstart
 

(4)執行system-config-kickstart 命令打開圖形化配置界面:

(a) Basic Configuration:基本配置模式

在basic configuration中要配置默認語言,鍵盤類型,時區,root密碼(當然要選擇加密了),下面有一個指定安裝key,這個是針對redhat的系統,其他系統可以忽略,接着就是針對硬件平台選擇要安裝的服務器的架構了,接着是安裝之后是否執行重啟和安裝是否要在交互模式下,現在我們要在非交互模式下面,當然不能選擇交互了!

wKiom1h-KJeRB5TAAADWPUUsidM163.png-wh_50

(b) Installation Method:安裝模式可以指定光盤,網絡服務器等,並指明文件共享路徑。 wKioL1h-KLvSNhaeAACXGqPnDpA670.png-wh_50

(c) Boot Loader options:Boot Loader選項,設置是否安裝bootlloader,以及是否對grub設置密碼,對於一個全新的安裝當然要安裝bootloader了。wKioL1h-KODjVH4NAAC1byEy0rQ671.png-wh_50

(d) Partition information:分區信息,手動添加分區信息,可以選擇RAID,根據自己使用的硬盤大小自己定義分區方案。

wKiom1h-KSPxKBT0AADcNphUjFM079.png-wh_50

(e) NetworkConfiguration,配置網絡當然使用pxe安裝不能手動分配地址,而是應該dhcp獲取,否則會引起地址沖突,選擇Add Network Device 選項卡添加網卡設備,已經獲取地址的方式。wKioL1h-KTqjNgGSAACJKPOIxMk948.png-wh_50

 

(f) Authentication:認證方式:包括登錄samba等認證方式wKioL1h-KVfA-YQKAACmocXbanw544.png-wh_50

(g) Firewall Configuration:防火牆的配置包括selinux是否啟用:wKiom1h-KXSBQlAmAACQDNa6vMQ723.png-wh_50

(h) Display Configuration顯示配置,是否啟用圖形化:wKiom1h-KYnTMlsPAAB5Aa9t8oo327.png-wh_50

(i) Package Selection 安裝包選擇:wKioL1h-KZ3iMz_pAAEBOYKH_eo225.png-wh_50

(j) pre-installtion Script/post-installation Script 系統安裝前/后要執行的腳本wKioL1h-KcOCjfEHAAC0BJqiJC0906.png-wh_50

敲完腳本記得有一個回車,否者不會執行,會停留到eof的地方等待確定

(k)最后記得保存文件!指定保存路徑即可

 

最后生成的配置:

  文件如下:其中以#開頭的行是注釋行,其它部分開頭是%開頭,%end結尾。%%packages是系統要安裝的包,@開頭是軟件包組,@^是環境包組開頭以-開頭是排除在外的包名或組名,除非必須的依賴性包則會安裝,否則不會安裝。%pre,%%post是腳本,%pre是在任何磁盤分區之前進行,%%post是在系統安裝之后進行的系統配置。

 

[root@cnode6_8 ~]# cat /home/ks.cfg #platform=x86, AMD64, or Intel EM64T #version=DEVEL # Firewall configuration firewall --enabled --ssh --smtp # Install OS instead of upgrade install # Use network installation #url指定安裝介質的位置 url --url="http://10.1.0.1/cobbler/ks_mirror/6/" # Root password rootpw --iscrypted $1$4iJ7qwfa$k2nSEdCRXQ1xhXymknch.1 # System authorization information auth --useshadow --passalgo=sha512 # Use text mode install #強制指定使用文本安裝 text firstboot --disable # System keyboard keyboard us # System language lang en_US # SELinux configuration selinux --enforcing # Installation logging level logging --level=info # Reboot after installation reboot # System timezone timezone Asia/Shanghai # Network information network --bootproto=dhcp --device=eth0 --onboot=on # System bootloader configuration bootloader --location=mbr # Clear the Master Boot Record #清除主引導記錄 zerombr # Partition clearing information #清除所有分區 clearpart --all # Disk partitioning information part /boot --fstype="ext4" --ondisk=hda --size=300 part / --fstype="ext4" --ondisk=hda --size=100000 part /home --fstype="ext4" --ondisk=hda --size=50000 #執行腳本開始 %post cat >> /etc/yum.repos.d/local2.repo << eof [base] name=base repo baseurl=file:///mnt/cdrom/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 eof %end %packages @backup-client @base @basic-desktop @compat-libraries @console-internet @debugging @desktop-platform @directory-client @fonts @general-desktop @hardware-monitoring @infiniband @input-methods @internet-browser @java-platform @large-systems @legacy-unix @mainframe-access @network-file-system-client @network-tools @performance @perl-runtime @print-client @ruby-runtime @security-tools @storage-client-fcoe @x11 %end
 

4.ftp服務器安裝配置:

  ftp可以進行許多安全方面的配置,但是在做一個內網的服務沒有必要做許多安全方面的配置,只需要保證能正常使用即可,ftp的默認文件共享路徑為:/var/ftp/pub/如需要共享文件,只需放在該目錄即可,安裝系統可以直接將光盤掛載至該共享文件的一個子目錄即可。

(1)    安裝軟件包:

[root@centos7 ~]# yum -y install vsftpd
 

(2)    創建掛載目錄:

[root@centos7 ~]# mkdir /var/ftp/pub/centos7/
 

(3)    掛載光盤軟件安裝源至文件目錄:

[root@centos7 ~]# mount /dev/cdrom /var/ftp/pub/centos7/
 

(6)    啟用服務:

[root@centos7 ~]# systemctl start vsftpd
 

 

 

5.復制相關需要的內核或其它文件:

(1)其中和菜單啟動引導文件等由syslinux包提供,所以安裝此包即可。

[root@centos7 ~]# yum -y install syslinux
 

(2) 復制文件:

[root@centos7 pxeboot]# cd /mnt/cdrom/p_w_picpaths/pxeboot [root@centos7 pxeboot]# ls initrd.img TRANS.TBL upgrade.img vmlinuz [root@centos7 pxeboot]# cp vmlinuz initrd.img /var/lib/tftpboot/ [root@centos7 pxeboot]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot [root@centos7 pxeboot]# cp /usr/share/syslinux/{chain.c32,memdisk,menu.c32,mboot.c32} /var/lib/tftpboot
 

(3)    編輯default文件:

[root@centos7 pxeboot]# cd /var/lib/tftpboot [root@centos7 tftpboot]# mkdir pxelinux.cfg [root@centos7 tftpboot]# cd pxelinux.cfg/ [root@centos7 pxelinux.cfg]# vim default default menu.c32 prompt 5 timeout 30 MENU TITLE Centos7 PXE LABEL linux_auto MENU LABEL Install Centos7 x86_64 AUTO install KERNEL vmlinuz APPEND initrd=initrd.img ks=ftp://192.168.20.77/pub/ks.cfg LABEL linux MENU LABEL Install Centos7 x86_6 KERNEL vmlinuz APPEND initrd=initrd.img inst.repo=ftp://192.168.20.77/pub/centos7 [root@centos7 ~]# cd [root@centos7 ~]# cp ks.cfg /var/ftp/pub/ [root@centos7 ~]# chmod +r /var/ftp/pub/ks.cfg
 

 

注釋:

(1)    initrd.img該文件可以在內存當中模擬文件系統

(2)    vmlinuz則是一個縮減版的內核文件擁有一些基本的網絡功能,可以控制客戶端進行下一步的從文件共享系統中下載真正的內核文件和驅動文件,最后真正的內核文件解壓進行接管上一個內核,開始進行軟件包的真正安裝等任務。

(3)    Pxelinux.0文件它可以解釋default文件中的每個配置項,並根據配置項做出不同的反應。如等待的時間、啟動器背景、啟動菜單、內核引導等等。

(4)    Vesamenu.c32和menu.c32是syslinux所擁有眾多模塊中的兩個,它們的功能是制定啟動器使用什么模式的背景。Vesamenu.c32圖形模式,menu.c32文本模式。使用時可以選擇一個,這里我選擇的是文本模式。

(5)    pxelinux.cfg目錄,pxelinux被執行后,它會掃描該目錄下是否存在指定的配置文件,如果存在,則引用被制定的配置文件。 

(6)    Default文件存放於pxelinux.cfg目錄中,pxelinux程序最后掃描的配置文件名就是default,所以,我們經常把啟動器配置項都寫入該文件中,default文件中第一行指定使用哪種形式的圖形化,menu.c32為字符圖形化,也可以使用圖形化的菜單vesamenu.c32。prompt和timeout指定超時時間,可以有多段,使用MENU TITLE 指定主標題,不同的安裝方式可以有不同LABEL,我這里有兩種,手動和自動,第一種為使用ks.cfg文件自動安裝,第二種使用手動方式安裝,記得ks.cfg文件的權限問題,對他人要有讀權限!

(7)    如果是多網卡的主機要在default文件的append傳遞啟動網卡是哪一個,不然會在開機啟動讓你選擇使用哪個網卡啟動,並且沒有默認,如:使用eth0啟動則向內核傳遞ksdevice=eth0參數。

 

四、測試安裝:

1. 在Vmware中建立一個空的虛擬機,設置開機啟動為網卡啟動:

wKiom1h-KeuxsN6dAABHeU2orOo116.png-wh_50

2.保存bios設置並開機測試:

wKioL1h-KgLj_SOjAABorgpc3PI935.png-wh_50

3.載入內核成功,能進入安裝界面自動安裝:

wKioL1h-KiPyjx4eAAB3jezzP_0272.png-wh_50

4.測試成功,大功告成!

 

 


原文鏈接:https://blog.51cto.com/jackcui/1892740


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM