PXE方式自動化部署安裝Linux

PXE

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

PXE當初是作爲Intel的有線管理體系的一部分,Intel 和 Systemsoft於1999年9月20日公佈其規格(版本2.1) [2]  。通過使用像網際協議(IP)、用戶數據報協議(UDP)、動態主機設定協定(DHCP)、小型文件傳輸協議(TFTP)等幾種網絡協議和全局唯一標識符(GUID)、通用網絡驅動接口(UNDI)、通用唯一識別碼(UUID)的概念並通過對客戶機(通過PXE自檢的電腦)固件擴展預設的API來實現目的。

PXE 協議大致上結合了DHCP和TFTP,雖然都有在兩者上面有改進。DHCP用於查找合適的啓動伺服器,TFTP用於下載初始引導程序和附加文件。

爲了開始一個PXE自檢會話,PXE固件廣播一個帶有明確的PXE選項DHCPDISCOVER包(擴展DHCPDISCOVER)到67/UDP端口(DHCP伺服器端口)。PXE選項是PXE固件有PXE能力的鑑定,但是會被一般的DHCP服務忽略。當固件受到從這樣的服務受到DHCPOFFER包時,它會通過要求其提供配置信息來自我配置。

DHCP代理

當 PXE 重定向服務 (DHCP代理) 收到一個 擴展DHCPDISCOVER 包時,它會通過發送一個帶有明確的PXE選項DHCPDISCOVER包到PXE客戶機的68/UDP端口 (DHCP 客戶機端口)來回答。 一個擴展DHCPDISCOVER包主要包含:

  1. 一個PXE發現控制領域,以決定是使用多播,廣播(網路)或單播來聯繫PXE啓動服務器。
  2. 一個列出可用的PXE啓動服務器類型的地址表。
  3. 一個代表每個一個PXE啓動服務器類型的條目單。
  4. 一個帶有帶有提示用戶按下哪一個鍵來看到啓動菜單的PXE啓動菜單。
  5. 一個超過多長時間就啓動第一啓動菜單的超時數值。

一個DHCP代理服務可能在相同的主機上運行一個標準的DHCP服務器。儘管兩個服務不可以共享67/UDP 端口,DHCP代理服務在4011/UDP 端口上運行,要求從客戶端來的DHCPDISCOVER 包變成DHCPREQUEST 包。標準DHCP服務在其發送的DHCPOFFER 包中加入特殊的PXE 選項組合,這樣PXE客戶端知道可以在同一個主機的 4011/UDP 端口找到一個DHCP代理服務。

網絡無人值守安裝

常見的Linux安裝方式有光盤安裝和U盤安裝兩種,如果我們有幾十臺甚至上百臺服務器需要統一部署上架,不論是光盤安裝還是U盤安裝,在生產環境中都需要一臺一臺的逐個安裝,即使你有足夠多的光驅並刻錄足夠多的光盤,你也會發現這是一個既耗時又耗力的苦差事。因此,我們就希望於使用一種可以批量化部署的方案,以此解決減少部署時間和部署負責度的問題。這種方法就是網絡無人值守安裝方案。網絡無人值守安裝就是通過網絡啓動時推送啓動或安裝選項,通過匹配被安裝服務器的網卡MAC地址段確認安裝源和安裝方式的一種技術集合,它不是一種技術而是多種技術組合完成的。
 

網絡無人值守安裝的流程簡介

1、DHCP:用以分配ip地址

2、預啓動施行環境(PXE):通過網卡引導計算機

3、PXELINUX:提供引導文件及內核等文件

4、kickstart文件:提供安裝介質

實驗環境:

服務端:192.168.10.2  需要XINETD、DHCP、TFTP、VSFTP、SYSLINUX等服務以及 Centos 安裝介質(這裏使用 Centos 7.5)

客戶端:需要支持PXE啓動模塊的網卡(這裏使用虛擬機代替)

注:服務端及客戶端防火牆、selinux均已關閉

首先在服務端安裝配置各類服務:

安裝VSFTP服務,將安裝光盤掛載至FTP共享目錄(這裏作爲實驗目的不復制文件,生產環境中要將文件複製到FTP共享目錄下):

啓動服務並驗證是否可以正常訪問:

安裝TFTP服務,並將安裝系統需要的引導文件複製到TFTP共享目錄下:

  • pxelinux.0:pxe引導程序(由syslinux程序提供)
  • pxelinux.cfg/default:系統啓動時的啓動菜單,指出要加載的內核鏡像和inird 鏡像,然後引導。
  • vmlinuz:Linux內核
  • initrd.img:初始化鏡像文件,存放了引導時的一些驅動程序

