[PXE] Linux(centos6)中PXE 服務器搭建,PXE安裝、啓動及PXE理論詳解

本篇blog主要講述了[PXE] linux(centos)PXE無盤服務器搭建,安裝,啓動及pxe協議詳解 , Kickstart (PXE+DHCP+TFTP+HTTP)。


PXE環境概述


作爲中小公司的運維,經常會遇到一些機械式的重複工作。如何進行批量一次大批量部署服務器安裝?方法: Kickstart (PXE+DHCP+TFTP+HTTP)  或  Cobbler

  • 批量裝機軟件介紹

Redhat系通主要有兩種方式:Kickstart和Cobbler。

Kickstart是一種無人值守的安裝方式。它的工作原理是在安裝過程中記錄人工干預填寫的各種參數,並生成一個名爲ks.cfg的文件。如果在自動安裝過程中出現要填寫參數的情況,安裝程序首先會去查找ks.cfg文件,如果找到合適的參數,就採用所找到的參數;如果沒有找到合適的參數,便會彈出對話框讓安裝者手工填寫。所以,如果ks.cfg文件涵蓋了安裝過程中所有需要填寫的參數,那麼安裝者完全可以只告訴安裝程序從何處下載ks.cfg文件。等安裝完畢,安裝程序會根據ks.cfg中的設置重啓/關閉系統,並結束安裝。

Cobbler集中和簡化了通過網絡安裝操作系統需要使用到的DHCP、TFTP和DNS服務的配置。Cobbler不僅有一個命令行界面,還提供了一個Web界面,大大降低了使用者的入門水平。Cobbler內置了一個輕量級配置管理系統,但它也支持和其它配置管理系統集成。

  • 什麼是PXE

PXE,全名Pre-boot Execution Environment,預啓動執行環境;簡單的說,Cobbler是對kickstart的封裝,簡化安裝步驟、使用流程,並降低使用者的門檻。而kickstart實現方式依賴於PXE環境。通過網絡接口啓動計算機,不依賴本地存儲設備(如硬盤)或本地已安裝的操作系統;由Intel和Systemsoft公司於1999年9月20日公佈的技術;運行在Client/Server的工作模式;   PXE客戶端會調用網際協議(IP)、用戶數據報協議(UDP)、動態主機設定協議(DHCP)、小型文件傳輸協議(TFTP)等網絡協議;PXE客戶端(client)這個術語是指機器在PXE啓動過程中的角色。一個PXE客戶端可以是一臺服務器、筆記本電腦或者其他裝有PXE啓動代碼的機器(我們電腦的網卡)。

  • PXE工作流程圖

PXE client是需要安裝Linux的計算機,TFTP Server、DHCP Server及HTTPD Server部署在在PXE Server端。Bootstrap文件、配置文件以及Linux根文件系統都放置在Linux Server上TFTP服務器的根目錄下,而ks.cfg 及 系統內核部署在HTTPD server目錄。

    image.png

  1. PXE Client向DHCP發送請求 PXE Client從自己的PXE網卡啓動,通過PXE BootROM(自啓動芯片)會以UDP(簡單用戶數據報協議)發送一個廣播請求,向本網絡中的DHCP服務器索取IP。

  2. DHCP服務器提供信息 DHCP服務器收到客戶端的請求,驗證是否來至合法的PXE Client的請求,驗證通過它將給客戶端一個“提供”響應,這個“提供”響應中包含了爲客戶端分配的IP地址、pxelinux啓動程序(TFTP)位置,以及配置文件所在位置。

  3. PXE客戶端請求下載啓動文件 客戶端收到服務器的“迴應”後,會迴應一個幀,以請求傳送啓動所需文件。這些啓動文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。

  4. Boot Server響應客戶端請求並傳送文件 當服務器收到客戶端的請求後,他們之間之後將有更多的信息在客戶端與服務器之間作應答, 用以決定啓動參數。BootROM由TFTP通訊協議從Boot Server下載啓動安裝程序所必須的文件(pxelinux.0、pxelinux.cfg/default)。default文件下載完成後,會根據該文件中定義的引導順序,啓動Linux安裝程序的引導內核。

  5. 請求下載自動應答文件 客戶端通過pxelinux.cfg/default文件成功的引導Linux安裝內核後,安裝程序首先必須確定你通過什麼安裝介質來安裝linux,如果是通過網絡安裝(NFS, FTP, HTTP),則會在這個時候初始化網絡,並定位安裝源位置。接着會讀取default文件中指定的自動應答文件ks.cfg所在位置,根據該位置請求下載該文件。

  6. 客戶端安裝操作系統 將ks.cfg文件下載回來後,通過該文件找到OS Server,並按照該文件的配置請求下載安裝過程需要的軟件包。 OS Server和客戶端建立連接後,將開始傳輸軟件包,客戶端將開始安裝操作系統。安裝完成後,將提示重新引導計算機。   

  • PXE必要條件

