季城希,甜橙金融運維工程師,多年IDC運維經(jīng)驗。擅長IDC中服務器批量高效快速集成交付,精通各品牌型號服務器硬件產(chǎn)品及維護。
一、前言
為啥要用無人值守安裝系統(tǒng)?很簡單的答案,就是方便日常工作。
常規(guī)裝系統(tǒng)的辦法有哪些?
光盤安裝系統(tǒng):一個服務器DVD內(nèi)置光驅(qū)百千塊,百臺服務器都配光驅(qū)就浪費了,因為一臺服務器也就開始裝系統(tǒng)能用的上,以后用的機會屈指可數(shù)。
U盤安裝系統(tǒng):還是同樣的問題,要一臺一臺服務器插U盤。
網(wǎng)絡安裝系統(tǒng)(ftp,http,nfs) :只要服務器能聯(lián)網(wǎng)就可以裝系統(tǒng)了,但還是需要一臺臺服務器去敲鍵盤點鼠標。
無人值守安裝系統(tǒng)好處都有啥?
對于個人:裝系統(tǒng)大部分時間都浪費于下一步、下一步等操作,浪費了寶貴的時間。
對于行業(yè):自打若干年前Red Hat推出了Kickstart,此后我們搞服務器的運維頓覺身價倍增。不再需要刻了光盤一臺一臺地安裝Linux,只要搞定PXE、DHCP、TFTP,還有那滿屏眼花繚亂不知所云的Kickstart腳本,瞬間安裝上百臺服務器。
二、PXE
PXE(preboot execute environment,預啟動執(zhí)行環(huán)境)是由Intel公司開發(fā)的最新技術(shù),工作于Client/Server的網(wǎng)絡模式,支持工作站通過網(wǎng)絡從遠端服務器下載映像,并由此支持通過網(wǎng)絡啟動操作系統(tǒng)。
在啟動過程中,終端要求服務器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)協(xié)議下載一個啟動軟件包到本機內(nèi)存中執(zhí)行,由這個啟動軟件包完成終端(客戶端)基本軟件設置,從而引導預先安裝在服務器中的終端操作系統(tǒng)。
PXE可以引導多種操作系統(tǒng),如:Windows95 / 98 / 2000 / windows2003 / windows2008 / winXP / win7 / win8,Linux系列系統(tǒng)等。
嚴格來說,PXE并不是一種安裝方式,而是一種引導方式。進行PXE安裝的必要條件是在要安裝的計算機中必須包含一個PXE支持的網(wǎng)卡(NIC),即網(wǎng)卡中必須要有PXE Client。
PXE協(xié)議可以使計算機通過網(wǎng)絡啟動。此協(xié)議分為Client端和Server 端,而PXE Client則在網(wǎng)卡的ROM中。
當計算機引導時,BIOS把PXE Client調(diào)入內(nèi)存中執(zhí)行,然后由PXE Client將放置在遠端的文件通過網(wǎng)絡下載到本地運行。
運行PXE協(xié)議需要設置DHCP服務器和TFTP服務器。DHCP服務器會給PXE Client(將要安裝系統(tǒng)的主機)分配一個IP地址,由于是給PXE Client分配IP地址,所以在配置DHCP服務器時需要增加相應的PXE設置。
此外,在PXE Client的ROM中,已經(jīng)存在了TFTP Client,那么它就可以通過TFTP協(xié)議到TFTP Server上下載所需的文件了。
PXE工作流程
1、PXE Client向DHCP發(fā)送請求
當計算機開機時第一次登錄網(wǎng)絡的時候,發(fā)現(xiàn)本機上沒有任何IP地址設定。PXE Client會從自己的PXE網(wǎng)卡啟動,通過PXE BootROM(自啟動芯片)會以UDP(簡單用戶數(shù)據(jù)報協(xié)議)發(fā)送一個廣播請求,源IP地址是0.0.0.0,發(fā)送DHCP discover發(fā)現(xiàn)信息來尋找DHCP服務器,即向目標IP地址是255.255.255.255發(fā)送特定的廣播信息。
網(wǎng)絡上每一臺安裝了TCP/IP協(xié)議的主機都會接收到這個廣播信息,但只有DHCP服務器才會做出響應。
2、DHCP服務器提供信息
DHCP服務器收到客戶端的請求,驗證是否來至合法的PXE Client的請求,驗證通過它將給客戶端一個“提供”響應,這個“提供”響應中包含了為客戶端分配的IP地址和其他設置的DHCP offer信息。
DHCP offer提供信息包括pxelinux啟動程序(TFTP)位置,以及PXE配置文件所在位置(該文件一般是放在一臺TFTP服務器上)。
3、DHCP客戶機接收IP和服務器的互動
DHCP客戶端接受到DHCP offer提供信息之后,選擇第一個接收到的提供信息,然后以廣播的方式回答一個DHCP request請求信息,該信息包含向它所選定的DHCP服務器請求IP地址的內(nèi)容。
當DHCP服務器收到DHCP客戶端回答的DHCP request請求信息之后,便向DHCP客戶端發(fā)送一個包含它所提供的IP地址和其他設置的DHCP ack確認信息,告訴DHCP客戶端可以使用它提供的IP地址。
然后,DHCP客戶機便將其TCP/IP協(xié)議與網(wǎng)卡綁定。
另外,除了DHCP客戶機選中的服務器外,其他的DHCP服務器將收回曾經(jīng)提供的IP地址。這是第一次初始化網(wǎng)絡。
4、PXE客戶端請求下載啟動文件
客戶端收到服務器的“回應”后,會回應一個幀,以請求傳送啟動所需文件。這些啟動文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。
5、Boot Server響應客戶端請求并傳送文件
當服務器收到客戶端的請求后,他們之間之后將有更多的信息在客戶端與服務器之間作應答,用以決定啟動參數(shù)。BootROM由TFTP通訊協(xié)議從Boot Server下載啟動安裝程序所必須的文件(pxelinux.0、pxelinux.cfg/default)??蛻舳巳〉胮xelinux.0 文件后之執(zhí)行該文件,向服務器請求下載pxelinux.cfg文件。客戶端pxelinux.cfg配置文件后,請求vmlinuz文件和initrd.img文件,會根據(jù)該文件中定義的引導順序,啟動Linux安裝程序的引導內(nèi)核。
pxeliunx.0:網(wǎng)絡引導程序pxe文件
pxelinux.cfg/default:指定鏡像的位置或ks文件位置
vmlinuz:引導內(nèi)核
initrd.img:小型的linux操作系統(tǒng),類似于windows的PE
6、請求下載自動應答文件
客戶端通過pxelinux.cfg/default文件成功的引導Linux安裝內(nèi)核后,安裝程序首先必須確定你通 過什么安裝介質(zhì)來安裝Linux,如果是通過網(wǎng)絡安裝(NFS, FTP, HTTP),則會在這個時候初始化網(wǎng)絡(這是第二次初始化網(wǎng)絡),并定位安裝源位置。
接著會讀取default文件中指定的自動應答文件ks.cfg所在位置,根據(jù)該位置請求下載該文件。
PXE獲取的是安裝用的內(nèi)核以及安裝程序等,而安裝程序要獲取的是安裝系統(tǒng)所需的二進制包以及配置文件PXE模塊和安裝程序是相對獨立的,PXE的網(wǎng)絡配置并不能傳遞給安裝程序,從而進行兩次獲取IP地址過程,但IP地址在DHCP的租期內(nèi)是一樣的。
7、客戶端安裝操作系統(tǒng)
將ks.cfg文件下載回來后,通過該文件找到OS Server,并按照該文件的配置請求下載安裝過程需要的軟件包。OS Server和客戶端建立連接后,將開始傳輸軟件包,客戶端將開始安裝操作系統(tǒng)。
安裝完成后,將提示重新引導計算機。
三、Kickstart
Kickstart工作原理
Kickstart是一種無人值守的安裝方式。它的工作原理是在安裝過程中記錄人工干預填寫的各種參數(shù),并生成一個名為ks.cfg的文件。
如果在自動安裝過程中出現(xiàn)要填寫參數(shù)的情況,安裝程序首先會去查找ks.cfg文件,如果找到合適的參數(shù),就采用所找到的參數(shù);如果沒有找到合適的參數(shù),便會彈出對話框讓安裝者手工填寫。
所以,如果ks.cfg文件涵蓋了安裝過程中所有需要填寫的參數(shù),那么安裝者完全可以只告訴安裝程序從何處下載ks.cfg文件,然后就去忙自己的事情。
等安裝完畢,安裝程序會根據(jù)ks.cfg中的設置重啟/關(guān)閉系統(tǒng),并結(jié)束安裝。
四、搭建PXE+Kickstart環(huán)境
安裝DHCP、TFTP-Server、HTTP
安裝dhcp、tftp-server、httpd
[root@localhost ~]# yum install dhcp xinetd tftp-server httpd -y
tftp-server被xinted所管理,所以需要安裝xinetd來管理啟動tftp-server
DHCP
DHCP概念
DHCP是一個局域網(wǎng)的網(wǎng)絡協(xié)議,使用UDP協(xié)議工作,主要有兩個用途:給內(nèi)部網(wǎng)絡或網(wǎng)絡服務供應商自動分配IP地址,給用戶或者內(nèi)部網(wǎng)絡管理員作為對所有計算機作中央管理的手段。
所有客戶機的IP地址設定資料都由DHCP服務器集中管理,并負責處理客戶端的DHCP請求;而客戶端則會使用從服務器分配下來的IP地址。
在此不詳細闡述DHCP工作原理,若想了解可參考:https://www.cnblogs.com/wajika/p/6537085.html
DHCP服務器IP分配方式
主要提供三種IP分配方式:
自動分配(Automatic Allocation),當DHCP客戶端第一次成功地從DHCP服務器端分配到一個IP地址之后,就永遠使用這個地址。
動態(tài)分配(Dynamic Allocation),當DHCP客戶端第一次從DHCP服務器分配到IP地址后,并非永久地使用該地址,每次使用完后,DHCP客戶端就得釋放這個IP地址,以給其他客戶端使用。
手動分配,由DHCP服務器管理員專門為客戶端指定IP地址。
配置DHCP
DHCP指定監(jiān)聽網(wǎng)卡
監(jiān)聽所有的網(wǎng)卡,默認不填就會監(jiān)聽所有的網(wǎng)卡DHCPDARGS=
監(jiān)聽單個網(wǎng)卡,后面寫上你想監(jiān)聽的網(wǎng)卡的名字,如想監(jiān)聽eth0,eth1,就填它的名字DHCPDARGS=eth1
監(jiān)聽多個網(wǎng)卡,填幾個就會去監(jiān)聽那幾個網(wǎng)卡,以空格分開DHCPDARGS=eth0 eth1
注意:在實際生產(chǎn)環(huán)境中,可能會有多個網(wǎng)絡環(huán)境而且環(huán)境不會互通,可以結(jié)合自己公司的情況進行優(yōu)化:
物理機一般不止一塊網(wǎng)卡,為了確保主機能分配到地址,最好指定網(wǎng)卡啟動dhcp
默認租約時間要設小一點,因為是用來做pxe安裝大量服務器系統(tǒng),在ip地址有限的情況(本段地址可能已經(jīng)被用掉很多地址,剩下的不夠被所有機器分配)下,盡量縮小默認租約時間,以防止安裝時第一批機器裝完,IP地址沒有釋放,第二批機器分配不到IP地址的情況
條件足夠的情況下,最好專門分配一個vlan用于裝機,這樣可以防止很多意外發(fā)生。
在復雜網(wǎng)絡環(huán)境中指定服務器重裝可以使用dhcp的mac地址綁定的方式
TFTP
TFTP概念
TFTP(Trivial File Transfer Protocol,簡單文件傳輸協(xié)議)是TCP/IP協(xié)議族中的一個用來在客戶機與服務器之間進行簡單文件傳輸?shù)膮f(xié)議,提供不復雜、開銷不大的文件傳輸服務。端口號為69。
TFTP是一個傳輸文件的簡單協(xié)議,它基于UDP協(xié)議而實現(xiàn),但是我們也不能確定有些TFTP協(xié)議是基于其它傳輸協(xié)議完成的。此協(xié)議設計的時候是進行小文件傳輸?shù)?。因此它不具備通常的FTP的許多功能,它只能從文件服務器上獲得或?qū)懭胛募?,不能列出目錄,不進行認證,它傳輸8位數(shù)據(jù)。
配置TFTP
HTTP
HTTP概念
由于我們要獲取安裝系統(tǒng)服務的yum源以及內(nèi)核文件,虛擬根文件,這些文件都是大文件,在傳輸時我們必須保證其能夠安全傳輸,所以我們選擇了HTTP服務,當然了,選擇FTP服務也是可以的。
HTTP是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫。是互聯(lián)網(wǎng)上廣泛試用的協(xié)議。是用于從WWW服務器傳輸超文本到本地瀏覽器的傳輸協(xié)議。它可以使瀏覽器更加高效,使網(wǎng)絡傳輸減少。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分等。
HTTP包含命令和傳輸信息,不僅可用于Web訪問,也可以用于其他因特網(wǎng)/內(nèi)聯(lián)網(wǎng)應用系統(tǒng)之間的通信,從而實現(xiàn)各類應用資源超媒體訪問的集成。
配置httpd
各文件配置后面會講,ks文件夾中可以自定義ks文件和所使用到的文件。
PXE引導(bootstrap)
syslinux是一個功能強大的引導加載程序,而且兼容各種介質(zhì)。它的目的是簡化首次安裝Linux的時間,并建立修護或其它特殊用途的啟動盤。
它的安裝很簡單,一旦安裝syslinux好之后,sysLinux啟動盤就可以引導各種基于DOS的工具,以及MS-DOS/Windows或者任何其它操作系統(tǒng)。不僅支持采用BIOS結(jié)構(gòu)的主板,而且從6.0版也開始支持采用EFI結(jié)構(gòu)的新型主板。
注意:SYSLINUX不支持NTFS文件系統(tǒng),所以磁盤必須是FAT(FAT16/FAT32)文件系統(tǒng)。
配置PXE引導
default文件解析
啟動httpd、tftp、dhcp
ks.cfg文件
通常,我們在安裝操作系統(tǒng)的過程中,需要大量的和服務器交互操作,為了減少這個交互過程,kickstart就誕生了。
使用這種kickstart,只需事先定義好一個Kickstart自動應答配置文件ks.cfg(通常存放在安裝服務器上),并讓安裝程序知道該配置文件的位置,在安裝過程中安裝程序就可以自己從該文件中讀取安裝配置,這樣就避免了在安裝過程中多次的人機交互,從而實現(xiàn)無人值守的自動化安裝。
生成kickstart配置文件的三種方法:
方法1:每安裝好一臺Centos機器,Centos安裝程序都會創(chuàng)建一個kickstart配置文件,記錄你的真實安裝配置。如果你希望實現(xiàn)和某系統(tǒng)類似的安裝,可以基于該系統(tǒng)的kickstart配置文件來生成你自己的kickstart配置文件。(生成的文件名字叫anaconda-ks.cfg位于 /root/anaconda-ks.cfg)
方法2:Centos提供了一個圖形化的kickstart配置工具。在任何一個安裝好的Linux系統(tǒng)上運行該工具,就可以很容易地創(chuàng)建你自己 的kickstart配置文件。kickstart配置工具命令為system-config-kickstart
方法3:閱讀kickstart配置文件的手冊。用任何一個文本編輯器都可以創(chuàng)建你自己的kickstart配置文件。
ks.cfg文件組成大致分為3段
命令段:
鍵盤類型,語言,安裝方式等系統(tǒng)的配置,有必選項和可選項,如果缺少某項必選項,安裝時會中斷并提示用戶選擇此項的選項
軟件包段:
%packages
@groupname:指定安裝的包組
package_name:指定安裝的包
-package_name:指定不安裝的包
在安裝過程中默認安裝的軟件包,安裝軟件時會自動分析依賴關(guān)系。
腳本段(可選):
%pre:預安裝腳本(由于只依賴于啟動鏡像,支持的命令很少)
%post:后安裝腳本(基本支持所有命令)
而具體的ks.cfg文件的配置,我們只需要在已經(jīng)安裝好的linux的root家目錄找到anaconda_ks.cfg(這個ks文件就是在安裝linux后,根據(jù)用戶的安裝選項自動生成的)
↓上下滑動可查看完整內(nèi)容
每個項目都由關(guān)鍵字來識別;關(guān)鍵字可跟一個或多個參數(shù);如果某選項后面跟隨了一個等號(=),它后面就必須指定一個值。
關(guān)鍵字 含義
install(可選) 明確指定系統(tǒng)此次進行的是全新安裝系統(tǒng),而不是升級upgrade;是默認項;
cdrom(可選) 以本地CD-ROM為源安裝系統(tǒng);
harddrive (可選) 以硬盤分區(qū)中包含的鏡像為源(安裝樹)安裝新系統(tǒng);當以該種方式安裝系統(tǒng)時,即使指定clearpart --all項,源所在分區(qū)也不會被重新抹去;
--partition= 指定分區(qū)
--dir= 指定包含鏡像的目錄
例:
harddrive --partition=/dev/sdb2 --dir=/data/iso
nfs (可選) 指定從NFS服務器上獲取安裝樹;
--server= 指定NFS服務器,主機名稱或IP
--dir= 包含安裝樹的目錄
--opts= 可以指定掛載NFS的目錄時的掛載選項
例:
nfs --server=192.168.31.72 --dir=/data/iso
url (可選) 指定通過FTP或HTTP從網(wǎng)絡獲取安裝樹;
--url 指定資源位置
例:
url --url ftp://
url --url
bootloader (必需)設定boot loader安裝選項;
--append= 可以指定內(nèi)核參數(shù),要指定多個參數(shù),使用空格分隔它們。
--driveorder= 設定設備BIOS中的開機設備啟動順序
--location= 設定引導記錄的位置,有效的值如下:
mbr(默認值);
partition(在包含內(nèi)核的分區(qū)的第一個扇區(qū)安裝引導裝載程序)或none(不安裝引導裝載程序)。
例:
bootloader --location=mbr --append=“rhgb quiet” --driveorder=sda,sdb
bootloader --location=mbr --driveorder=sda --append='crashkernel=auto rhgb rhgb quiet quiet'
clearpart (可選)在建立新分區(qū)前清空系統(tǒng)上原有的分區(qū)表,默認不刪除分區(qū);
--all 擦除系統(tǒng)上原有所有分區(qū);
--drives 刪除指定驅(qū)動器上的分區(qū)
--initlabel 初始化磁盤卷標為系統(tǒng)架構(gòu)的默認卷標
--linux 擦除所有的linux分區(qū)
--none(default)不移除任何分區(qū)
例:
clearpart --drives=hda,hdb --all --initlabel
zerombr (可選)清除mbr引導信息,會同時清空系統(tǒng)用原有分區(qū)表
drivedisk (可選)如果使用特殊存儲方式時,需要指定驅(qū)動程序盤位置以便加載存儲驅(qū)動;
1. 將驅(qū)動盤拷貝到本地硬盤某分區(qū)根目錄:
drivedisk
2. 也可以指定一個網(wǎng)絡位置加載驅(qū)動程序盤
drivedisk --source=ftp://path/to/drive.img
drivedisk --source=nfs:host://path/to/drive.img
firewall (可選)配置系統(tǒng)防火墻選項;
firewall -enable|--disable [ --trust ]
--enable 拒絕外部發(fā)起的任何主動連接;
--disable 不配置任何iptables防御規(guī)則;
--trust 指定完全信任網(wǎng)卡設備;
--port 使用port:protocol格式指定可以通過防火墻的服務;
例:
firewall --enable --trust eth0 --trust eth1 --port=80:tcp
firewall --disabled
selinux (可選)設置系統(tǒng)selinux狀態(tài);默認為啟用并處于enforcing模式;
selinux [ --disabled|–enforcing|--premissive ]
例:
selinux --disabled
reboot (可選) 在系統(tǒng)成功安裝完成后默認自動重啟系統(tǒng)(kickstart方法時);
在收到你敢裝系統(tǒng)完成后,會提示按任意鍵進行重啟;
在本文件中沒有明確指明其他方法時就默認完成方式為reboot;
使用 reboot 選項可能會導致安裝的死循環(huán),這依賴于安裝介質(zhì)和方法。需要特別注意;
halt (可選) 在系統(tǒng)成功安裝完成后關(guān)機;默認為reboot;
其他選項還有shutdown、poweroff,需要使用請自行參考官方文檔。
graphical (可選)默認值,在圖形模式下進行kickstart方式安裝;
text (可選)以文本方式進行kickstart安裝;默認為圖形界面
key (可選) 設置一個安裝碼(installration number),用于獲取RedHat官方的支持服務;
--skip 跳過key設置,不進行設置;如果不設置可能跳轉(zhuǎn)到交互模式讓用戶選取動作;
keyboard (必需)設置鍵盤類型;一般設置為us;
例:
keyboard us
lang (必需)設置安裝過程使用的語言及系統(tǒng)的缺省語言;文本模式安裝時可能不支持某些語言(中、韓...),所以可能仍以默認的英文方式安裝;默認en_us,裝中文時,需要后期%packages部分裝上中文支持組件;
例:
lang en_US
timezone (可選) 設置系統(tǒng)的時區(qū);
timezone [ --utc ]
例:
timezone --utc Asia/Shanghai
timezone Asia/Shanghai
auth/authconfig (必需) 設置系統(tǒng)的認證方式;默認為加密但不隱藏(shadow);
--enablemd5 使用MD5加密方式
--useshadow或—enableshadow 使用隱藏密碼;
--enablenis= 使用NIS認證方式
--nisdomain= NIS域
--nisserver= NIS服務器 還可以設置LDAP、SMB及Kerberos5認證方式,詳細請參考官方文檔;
例:
authconfig --useshadow --enablemd5
authconfig --enableshadow --passalgo=sha512 設置密碼加密方式為sha512 啟用shadow文件。
rootpw (必需) 設置系統(tǒng)root賬號的密碼;
rootpw [ --iscrypted ]
--iscrypted 表示設置的密碼為加密過的串;
例:
rootpw pa4word rootpw --iscrypted $1$RPYyxobb$/LtxMNLJC7euEARg2Vu2s1
rootpw --iscrypted $6$fvyDQYgM0a7kwvth$jAhWo.26MxcNMFwnJNl6011diLKv8Ai/3QapVZhfaXExPz9wAQfrxHfx.4RWK2SPb83OB33MyYX61Xd3h1hvB/
network (可選) 配置網(wǎng)絡信息;在網(wǎng)絡安裝(NFS/HTTP/FTP)時必須指定;
--bootproto=dhcp|bootp|static 指定ip獲取方式,默認為dhcp/bootp;static方法要求在kickstart文件里輸入所有的網(wǎng)絡信息。
--device= 設置安裝時激活來進行系統(tǒng)安裝的網(wǎng)卡設備;該參數(shù)只在kickstart文件為本地文件時有效;若kickstart配置文件在網(wǎng)絡上,安裝程序會先初始化網(wǎng)卡然后去尋找kickstart文件;
--ip= ip設置
--gateway= 網(wǎng)關(guān)
--nameserver= DNS設置
--nodns 不設置DNS
--netmask= 子網(wǎng)掩碼
--hostname= 設置安裝后主機名稱
--onboot= 設置是否在系統(tǒng)啟動時激活網(wǎng)卡
--class= 設置DHCP的class值
--noipv4 禁用該設備的ipv4功能
--noipv6 禁用該設備的ipv6功能 如將網(wǎng)絡模式設置為靜態(tài)模式,則必須在一行內(nèi)寫上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
network --onboot yes --device eth0 --mtu=1500 --bootproto static --ip 10.0.0.32 --netmask 255.255.255.0 --noipv6 --hostname openstack02
network --onboot yes --device eth1 --bootproto static --ip 192.168.31.32 --netmask 255.255.255.0 --gateway 192.168.31.1 --noipv6 --nameserver 223.5.5.5 --hostname openstack02
skipx (可選)
如果該項存在,就不對系統(tǒng)的X進行設置;
xconfig (可選)配置X window ;如果不給出選項,在安裝過程中需要手動調(diào)整設置;當然不安裝X時不應該添加該項;
--driver 為顯卡設置X驅(qū)動
--videoram= 設置顯卡的RAM大小
--defaultdesktop= 設置GNOME/KDE作為默認桌面;假定這兩個桌面環(huán)境在%packages例已經(jīng)安裝
--startxonboot 使用圖形界面登錄系統(tǒng)
--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模式必須)建立新分區(qū);
part
options
mntpoint:掛載點,是在創(chuàng)建普通分區(qū)時指定新分區(qū)掛載位置的項;掛載點需要格式正確
swap: 創(chuàng)建swap分區(qū);
raid.id: 表示創(chuàng)建的分區(qū)類型為raid型;必須用id號進行唯一區(qū)別;
pv.id: 表示所創(chuàng)建的分區(qū)類型為LVM型;必須用唯一id號進行區(qū)別;
--size= 設置分區(qū)的最小值,默認單位為M,但是不能寫單位;
--grow 讓分區(qū)自動增長利用可用的剩余磁盤空間,或是增長到設置的maxsize值;
--maxsize 設置分區(qū)自動增長(grow)時的最大容量值,以M為單位,但不能寫單位;
--onpart=/--usepart= 設置使用原有的分區(qū);
--noformat 設置不格式化指定的分區(qū),在跟—onpart一同使用時,可以避免刪除原有分區(qū)上的數(shù)據(jù),在新安裝的系統(tǒng)中保留使用數(shù)據(jù);
--asprimary 強制制定該分區(qū)為主分區(qū);若指定失敗,分區(qū)會失敗,導致安裝停止;
--fstype= 新增普通分區(qū)時指定分區(qū)的類型,可以為ext2、ext3、ext4、swap、vfat及hfs;
--ondisk=/--ondrive= 設定該分區(qū)創(chuàng)建在一個具體的磁盤上;
--start 指定分區(qū)以磁盤上那個磁道開始;需要跟--ondisk參數(shù)一塊使用;
--end 指定分區(qū)以磁盤上那個磁道結(jié)束;需要跟上述兩個參數(shù)一起使用;
--recommended:讓系統(tǒng)自行決定分區(qū)的大?。辉趧?chuàng)建swap分區(qū)時,若RAM<2g,則分區(qū)大小為2*ram;若ram>=2G時,分區(qū)大小為RAM+2G;
--bytes-pre-inode= 指定分區(qū)格式化時inode的大小;默認值為4096
--fsoptions= 指定創(chuàng)建fstab文件時該分區(qū)掛載參數(shù)項;
例:
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
part /boot --fstype=ext4 --asprimary --size=200
part swap --asprimary --size=512
part / --fstype=ext4 --grow --asprimary --size=200
raid (可選) 設置RAID。
raid 掛載點 --level=
掛載點: 選取根/時,注意盡量避免/boot在RAID內(nèi),除非為RAID1;
--level= 設置RAID級別
--device= RAID設備名稱,如md0,md1...
--byte-pre-inode= 設置該RAID分區(qū)上inode大??;若分區(qū)文件系統(tǒng)類型不支持該參數(shù),會靜默忽略參數(shù);
--spares= 設置RAID的熱備盤
--fstype= 設置文件系統(tǒng)類型
--fsoptions= 設置掛載該文件系統(tǒng)時自定義的一些參數(shù),參數(shù)寫入fstab文件;
--useexisting 使用現(xiàn)有的RAID設備并且重新格式化原設備
--noformat 在使用現(xiàn)有的RAID設備時不格式化原有RAID設備
例:完整創(chuàng)建一個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 (可選) 創(chuàng)建一個LVM卷組VG;
volgroup vg_name partition [options]
--useexiting 使用現(xiàn)有的VG并且重新格式化
--noformat 使用現(xiàn)有的VG時不做格式化
--pesize 設置PE(physical extents)塊大小
例:
part pv.11 --size=2000 volgroup myvg pv.11
logvol (可選) 創(chuàng)建一個LVM邏輯卷LV; logvel mnt_point
--vgname=vg_name
--size=lv_size
--name=lv_name
[options]
--useexiting 使用現(xiàn)有的LV并且重新格式化
--noformat 使用現(xiàn)有的LV時不做格式化
--fstype= 指定RAID分區(qū)類型
--byte-pre-inode= 設置該RAID分區(qū)上inode大??;
--precent= 設定LV大小為VG可用空間的比例;
例:
part pv.20 --size=5000 volgroup mvvg pv.20 logvol /data --vgname=myvg --size=3000 --name=mydata
firstboot(可選) 負責協(xié)助配置redhat一些重要的信息。
firstboot --disable
logging(可選) 設置日志級別。
logging --level=info
上下滑動可查看完整內(nèi)容
以下是ks配置文件的內(nèi)容
可以根據(jù)自己所需進行調(diào)整,ks文件需要用.cfg結(jié)尾,必須與default文件中指定的位置相同。
ks.cfg
↓上下滑動可查看完整內(nèi)容
#version=DEVEL
install #表示是安裝系統(tǒng)
# System authorization information
auth --enableshadow --passalgo=sha512 #啟用加密
text #文本安裝
#graphical #圖形化安裝,注釋掉
# Use graphical install
# Firewall configuration
firewall --disabled #關(guān)閉防火墻
# SELinux configuration
selinux --disabled #關(guān)閉selinux
# Run the Setup Agent on first boot
firstboot --disable #關(guān)閉第一次啟動后的安裝配置
ignoredisk --only-use=sda #默認第一塊啟動盤
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us' #鍵盤
# System language
lang en_US.UTF-8 #語言和編碼
# Network information
network --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate #安裝時配置網(wǎng)卡地址
network --hostname=localhost.localdomain #安裝時配置主機名
# System timezone
timezone Asia/Shanghai #時區(qū)
# System bootloader configuration
bootloader --append=' crashkernel=auto' --location=mbr --boot-drive=sda #指定引導裝載程序怎樣被安裝
# Root password
rootpw --iscrypted $1$vIP9ZiKA$ryz7cg0/2NwoOYVnHhHCF1 #root密碼
# System services
#services --enabled='chronyd'
# Do not configure the X Window System
skipx #不使用圖形界面
# Accept license
eula --agreed #同意最終用戶許可協(xié)議
# Reboot after installation
reboot #安裝后重啟
# Disk partitioning information
%include /tmp/partition.ks
%pre #系統(tǒng)安裝前所執(zhí)行的腳本
#!/bin/sh
# 創(chuàng)建分區(qū),如果分區(qū)比較簡單,可以放在上面,分區(qū)比較多的,可以像這樣寫腳本放在%pre塊內(nèi)
act_mem=$(cat /proc/meminfo | grep MemTotal | awk '{printf('%d',$2/1024)}')
echo '' > /tmp/partition.ks
echo 'clearpart --all --initlabel' >> /tmp/partition.ks
echo 'part pv.767 --fstype='lvmpv' --ondisk=sda --size=1 --grow' >> /tmp/partition.ks..ec01]oho 'part biosboot --fstype='biosboot' --ondisk=sda --size=2' >> /tmp/partition.ks
echo 'part /boot --fstype='ext4' --ondisk=sda --size=512' >> /tmp/partition.ks
echo 'volgroup rhel --pesize=4096 pv.767' >> /tmp/partition.ks
echo 'logvol /data --fstype='ext4' --size=1 --grow --name=data --vgname=rhel' >> /tmp/partition.ks
echo 'logvol / --fstype='ext4' --size=102400 --name=root --vgname=rhel' >> /tmp/partition.ks
if [ ${act_mem} -ge 65536 ]
then
echo 'logvol swap --fstype=swap --name=swap --vgname=rhel --size=65536' >> /tmp/partition.ks
elif [ ${act_mem} -le 8192 ]
then
echo 'logvol swap --fstype=swap --name=swap --vgname=rhel --size=${act_mem}' >> /tmp/partition.ks
else
echo 'logvol swap --fstype=swap --name=swap --vgname=rhel --size=$(expr ${act_mem} / 2)' >> /tmp/partition.ks
fi
%end
%post #系統(tǒng)安裝后所執(zhí)行的腳本
#Sshd config
sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
......
/bin/sh /tmp/ip.sh
/bin/sh /tmp/zabbix_agent.sh
%packages #安裝包,%packages塊指定以下都是需要進行安裝的包。
@base #最小化安裝需要@base和@core。@后寫的是包組
@console-internet
@core
autoconf #沒有任何前綴的表示需要安裝的包
chrony
expect
gcc
gcc-c++
......
%end #最后需要用%end結(jié)尾
%addon com_redhat_kdump --enable --reserve-mb='auto'
ip.sh、ip.txt、zabbix_agent.sh是安裝后所需要執(zhí)行的腳本,配置在%post塊內(nèi),使用wget下載下來,再進行執(zhí)行??梢宰孕芯帉懩_本實現(xiàn)功能,比如根據(jù)機器序列號進行IP配置,進行內(nèi)核參數(shù)調(diào)優(yōu),權(quán)限設置,加入zabbix監(jiān)控等等。
以下附加一份IP配置腳本,因為比較特殊,需要在網(wǎng)卡上配置vlan,打vlan標簽。
↓上下滑動可查看完整內(nèi)容
ip.txt
#依次對應序列號、業(yè)務網(wǎng)IP、數(shù)據(jù)網(wǎng)IP、管理網(wǎng)IP、主機名
XXXXXXXX 10.1.1.1 10.10.1.1 10.20.1.1 XXXX-1.1
ip.sh
SN=`dmidecode -t 1 |grep 'Serial Number' |awk -F ': ' '{print $2}'` #取本機序列號
ip_1=`cat /tmp/ip.txt |grep $SN |awk -F ' ' '{print $2}'` #按照序列號指定對應IP
ip_10=`cat /tmp/ip.txt |grep $SN |awk -F ' ' '{print $3}'`
ip_20=`cat /tmp/ip.txt |grep $SN |awk -F ' ' '{print $4}'`
host_name=`cat /tmp/ip.txt |grep $SN |awk -F ' ' '{print $5}'`
cat > /etc/sysconfig/network-scripts/ifcfg-eth2 <>
TYPE=Ethernet
BOOTPROTO=none
DEVICE=eth2
ONBOOT=yes
IPADDR=$ip_10
PREFIX=24
EOF
cat > /etc/sysconfig/network-scripts/ifcfg-eth3 <>
DEVICE=eth3
ONBOOT=yes
IPADDR=$ip_20
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <>
DEVICE=eth0
ONBOOT=yes
USERCL=no
MASTER=bond0
SLAVE=yes
EOF
cat > /etc/sysconfig/network-scripts/ifcfg-eth1 <>
DEVICE=eth1
ONBOOT=yes
USERCTL=no
#config bond
cat > /etc/sysconfig/network-scripts/ifcfg-bond0 < eof="">
DEVICE=bond0
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=bond0
ONBOOT=yes
IPADDR=$ip_1
PREFIX=24
GATEWAY=10.1.1.254
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
BONDING_OPTS='miimon=100 mode=4'
EOF
cat > /etc/sysconfig/network-scripts/route-eth2 < eof="">
10.10.0.0/16 via 10.10.1.254
EOF
cat > /etc/sysconfig/network-scripts/route-eth3 <>
10.20.0.0/16 via 10.20.1.254
EOF
systemctl restart network
echo '$host_name' > /etc/hostname
echo '$ip_1 $host_name' >> /etc/hosts
上下滑動可查看完整內(nèi)容
五、小結(jié)
PXE客戶端獲取鏡像的方式不僅僅只有http,還有nfs和FTP
在多網(wǎng)卡的情況下,最好指定網(wǎng)卡來啟用DHCP
tftp安裝時是安裝tftp-server,并且它被xinetd所管理,所以需要安裝xinetd
pxelinux.0文件在/usr/share/syslinux文件夾下,如果沒有,需要安裝syslinux
使用pxe+kickstart時,最好關(guān)閉selinux和firewall
tftp根目錄下的文件,如vmlinuz等文件最好是從所安裝鏡像的文件目錄下的isolinux下拷過去,不能隨便用別的鏡像內(nèi)的文件,會報錯
細讀流程,知道原理,在報錯的時候才好排錯
上面具體說了有關(guān)于pxe+kickstart的原理,以及l(fā)inux的自動化安裝配置。下面簡單說下esxi的自動化配置,原理是一樣的。
自動化配置安裝esxi6.0
以下環(huán)境192.168.1.1是http、tftp和dhcp的地址。先安裝所需要的工具包:
[root@localhost ~]# yum install dhcp xinetd tftp-server httpd syslinux -y
配置DHCP
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.200 192.168.1.253;
option subnet-mask 255.255.255.0;
DHCPDARGS=ens5f1;
default-lease-time 600;
max-lease-time 5400;
next-server 192.168.1.1;
filename '/gpxelinux.0'; # esxi和linux有所區(qū)別,esxi需要用gpxelinux.0這個文件
}
[root@localhost ~]# systemctl restart dhcpd
配置HTTP
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
ServerName 192.168.1.1:80
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# mkdir Esxi6.3 # 創(chuàng)建鏡像存放的文件夾
[root@localhost html]# mount /data/ios/ESXi-6.3-Custom.iso /var/www/html/Esxi6.3 # 掛載鏡像到文件夾
[root@localhost html]# mkdir ks_cfg # 創(chuàng)建ks文件所用的文件夾
[root@localhost html]# ll ks_cfg/
-rw-r--r-- 1 root 503 Nov 14 15:34 esxi.cfg
-rw-r--r-- 1 root 3541 Nov 14 15:46 esxi_ip
配置TFTP
[root@localhost ~]# sed -i 's/\= yes/\= no/g' /etc/xinetd.d/tftp
[root@localhost ~]# systemctl restart xinetd
[root@localhost ~]# cd /var/lib/tftpboot/
[root@localhost tftpboot]# cp /var/www/html/Esxi6.3/mboot.c32 .
[root@localhost tftpboot]# cp /var/www/html/Esxi6.3/boot.cfg .
[root@localhost tftpboot]# cp /usr/share/syslinux/gpxelinux.0 .
[root@localhost tftpboot]# mkdir pxelinux.cfg
[root@localhost tftpboot]# cp /var/www/html/Esxi6.3/isolinux.cfg pxelinux.cfg/default
[root@localhost tftpboot]# chown +w boot.cfg
[root@localhost tftpboot]# chmod +w pxelinux.cfg/default
[root@localhost tftpboot]# sed 's/\///g' boot.cfg # 將文件內(nèi)的/全部去掉
[root@localhost tftpboot]# vim boot.cfg # 在kernel=tboot.b00這行上面添加prefix
[root@localhost tftpboot]# vim pxelinux.cfg/default # 多余的可以刪掉
DEFAULT 1
NOHALT 1
PROMPT 0
TIMEOUT 60
LABEL 1
KERNEL mboot.c32
服務配置就是這些,下面是ks文件:
↓上下滑動可查看完整內(nèi)容
[root@localhost ~]# cd /var/www/html/ks_cfg/
[root@localhost ks_cfg]# ll
自定義IP列表
[root@localhost ks_cfg]# cat esxi_ip
816399908 192.168.1.188
816399887 192.168.1.189
816399909 192.168.1.190
ks文件
[root@localhost ks_cfg]# cat esxi.cfg
vmaccepteula # 同意vmware的協(xié)議
rootpw 1qaz!QAZ # 設置root密碼
install --firstdisk --overwritevmfs # 安裝并格式化第一塊本地盤
reboot # 安裝后重啟
%include /tmp/network.ks # 導入自定義ks腳本
%pre --interpreter=busybox # 安裝前的配置腳本
SN=$(localcli hardware platform get | awk '/Serial Number/ { print $NF }')
ip=`cat /tmp/esxi_ip |grep $SN |awk -F ' ' '{print $2}'`
echo 'network --bootproto=static --device=vmnic4 --ip=$ip --netmask=255.255.255.0 --gateway=192.168.1.254 --hostname=localhost --nameserver=192.168.1.1 --vlanid=201' > /tmp/network.ks # 可以在腳本中設置自定義網(wǎng)絡
上下滑動可查看完整內(nèi)容
我們的內(nèi)容大致就是以上這樣。