1. 程式人生 > >[PXE] linux(centos)PXE服務器搭建,安裝,啟動及pxe協議詳解

[PXE] linux(centos)PXE服務器搭建,安裝,啟動及pxe協議詳解

delet 不依賴 ons cat dhcp服務器 ftp local 子網 toc


本章Blog相關Linux知識點


工作環境中,想要安裝Linux但是計算機沒有光驅,或者是有大批量的計算機需要同時安裝Linux,就需要通過部署環境PXE+DHCP+TFTP+HTTP+kickstart 方式來實現了 。


PXE是什麽:

PXE,預啟動執行環境(Preboot eXecution Environment,PXE,也被稱為預執行環境)提供了一種使用網絡接口(Network Interface)啟動計算機的機制。這種機制讓計算機的啟動可以不依賴本地數據存儲設備(如硬盤)或本地已安裝的操作系統。

PXE(Pre-boot Execution Environment)是由Intel設計的協議,它可以使計算機通過網絡啟動。協議分為client和server兩端,支持工作站通過網絡從遠端服務器下載映像,並由此支持來自網絡的操作系統的啟動過程,其啟動過程中,終端要求服務器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)協議下載一個啟動軟件包到本機內存中並執行,由這個啟動軟件包完成終端基本軟件設置,從而引導預先安裝在服務器中的終端操作系統。


PXE工作原理:

1.PXE client從自己的PXE網卡啟動,向本網絡中的DHCP服務器請求ip地址

2.DHCP服務器收到dhcp請求後,分配dhcp地址池中ip給PXE client

3.PXE client向本網絡中的TFTP服務器索取bootstarp文件

4.PXE client取得bootstarp文件後之執行pxelinux.0文件引導,使用pxelinux環境來引導os安裝程序。

5.PXE client然後讀取pxelinux.cfg文件夾中的default(isolinux.cfg)引導文件,通過TFTP服務器加載內核vmlinuz和根文件系統(boot.msg,vesamenu.c32,initrd.img,splash.jpg),通過http服務器加載ks.cfg引導文件。

6.啟動linux內核完成安裝

技術分享圖片

在上圖中,PXE client是需要安裝Linux的計算機,TFTP Server和DHCP Server運行部署在在PXE Server端。Bootstrap文件、配置文件、Linux內核以及Linux根文件系統都放置在Linux Server上TFTP服務器的根目錄下。


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工作流程圖:

技術分享圖片


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來定義

[root@PXE pxelinux.cfg]# vi /etc/dhcp/dhcpd.conf 
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#

# option definitions common to all supported networks...
option domain-name "itwish.cn";      # 全局定義域名
option domain-name-servers 192.168.4.150 ; # 全局定義dns 地址

default-lease-time 600;  # 全局定義默認租約期限
max-lease-time 7200;     # 全局定義最長租約期限

log-facility local7;  # 文件屬性

subnet NETWORK_ADDR  netmask  NETMASK {       # 定義子網 
    range 10.254.239.10 10.254.239.20;    # 分配地址池
    option routers dns1;      
    option domain-name-servers ns.itwish.cn;  
    option domain-name "internal.example.org";
    default-lease-time 600;    
    max-lease-time 7200;       
    range dynamic-bootp 10.254.239.40 10.254.239.60;    # 定義bootp
    option broadcast-address 10.254.239.31;         # 廣播地址
    next-server  192.168.4.100; # tftp服務器地址
    filename  "pxelinux.0";     # 告訴TFTP目錄下的bootstarp文件
}

host passacaglia {   # 主機定義
    hardware ethernet 0:0:c0:5d:bd:95;  # 物理地址
    filename "vmunix.passacaglia";
    server-name "toccata.fugue.com"; 
    fixed-address ip;  # 固定地址
}


  • 安裝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 ~]# cd /var/lib/tftpboot/

[root@PXE tftpboot]# mkdir pxelinux.cfg  

[root@PXE boot]# mount /dev/cdrom /media/  # 掛載光盤
mount: block device /dev/sr0 is write-protected, mounting read-only

[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      # 這個值是秒數的10倍,表示超時時間60s

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/


PXE環境HTTPD部署


創建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/anaconda.cfg 為模板,配置ks.cfg文件 ,配置repo url 和 ks.cfg url

[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@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

  • ks.cfg及repo驗證:

技術分享圖片

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

技術分享圖片

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

PXE環境測試,安裝


部署環境:vmware 虛擬機

PXE服務器: PXE, ip :192.168.4.150

PXE client : vm

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

技術分享圖片

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

技術分享圖片

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

技術分享圖片

技術分享圖片

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

技術分享圖片

技術分享圖片

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

技術分享圖片

技術分享圖片

技術分享圖片

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

技術分享圖片

技術分享圖片

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

技術分享圖片

技術分享圖片


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


[PXE] linux(centos)PXE服務器搭建,安裝,啟動及pxe協議詳解