1.pxe client必須支持pxe用戶端功能,並且開機時選擇網絡啓動,這樣系統才能以網絡的方式進入pxe啓動程序

2.pxe服務器必須至少提供DHCP及TFTP的服務才行,且其中

    DHCP服務器必須能夠除未pxe client分配ip地址外,還需告知tftp所在的位置(即pxelinux.0的文件位置)

    TFTP服務器則爲pxe client 提供bootloader 及 kernel 等重要文件下載服務

3.使用NFS/HTTP/FTP之一的服務器提供pxe client所需程序及軟件來源等通訊協議

  • PXE工作流程圖:

    image.png

PXE環境安裝DHCP


動態主機設置協議(Dynamic Host Configuration Protocol,DHCP)是一種使網絡管理員能夠集中管理和自動分配IP網絡地址的通信協議,使用UDP協議工作,DHCP使用統一端口作爲BOOTP:服務器端使用67/udp,客戶端使用68/udp。主要有兩個用途:用於內部網絡或網絡服務供應商自動分配IP地址給用戶;用於內部網絡管理員作爲對所有電腦作中央管理的手段。

DHCP協議的工作流程:

    客戶端在局域網廣播DHCPDISCOVER報文,請求獲得ip地址、網關、dns地址 等信息;DHCP服務器收到DHCPDISCOVER報文後 ,發送DHCPOFFER 報文進行響應 ;客戶端收到DHCPOFFER報文後,發送DHCPREQUEST 報文進行請求 ;最終DHCP 服務器發送 DHCPACK報文進行確認 。

DHCP配置文件dhcp.conf 分爲4段:

    1、DHCP屬性段: log-facility  定義日誌等級

    2、全局屬性段: 使用option 關鍵字定義

    3、子網分配段: 使用subnet  來定義          

    4、主機配置段: 使用host來定義 

  • 安裝DHCP:

[root@PXE ~]# yum install dhcp   # 安裝dhcp server

[root@PXE ~]# rpm -ql dhcp
/etc/dhcp
/etc/dhcp/dhcpd.conf   # dhcpd配置文件
/etc/rc.d/init.d/dhcpd   # dhcpd啓動文件
/usr/sbin/dhcpd   # 啓動腳本配置文件
[root@PXE pxelinux.cfg]# vi /etc/dhcp/dhcpd.conf   # 調整配置文件
# dhcpd.conf
#
option domain-name "itwish.cn";
option domain-name-servers 192.168.4.150 ;

default-lease-time 600;
max-lease-time 7200;

log-facility local7;  

subnet 192.168.4.0 netmask 255.255.255.0 {  # 定義子網
  range 192.168.4.10 192.168.4.100;
  option routers 192.168.4.1;
  next-server 192.168.4.150;    # 注:添加 tftp服務器地址
  filename="pxelinux.0";        #注:告訴TFTP目錄下的bootstarp文件
}


#注:配置文件中以";" 號結尾 ,且需添加next-server 和filename 項
  •  啓動dhcp並驗證dhcpd進程是否處於監聽狀態:

[root@PXE ~]# chkconfig --add dhcpd