編輯 /var/lib/tftpboot/pxelinux.cfg/default 文件,更改首行 default linux   prompt 0 爲不提示用戶操作 

指明kickstart自動應答文件位置

安裝守護進程XINETD服務:

修改XINETD服務的TFTP配置文件並啓動服務:

安裝 DHCP 服務:

編輯 DHCP 配置文件:

啓動 DHCP 服務:

安裝 SYSLINUX 

編輯kickstart自動應答文件 /var/ftp/ks.cfg:


Kickstart文件中的主要項目及參數介紹:

每個項目都由關鍵字來識別;關鍵字可跟一個或多個參數;如果某選項後面跟隨了一個等號(=),它後面就必須指定一個值。

install  (可選)
    明確指定系統次次進行的是全新安裝系統;是默認項;

cdrom  (可選)
    以本地CD-ROM爲源安裝系統;

harddrive  (可選)
    以硬盤分區中包含的鏡像爲源(安裝樹)安裝新系統;當以該種方式安裝系統時,即使指定clearpart --all項,源所在分區也不會被重新抹去;
    --partition=    指定分區
    --dir=        指定包含鏡像的目錄
    例:
    harddrive  --partition=/dev/sdb2  --dir=/data/iso

nfs  (可選)
    指定從NFS服務器上獲取安裝樹;
    --server=    指定NFS服務器,主機名稱或IP
    --dir=        包含安裝樹的目錄
    --opts=        可以指定掛載NFS的目錄時的掛載選項
    例:
    nfs  --server=192.168.1.254  --dir=/data/iso

url  (可選)
    指定通過FTP或HTTP從網絡獲取安裝樹;
    --url    指定資源位置
    例:
    url  --url  ftp://<username>:<password>@install.example.com/iso
    url  --url  http://install.example.com/iso

bootloader (必需)
    設定boot loader安裝選項;
    --append=        可以指定內核參數
    --driveorder=    設定設備BIOS中的開機設備啓動順序
    --location=        設定引導記錄的位置; mbr:默認值;partition:將boot loader安裝於包含kernel的分區超級快中;none:不安裝boot loder。
    示例:
    bootloader  --location=mbr  --append=“rhgb quiet” --driveorder=sda,sdb
    
clearpart (可選)
    在建立新分區前清空系統上原有的分區表,默認不刪除分區;
    --all      擦除系統上原有所有分區;
    --drives    刪除指定驅動器上的分區
    --initlabel    初始化磁盤卷標爲系統架構的默認卷標
    --linux        擦除所有的linux分區
    --none(default)不移除任何分區
  例:
  clearpart  --drives=hda,hdb --all  --initlabel

zerombr  (可選)
    清除mbr信息,會同時清空系統用原有分區表

drivedisk (可選)
    如果使用特殊存儲方式時,需要指定驅動程序盤位置以便加載存儲驅動;
  1.  將驅動盤拷貝到本地硬盤某分區根目錄:
    drivedisk <partition> [ --type=<fstype> ]
  2.  也可以指定一個網絡位置加載驅動程序盤
    drivedisk  --source=ftp://path/to/drive.img
    drivedisk  --source=http://path/to/drive.img
    drivedisk  --source=nfs:host://path/to/drive.img

firewall (可選)
    配置系統防火牆選項;
    firewall –enable|--disable  [ --trust ] <device> [ --port= ]
    --enable        拒絕外部發起的任何主動連接;
    --disable        不配置任何iptables防禦規則;
    --trust        指定完全信任網卡設備;
    --port        使用port:protocol格式指定可以通過防火牆的服務;
    示例:
    firewall --enable --trust eth0  --trust eth1  --port=80:tcp

selinux (可選)
    設置系統selinux狀態;默認爲啓用並處於enforcing模式;
    selinux [ --disabled|–enforcing|--premissive ]

reboot (可選)
    在系統成功安裝完成後默認自動重啓系統(kickstart方法時);在收到你敢裝系統完成後,會提示按任意鍵進行重啓;
    在本文件中沒有明確指明其他方法時就默認完成方式爲reboot;
    使用 reboot 選項可能會導致安裝的死循環,這依賴於安裝介質和方法。需要特別注意;

halt  (可選)
    在系統成功安裝完成後關機;默認爲reboot;
    其他選項還有shutdown、poweroff,需要使用請自行參考官方文檔。

graphical (可選)
    默認值,在圖形模式下進行kickstart方式安裝;

