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

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


PXE環境概述linux


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

  • 批量裝機軟件介紹
    express

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

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

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

  • 什麼是PXEbash

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段:

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

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

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

    四、主機配置段: 使用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文件方式:

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

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

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

kickstat文件的組成部分 :

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

    二、軟件包段%packages;指定要安裝的程序包組(@組包名)及程序包(程序包名),每行一個 ;在程序包以前加 「-」號,表示不但願安裝

    三、%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  

實驗:

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

image.png    

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

    image.png

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

    image.png

    image.png

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

    image.png

    image.png

5、安裝networkmanager ,建立磁盤分區

    image.png 

    image.png

    image.png

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

    image.png

    image.png        

7、完成安裝,重啓 ,進入登陸界面

    image.png

    image.png


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

相關文章
相關標籤/搜索