[root@PXE ~]# chkconfig dhcpd on

[root@PXE ~]# service dhcpd start
Starting dhcpd:                                            [  OK  ]

[root@PXE ~]# ps aux | grep dhcpd     # 驗證dhcpd 啓動
dhcpd     14087  0.0  0.1  48324  3572 ?        Ss   03:13   0:00 /usr/sbin/dhcpd -user dhcpd -group dhcpd
root      14108  0.0  0.0 103272   840 pts/0    S+   03:14   0:00 grep dhcpd

[root@PXE ~]# ss -tunl | grep 67
udp    UNCONN     0      0                      *:67                    *:*

    

PXE 環境安裝 TFTP


簡單文件傳輸協議也稱小型文件傳輸協議(Trivial File Transfer Protocol, TFTP),工作在UDP/69 端口,是一種於1981年在RFC 783中定義的簡化的文件傳輸協議(FTP)。

瞬時(非獨立)守護進程:他們無需定義在運行級別下,只需要一次性的定義xinetd的運行級別

    xinetd——爲那些極少接受用戶請求的服務,專門提供監聽功能,如 監聽tftpd進程

    獨立(standlone)守護進程 :能自我管理,無須xinet 提供監聽服務的進程

  • 安裝TFTP:

[root@PXE ~]# yum install xinetd tftp-server

[root@PXE ~]# rpm -ql tftp-server  
/etc/xinetd.d/tftp    # 配置文件路徑
/var/lib/tftpboot    # 默認tftp存儲目錄

[root@PXE ~]# vi /etc/xinetd.d/tftp 
# default: off    
service tftp
{
        disable = no    # no 表明tftp處於啓用狀態 ,yes 表示tftp處於禁用狀態
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot # 默認tftp存儲目錄
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}
[root@PXE ~]# chkconfig xinetd on

[root@PXE ~]# chkconfig tftp on

[root@PXE ~]# service xinetd start
Starting xinetd: 

[root@PXE ~]# ss -tunl | grep 69
udp    UNCONN     0      0                      *:69                    *:*

  • 使用 syslinux 提供的bootstart :

[root@PXE ~]# yum install syslinux

[root@PXE ~]# rpm -ql syslinux
/usr/share/syslinux   # pxelinux.0 文件存儲目錄