text (可選)
    以文本方式進行kickstart安裝;默認爲圖形界面

key  (可選)
    設置一個安裝碼(installration number),用於獲取RedHat官方的支持服務;
    --skip    跳過key設置,不進行設置;如果不設置可能跳轉到交互模式讓用戶選取動作;

keyboard (必需)
    設置鍵盤類型;一般設置爲us;

lang (必需)
    設置安裝過程使用的語言及系統的缺省語言;文本模式安裝時可能不支持某些語言(中、韓...),所以可能仍以默認的英文方式安裝;默認en_us,裝中文時,需要後期%packages部分裝上中文支持組件;
    例:
    lang en_US
 
timezone (可選)
    設置系統的時區;
    timezone  [ --utc ]  <timezone>
    例:
    timezone  --utc  Asia/Shanghai

auth/authconfig  (必需)
    設置系統的認證方式;默認爲加密但不隱藏(shadow);
    --enablemd5    使用MD5加密方式
    --useshadow或—enableshadow    使用隱藏密碼;
    --enablenis=    使用NIS認證方式
    --nisdomain=    NIS域
    --nisserver=      NIS服務器
    還可以設置LDAP、SMB及Kerberos 5認證方式,詳細請參考官方文檔;
    例:
    authconfig  --useshadow  --enablemd5

    auth --enableshadow --passalgo=sha512

rootpw (必需)
    設置系統root賬號的密碼;
    rootpw [ --iscrypted ]  <passwd>
    --iscrypted    表示設置的密碼爲加密過的串;
    例:
    rootpw  pa4word
    rootpw --iscrypted  $1$RPYyxobb$/LtxMNLJC7euEARg2Vu2s1

network (可選)
    配置網絡信息;在網絡安裝(NFS/HTTP/FTP)時必須指定;
    --bootproto=dhcp|bootp|static    指定ip獲取方式,默認爲dhcp/bootp;
    --device=    設置安裝時激活來進行系統安裝的網卡設備;該參數只在kickstart文件爲本地文件時有效;若kickstart配置文件在網絡上,安裝程序會先初始化網卡然後去尋找kickstart文件;
    --ip=    ip設置
    --gateway=  網關
    --nameserver=  DNS設置
    --nodns        不設置DNS
    --netmask=  掩碼
    --hostname= 設置安裝後主機名稱
    --onboot=    設置是否在系統啓動時激活網卡
    --class=        設置DHCP的class值
    --noipv4        禁用該設備的ipv4功能
    --noipv6        禁用該設備的ipv6功能
    如將網絡模式設置爲靜態模式,則必須在一行內寫上ip,netmask、dns、gateway等信息;
    例:
    network –bootproto=static –ip=1.1.1.1 --metmask=255.0.0.0 --gateway=1.1.1.254 --nameserver=1.1.1.2
    netmask --bootproto=dhcp  --device=eth0

skipx (可選)
    如果該項存在,就不對系統的X進行設置;

xconfig (可選)
    配置X window ;如果不給出選項,在安裝過程中需要手動調整設置;當然不安裝X時不應該添加該項;
  --driver            爲顯卡設置X驅動
  --videoram=    設置顯卡的RAM大小
  --defaultdesktop=    設置GNOME/KDE作爲默認桌面;假定這兩個桌面環境在%packages例已經安裝
  --startxonboot  使用圖形界面登錄系統
  --resolution=    設置圖形界面的分辨率;可用值有640*480、800*600、1024*768等;確保設置指適合於顯示卡及顯示器;
  --depth=          設置顯示色深;可用值有8/16/24/32;確保設置值適合於顯示設備;
    例:
    xconfig    --startxonboot  --resolution=800*600 --depth=16

services (可選)
    設置禁用或允許列出的服務;
    --disabled 設置服務爲禁用
    --enabled  啓動服務
    例:
    services --disabled autid,cups,smartd,nfslock  服務之間用逗號隔開,不能有空格
    
iscsi(可選)
    指定額外的ISCSI設備;
    issci --ipaddr= ipaddr  [options].
      --target 
      --port= 
      --user= 
      --password=

