本篇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目錄。
PXE Client向DHCP發送請求 PXE Client從本身的PXE網卡啓動,經過PXE BootROM(自啓動芯片)會以UDP(簡單用戶數據報協議)發送一個廣播請求,向本網絡中的DHCP服務器索取IP。
DHCP服務器提供信息 DHCP服務器收到客戶端的請求,驗證是否來至合法的PXE Client的請求,驗證經過它將給客戶端一個「提供」響應,這個「提供」響應中包含了爲客戶端分配的IP地址、pxelinux啓動程序(TFTP)位置,以及配置文件所在位置。
PXE客戶端請求下載啓動文件 客戶端收到服務器的「迴應」後,會迴應一個幀,以請求傳送啓動所需文件。這些啓動文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。
Boot Server響應客戶端請求並傳送文件 當服務器收到客戶端的請求後,他們之間以後將有更多的信息在客戶端與服務器之間做應答, 用以決定啓動參數。BootROM由TFTP通信協議從Boot Server下載啓動安裝程序所必須的文件(pxelinux.0、pxelinux.cfg/default)。default文件下載完成後,會根據該文件中定義的引導順序,啓動Linux安裝程序的引導內核。
請求下載自動應答文件 客戶端經過pxelinux.cfg/default文件成功的引導Linux安裝內核後,安裝程序首先必須肯定你經過什麼安裝介質來安裝linux,若是是經過網絡安裝(NFS, FTP, HTTP),則會在這個時候初始化網絡,並定位安裝源位置。接着會讀取default文件中指定的自動應答文件ks.cfg所在位置,根據該位置請求下載該文件。
客戶端安裝操做系統 將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工做流程圖:
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引用格式以下圖
針對集羣的計算節點設置的,好比設置用戶信息、關閉防火牆等,請根據本身須要定製,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驗證:
注:ks.cfg若不能正常打開,確認是否有讀權限
注: 若不能顯示以上鍊接方式,確認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
2、選擇開機啓動順序,選擇"Network boot from Intel E1000"
3、pxe client獲取dhcp地址後 ,獲取pxelinux.cfg中配置文件
4、加載內核和根文件系統
5、安裝networkmanager ,建立磁盤分區
6、檢查包依賴關係,並安裝程序。
7、完成安裝,重啓 ,進入登陸界面
至此,pxe 服務器端 部署完成 ,併成功自動化安裝pxeclient 端 。