[root@PXE ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/  
# 複製pxelinux.0到 /var/lib/tftpboot 目錄 

[root@PXE boot]# mount /dev/cdrom /media/  # 掛載光盤
mount: block device /dev/sr0 is write-protected, mounting read-only
  • 配置pxelinux.cfg 文件

[root@PXE  ~]# mkdir /var/lib/tftpboot/pxelinux.cfg    # 創建pxelinux.cfg 文件夾
[root@PXE ~]# cp isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default  
# 把isolinux.cfg引導文件拷貝到tftpd存儲目錄下的pxelinux.cfg文件中,並命名爲default

[root@PXE ~]# vi /var/lib/tftpboot/pxelinux.cfg/default   # 修改linux內核引導文件
default vesamenu.c32     # 默認啓動界面,該文件需要拷貝到tftp存儲目錄中。
#prompt 1
timeout 600      # 倒計時 600就是60 秒,改數字爲秒數的10倍

display boot.msg  # 將額外信息寫入到boot.msg文件中,該文件需要拷貝到tftp存儲目錄中。

menu background splash.jpg   # 菜單背景圖,該文件需要拷貝到tftp存儲目錄中。
menu title Welcome to CentOS 6.6!   # 菜單主標題

label linux
  menu label ^Install or upgrade an PXE system    #菜單項目
  menu default            # 預設項目
  kernel vmlinuz          # 內核 vmlinuz,該文件需要拷貝到tftp存儲目錄中。
  append initrd=initrd.img  ks=http://192.168.4.150/ks.cfg   
# 核心參數,指定initrd 核心文件,該文件需要拷貝到tftp存儲目錄中。另指定ks文件目錄,這兒使用的http協議
  • 把內核及根文件拷貝到tftpd存儲目錄 :參照上菜單配置信息,包括 vesamenu.c32,boot.msg,splash.jpg,vmlinuz,initrd.img 文件做拷貝

[root@PXE ~]# cp /media/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/   

[root@PXE ~]# cp /media/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/


linux PXE環境HTTP部署


創建kickstart文件方式:

    1、複製模板 /root/anaconda-ks.cfg ,而後使用vim編輯配置

    2、使用system-config-kickstart 來生成,建議也使用/root/anaconda-ks.cfg 作爲模板來進行

    # ksvalidator   查看ks文件語法是否正確    

kickstat文件的組成部分 :

    1、命令段: 用於配置系統 ,如:install ,firewall, part,lv 等

    2、軟件包段%packages;指定要安裝的程序包組(@組包名)及程序包(程序包名),每行一個 ;在程序包之前加 “-”號,表示不希望安裝

    3、%pre %post腳本段:安裝過程開始之前、後執行的安裝預備式腳本

  • httpd安裝:  

[root@PXE ~]# yum install httpd

[root@PXE ~]# rpm -ql httpd
/etc/httpd    
/etc/httpd/conf/httpd.conf   # httpd 配置文件
/var/www/html     # httpd 默認存儲目錄

[root@PXE ~]# chkconfig httpd on

[root@PXE ~]# service httpd start
Starting httpd: 

[root@PXE ~]# ss -tunl |grep 80
tcp    LISTEN     0      128                   :::80                   :::*     

[root@PXE ~]# ps aux | grep httpd
root       1877  0.0  3.3 479948 20284 ?        Ss   08:20   0:01 /usr/sbin/httpd
apache     2184  0.0  1.6 480084  9908 ?        S    09:07   0:00 /usr/sbin/httpd
apache     2185  0.0  1.6 480084  9884 ?        S    09:07   0:00 /usr/sbin/httpd
apache     2188  0.0  1.6 480084  9884 ?        S    09:07   0:00 /usr/sbin/httpd
apache     2189  0.0  1.6 480084  9884 ?        S    09:07   0:00 /usr/sbin/httpd
apache     2190  0.0  1.6 480084  9884 ?        S    09:07   0:00 /usr/sbin/httpd
apache     2191  0.0  1.6 480084  9884 ?        S    09:07   0:00 /usr/sbin/httpd
apache     2192  0.0  1.6 480084  9884 ?        S    09:07   0:00 /usr/sbin/httpd
apache     2193  0.0  1.6 480084  9884 ?        S    09:07   0:00 /usr/sbin/httpd
root       3116  0.0  0.1 103324   844 pts/0    S+   19:48   0:00 grep httpd

[root@PXE ~]# cp /root/anaconda-ks.cfg /var/www/html/ks.cfg    # 拷貝模板到/var/www/html 目錄,並重命名爲ks.cfg

[root@PXE ~]# chmod o+r /var/www/html/ks.cfg    # 分配權限,爲pxe client引導安裝使用

[root@PXE isolinux]# cp /media/* /var/www/html/centos/os/    # 拷貝安裝系統

[root@PXE os]# grub-crypt     # 密碼加密,使用grub-crypt 默認512位加密方式
Password: 
Retype password: 
$6$DnceMH60Kiu8TaME$ySd/QOpPtEcLnnoW36bDjb59xr1eJHGUwTTV/4MHoojT.RoXXdsLHMWJXcLCETQNRF2xITSqKHAAUNZq6df0i/
  • 以/root/anaconda.cfg 爲模板,配置ks.cfg文件 ,配置repo url 和 ks.cfg 。

repo引用格式如下圖

    image.png

    針對集羣的計算節點設置的,比如設置用戶信息、關閉防火牆等,請根據自己需要定製,kickstart文件說明參見:https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/6/html/installation_guide/s1-kickstart2-options 

[root@PXE ~]# vi /var/www/html/ks.cfg     # 調整配置文件
# Kickstart file automatically generated by anaconda.

#version=DEVEL
install                                           # 命令段  ,安裝
url --url=http://192.168.4.150/centos/os/        # 指定網絡url安裝目錄 
lang en_US.UTF-8                                 # 默認字體
keyboard us                                      # 鍵盤類型
network --onboot yes --device eth0 --bootproto dhcp  --noipv6  
# 指定開機自啓,網絡接口eth0 ,dhcp獲取網絡地址,ipv6 禁用

rootpw  --iscrypted $6$ZOGP2tA0PI/6SI/X$MlC5bJyXfP9TBN5/0vwoc6dqAqIijOQthEbAZUnIXft85Tj9n4sKWB2PfxrsVfkZ2ibqX63apu8ElmdEvBo9o/   
# root 加密密碼,使用grub-crypt 生成的字符串替代

reboot         # 配置完畢後,重啓內核
firewall --disabled    # 防火牆禁用
authconfig --enableshadow --passalgo=sha512  # 登錄身份使用 sha1 的 512bits 加密算法
selinux --disabled     # selinux 功能禁用
timezone Asia/Shanghai # 定義上海時區 
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"   
# 定義bootloader,grub安裝mbr ,安裝在sda磁盤

# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
clearpart --all         # 清除磁盤分區表
text                     # 純文本格式安裝顯示
zerombr                  # 對磁盤進行初始化

part /boot --fstype=ext4 --asprimary --size=2000  # 分區信息 ,定義boot分區 ,格式爲ext4 ,大小爲2G
part swap --size=4096          # 分區信息 ,定義swap分區 ,大小爲4G
part pv.008003  --size=80000  # 分區信息 ,定義lv分區 pv.008003,大小爲80G

volgroup vg0 --pesize=8192 pv.008003   # 分區信息 ,在lv分區pv.008003定義vg0卷組 ,pe大小爲8M
logvol / --fstype=ext4 --name=root --vgname=vg0 --size=15000
logvol /usr --fstype=ext4 --name=/usr --vgname=vg0 --size=30000
logvol /var --fstype=ext4 --name=/var --vgname=vg0 --size=20000
logvol /home --fstype=ext4 --name=/home --vgname=vg0 --size=12000

repo --name="CentOS-6.6"  --baseurl=http://192.168.4.150/centos/os/  --cost=100  
# 定義yum倉庫 ,類別爲bashurl ,名稱爲CentOS-6.6

%packages             # 包組段,安裝包組及程序包
@core                 
@server-policy            
@workstation-policy
%end

[root@PXE ~]# yum -y install pykickstart  #安裝ksvalidator 軟件

[root@PXE ~]# ksvalidator /var/www/html/ks.cfg    # ksvalidator驗證ks.cfg語法是否正確
  • ks.cfg及repo驗證:

    image.png

    注:ks.cfg若不能正常打開,確認是否有讀權限

    image.png

    注: 若不能顯示以上連接方式,確認httpd配置文件中,是否開啓相關選項。

至此,PXE服務器環境部署完成,出現問題時,一般需要查看系統日誌,如:/var/log/messages, 通過日誌報錯信息進行解決 。  


Centos PXE環境測試,安裝,啓動


部署環境:vmware 虛擬機

    PXE服務器:  PXE, ip :192.168.4.150

    PXE client :    vm  

實驗:

一、配置PXE client 客戶端 ,網絡需與PXE服務器處於同一網段 192.168.4.150 /24

image.png    

二、選擇開機啓動順序,選擇"Network boot from Intel E1000"

    image.png

三、pxe client獲取dhcp地址後 ,獲取pxelinux.cfg中配置文件

    image.png

    image.png

四、加載內核和根文件系統

    image.png

    image.png

五、安裝networkmanager ,創建磁盤分區

    image.png 

    image.png

    image.png

六、檢查包依賴關係,並安裝程序。

    image.png

    image.png        

七、完成安裝,重啓 ,進入登錄界面

    image.png

    image.png


至此,pxe 服務器端 部署完成 ,併成功自動化安裝pxeclient 端 。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章