part/partition  (install模式必須)

    clearpart --all --initlabel  清空分區表
    建立新分區;
    part  <mntpoint>|swap|pv.id|rdid.id  options
    mntpoint:掛載點,是在創建普通分區時指定新分區掛載位置的項;掛載點需要格式正確
    swap: 創建swap分區;
    raid.id:  表示創建的分區類型爲raid型;必須用id號進行唯一區別;
    pv.id:  表示所創建的分區類型爲LVM型;必須用唯一id號進行區別;
    --size=  設置分區的最小值,默認單位爲M,但是不能寫單位;
    --grow  讓分區自動增長利用可用的磁盤空間,或是增長到設置的maxsize值;
    --maxsize 設置分區自動增長(grow)時的最大容量值,以M爲單位,但不能寫單位;
    --onpart=/--usepart=    設置使用原有的分區;
    --noformat    設置不格式化指定的分區,在跟—onpart一同使用時,可以避免刪除原有分區上的數據,在新安裝的系統中保留使用數據;
    --asprimary    強制制定該分區爲主分區;若指定失敗,分區會失敗,導致安裝停止;
    --fstype=    新增普通分區時指定分區的類型,可以爲ext2、ext3、ext4、swap、vfat及hfs;
    --ondisk=/--ondrive=    設定該分區創建在一個具體的磁盤上;
    --start  指定分區以磁盤上那個磁道開始;需要跟--ondisk參數一塊使用;
    --end    指定分區以磁盤上那個磁道結束;需要跟上述兩個參數一起使用;
    --recommended:讓系統自行決定分區的大小;在創建swap分區時,若RAM<2G,則分區大小爲2*RAM;若RAM>=2G時,分區大小爲RAM+2G;
    --bytes-pre-inode=    指定分區格式化時inode的大小;默認值爲4096
    --fsoptions=    指定創建fstab文件時該分區掛載參數項;
    例:
    part  /boot  --fstype=“ext3” --size=100
    part  swap  --fstype=“swap” –size=512  
    part  /  --bytes-pre-inode=4096  --fstype=“ext4”--size=10000
    part  /data    --onpart=/dev/sdb1  --noformat
    part  raid.100  --size=2000
    part  pv.100    --size=1000

raid  (可選)
    設置RAID。
    raid 掛載點  --level=<level>  --device=<mddevices_name>  <raid組成分區>
    掛載點:    選取根/時,注意儘量避免/boot在RAID內,除非爲RAID1;
    --level=    設置RAID級別
    --device=  RAID設備名稱,如md0,md1...
    --byte-pre-inode=    設置該RAID分區上inode大小;若分區文件系統類型不支持該參數,會靜默忽略參數;
    --spares=  設置RAID的熱備盤
    --fstype=  設置文件系統類型
    --fsoptions=  設置掛載該文件系統時自定義的一些參數,參數寫入fstab文件;
    --useexisting  使用現有的RAID設備並且重新格式化原設備
    --noformat    在使用現有的RAID設備時不格式化原有RAID設備
    例:完整創建一個RAID1設備示例;
    part  raid.10  --size=1000  --ondisk=/dev/sdb
    part  raid.11  --size=1000  --ondisk=/dev/sdc
    raid  /data  --level=1  --device=md0  raid.10  raid.11

volgroup  (可選)
    創建一個LVM卷組VG;
    volgroup  vg_name  partition  [options]
    --useexiting  使用現有的VG並且重新格式化
    --noformat    使用現有的VG時不做格式化
    --pesize          設置PE(physical extents)塊大小
    例:
    part pv.11  --size=2000
    volgroup  myvg  pv.11

logvol  (可選)
    創建一個LVM邏輯卷LV;
    logvel  mnt_point  --vgname=vg_name  --size=lv_size  --name=lv_name  [options]
    --useexiting  使用現有的LV並且重新格式化
    --noformat  使用現有的LV時不做格式化
    --fstype=      指定RAID分區類型
    --fsoptions=  設置掛載該文件系統時自定義的一些參數,參數寫入fstab文件;
    --byte-pre-inode=    設置該RAID分區上inode大小;
    --precent=    設定LV大小爲VG可用空間的比例;
    例:
    part pv.20  --size=5000
    volgroup  myvg  pv.20
    logvol    /data  --vgname=myvg  --size=3000  --name=mydata

安裝程序包組和程序包,@程序包組名稱,具體名稱可以查看安裝光盤中repodata目錄下的以-comps.xml結尾的文件,其中id標籤內的名稱即爲程序包組名稱

%packages

@base

@chinese-support

@core

@desktop-platform

@development

@server-platform

@server-platform-devel

@server-policy

@workstation-policy

@x11

cronie

lftp

ntpdate

screen

tree

vim-enhanced

wget

%end


重新啓動 VSFTP 服務並驗證 ks.cfg 文件是否可以正常訪問:

 

新建一個虛擬機,設置網絡爲 vmnet1 僅主機模式,停止VMnetDHCP服務:

啓動虛擬機:

 

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