酸爽!我用這套無人值守安裝系統瞬間搞定上百臺服務器

酸爽!我用这套无人值守安装系统瞬间搞定上百台服务器

季城希,甜橙金融運維工程師,多年IDC運維經驗。擅長IDC中服務器批量高效快速集成交付,精通各品牌型號服務器硬件產品及維護。

一、前言

為啥要用無人值守安裝系統?很簡單的答案,就是方便日常工作。

常規裝系統的辦法有哪些?

  • 光盤安裝系統:一個服務器DVD內置光驅百千塊,百臺服務器都配光驅就浪費了,因為一臺服務器也就開始裝系統能用的上,以後用的機會屈指可數。

  • U盤安裝系統:還是同樣的問題,要一臺一臺服務器插U盤。

  • 網絡安裝系統(ftp,http,nfs) :只要服務器能聯網就可以裝系統了,但還是需要一臺臺服務器去敲鍵盤點鼠標。

無人值守安裝系統好處都有啥?

  • 對於個人:裝系統大部分時間都浪費於下一步、下一步等操作,浪費了寶貴的時間。

  • 對於行業:自打若干年前Red Hat推出了Kickstart,此後我們搞服務器的運維頓覺身價倍增。不再需要刻了光盤一臺一臺地安裝Linux,只要搞定PXE、DHCP、TFTP,還有那滿屏眼花繚亂不知所云的Kickstart腳本,瞬間安裝上百臺服務器。

二、PXE

PXE(preboot execute environment,預啟動執行環境)是由Intel公司開發的最新技術,工作於Client/Server的網絡模式,支持工作站通過網絡從遠端服務器下載映像,並由此支持通過網絡啟動操作系統。

在啟動過程中,終端要求服務器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)協議下載一個啟動軟件包到本機內存中執行,由這個啟動軟件包完成終端(客戶端)基本軟件設置,從而引導預先安裝在服務器中的終端操作系統。

PXE可以引導多種操作系統,如:Windows95 / 98 / 2000 / windows2003 / windows2008 / winXP / win7 / win8,Linux系列系統等。

嚴格來說,PXE並不是一種安裝方式,而是一種引導方式。進行PXE安裝的必要條件是在要安裝的計算機中必須包含一個PXE支持的網卡(NIC),即網卡中必須要有PXE Client。

PXE協議可以使計算機通過網絡啟動。此協議分為Client端和Server 端,而PXE Client則在網卡的ROM中。

當計算機引導時,BIOS把PXE Client調入內存中執行,然後由PXE Client將放置在遠端的文件通過網絡下載到本地運行。

運行PXE協議需要設置DHCP服務器和TFTP服務器。DHCP服務器會給PXE Client(將要安裝系統的主機)分配一個IP地址,由於是給PXE Client分配IP地址,所以在配置DHCP服務器時需要增加相應的PXE設置。

此外,在PXE Client的ROM中,已經存在了TFTP Client,那麼它就可以通過TFTP協議到TFTP Server上下載所需的文件了。

PXE工作流程

酸爽!我用这套无人值守安装系统瞬间搞定上百台服务器

1、PXE Client向DHCP發送請求

  • 當計算機開機時第一次登錄網絡的時候,發現本機上沒有任何IP地址設定。PXE Client會從自己的PXE網卡啟動,通過PXE BootROM(自啟動芯片)會以UDP(簡單用戶數據報協議)發送一個廣播請求,源IP地址是0.0.0.0,發送DHCP discover發現信息來尋找DHCP服務器,即向目標IP地址是255.255.255.255發送特定的廣播信息。

  • 網絡上每一臺安裝了TCP/IP協議的主機都會接收到這個廣播信息,但只有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地址的內容。

  • 當DHCP服務器收到DHCP客戶端回答的DHCP request請求信息之後,便向DHCP客戶端發送一個包含它所提供的IP地址和其他設置的DHCP ack確認信息,告訴DHCP客戶端可以使用它提供的IP地址。

  • 然後,DHCP客戶機便將其TCP/IP協議與網卡綁定。

  • 另外,除了DHCP客戶機選中的服務器外,其他的DHCP服務器將收回曾經提供的IP地址。這是第一次初始化網絡。

4、PXE客戶端請求下載啟動文件

  • 客戶端收到服務器的“回應”後,會回應一個幀,以請求傳送啟動所需文件。這些啟動文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。

5、Boot Server響應客戶端請求並傳送文件

  • 當服務器收到客戶端的請求後,他們之間之後將有更多的信息在客戶端與服務器之間作應答,用以決定啟動參數。BootROM由TFTP通訊協議從Boot Server下載啟動安裝程序所必須的文件(pxelinux.0、pxelinux.cfg/default)。客戶端取得pxelinux.0 文件後之執行該文件,向服務器請求下載pxelinux.cfg文件。客戶端pxelinux.cfg配置文件後,請求vmlinuz文件和initrd.img文件,會根據該文件中定義的引導順序,啟動Linux安裝程序的引導內核。

  • pxeliunx.0:網絡引導程序pxe文件

  • pxelinux.cfg/default:指定鏡像的位置或ks文件位置

  • vmlinuz:引導內核

  • initrd.img:小型的linux操作系統,類似於windows的PE

6、請求下載自動應答文件

  • 客戶端通過pxelinux.cfg/default文件成功的引導Linux安裝內核後,安裝程序首先必須確定你通 過什麼安裝介質來安裝Linux,如果是通過網絡安裝(NFS, FTP, HTTP),則會在這個時候初始化網絡(這是第二次初始化網絡),並定位安裝源位置。

  • 接著會讀取default文件中指定的自動應答文件ks.cfg所在位置,根據該位置請求下載該文件。

  • PXE獲取的是安裝用的內核以及安裝程序等,而安裝程序要獲取的是安裝系統所需的二進制包以及配置文件PXE模塊和安裝程序是相對獨立的,PXE的網絡配置並不能傳遞給安裝程序,從而進行兩次獲取IP地址過程,但IP地址在DHCP的租期內是一樣的。

7、客戶端安裝操作系統

  • 將ks.cfg文件下載回來後,通過該文件找到OS Server,並按照該文件的配置請求下載安裝過程需要的軟件包。OS Server和客戶端建立連接後,將開始傳輸軟件包,客戶端將開始安裝操作系統。

  • 安裝完成後,將提示重新引導計算機。

三、Kickstart

Kickstart工作原理

Kickstart是一種無人值守的安裝方式。它的工作原理是在安裝過程中記錄人工干預填寫的各種參數,並生成一個名為ks.cfg的文件。

如果在自動安裝過程中出現要填寫參數的情況,安裝程序首先會去查找ks.cfg文件,如果找到合適的參數,就採用所找到的參數;如果沒有找到合適的參數,便會彈出對話框讓安裝者手工填寫。

所以,如果ks.cfg文件涵蓋了安裝過程中所有需要填寫的參數,那麼安裝者完全可以只告訴安裝程序從何處下載ks.cfg文件,然後就去忙自己的事情。

等安裝完畢,安裝程序會根據ks.cfg中的設置重啟/關閉系統,並結束安裝。

酸爽!我用这套无人值守安装系统瞬间搞定上百台服务器

四、搭建PXE+Kickstart環境

安裝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是一個局域網的網絡協議,使用UDP協議工作,主要有兩個用途:給內部網絡或網絡服務供應商自動分配IP地址,給用戶或者內部網絡管理員作為對所有計算機作中央管理的手段。

所有客戶機的IP地址設定資料都由DHCP服務器集中管理,並負責處理客戶端的DHCP請求;而客戶端則會使用從服務器分配下來的IP地址。

酸爽!我用这套无人值守安装系统瞬间搞定上百台服务器

在此不詳細闡述DHCP工作原理,若想了解可參考:https://www.cnblogs.com/wajika/p/6537085.html

DHCP服務器IP分配方式

主要提供三種IP分配方式:

  • 自動分配(Automatic Allocation),當DHCP客戶端第一次成功地從DHCP服務器端分配到一個IP地址之後,就永遠使用這個地址。

  • 動態分配(Dynamic Allocation),當DHCP客戶端第一次從DHCP服務器分配到IP地址後,並非永久地使用該地址,每次使用完後,DHCP客戶端就得釋放這個IP地址,以給其他客戶端使用。

  • 手動分配,由DHCP服務器管理員專門為客戶端指定IP地址。

配置DHCP

酸爽!我用这套无人值守安装系统瞬间搞定上百台服务器

DHCP指定監聽網卡

  • 監聽所有的網卡,默認不填就會監聽所有的網卡DHCPDARGS=

  • 監聽單個網卡,後面寫上你想監聽的網卡的名字,如想監聽eth0,eth1,就填它的名字DHCPDARGS=eth1

  • 監聽多個網卡,填幾個就會去監聽那幾個網卡,以空格分開DHCPDARGS=eth0 eth1

注意:在實際生產環境中,可能會有多個網絡環境而且環境不會互通,可以結合自己公司的情況進行優化:

  • 物理機一般不止一塊網卡,為了確保主機能分配到地址,最好指定網卡啟動dhcp

  • 默認租約時間要設小一點,因為是用來做pxe安裝大量服務器系統,在ip地址有限的情況(本段地址可能已經被用掉很多地址,剩下的不夠被所有機器分配)下,儘量縮小默認租約時間,以防止安裝時第一批機器裝完,IP地址沒有釋放,第二批機器分配不到IP地址的情況

  • 條件足夠的情況下,最好專門分配一個vlan用於裝機,這樣可以防止很多意外發生。

  • 在複雜網絡環境中指定服務器重裝可以使用dhcp的mac地址綁定的方式

TFTP

TFTP概念

TFTP(Trivial File Transfer Protocol,簡單文件傳輸協議)是TCP/IP協議族中的一個用來在客戶機與服務器之間進行簡單文件傳輸的協議,提供不復雜、開銷不大的文件傳輸服務。端口號為69。

TFTP是一個傳輸文件的簡單協議,它基於UDP協議而實現,但是我們也不能確定有些TFTP協議是基於其它傳輸協議完成的。此協議設計的時候是進行小文件傳輸的。因此它不具備通常的FTP的許多功能,它只能從文件服務器上獲得或寫入文件,不能列出目錄,不進行認證,它傳輸8位數據。

配置TFTP

酸爽!我用这套无人值守安装系统瞬间搞定上百台服务器

HTTP

HTTP概念

由於我們要獲取安裝系統服務的yum源以及內核文件,虛擬根文件,這些文件都是大文件,在傳輸時我們必須保證其能夠安全傳輸,所以我們選擇了HTTP服務,當然了,選擇FTP服務也是可以的。

HTTP是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫。是互聯網上廣泛試用的協議。是用於從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議。它可以使瀏覽器更加高效,使網絡傳輸減少。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分等。

HTTP包含命令和傳輸信息,不僅可用於Web訪問,也可以用於其他因特網/內聯網應用系統之間的通信,從而實現各類應用資源超媒體訪問的集成。

配置httpd

酸爽!我用这套无人值守安装系统瞬间搞定上百台服务器

各文件配置後面會講,ks文件夾中可以自定義ks文件和所使用到的文件。

PXE引導(bootstrap)

syslinux是一個功能強大的引導加載程序,而且兼容各種介質。它的目的是簡化首次安裝Linux的時間,並建立修護或其它特殊用途的啟動盤。

它的安裝很簡單,一旦安裝syslinux好之後,sysLinux啟動盤就可以引導各種基於DOS的工具,以及MS-DOS/Windows或者任何其它操作系統。不僅支持採用BIOS結構的主板,而且從6.0版也開始支持採用EFI結構的新型主板。

注意:SYSLINUX不支持NTFS文件系統,所以磁盤必須是FAT(FAT16/FAT32)文件系統。

配置PXE引導

酸爽!我用这套无人值守安装系统瞬间搞定上百台服务器

default文件解析

酸爽!我用这套无人值守安装系统瞬间搞定上百台服务器

啟動httpd、tftp、dhcp

酸爽!我用这套无人值守安装系统瞬间搞定上百台服务器

ks.cfg文件

通常,我們在安裝操作系統的過程中,需要大量的和服務器交互操作,為了減少這個交互過程,kickstart就誕生了。

使用這種kickstart,只需事先定義好一個Kickstart自動應答配置文件ks.cfg(通常存放在安裝服務器上),並讓安裝程序知道該配置文件的位置,在安裝過程中安裝程序就可以自己從該文件中讀取安裝配置,這樣就避免了在安裝過程中多次的人機交互,從而實現無人值守的自動化安裝。

生成kickstart配置文件的三種方法:

  • 方法1:每安裝好一臺Centos機器,Centos安裝程序都會創建一個kickstart配置文件,記錄你的真實安裝配置。如果你希望實現和某系統類似的安裝,可以基於該系統的kickstart配置文件來生成你自己的kickstart配置文件。(生成的文件名字叫anaconda-ks.cfg位於 /root/anaconda-ks.cfg)

  • 方法2:Centos提供了一個圖形化的kickstart配置工具。在任何一個安裝好的Linux系統上運行該工具,就可以很容易地創建你自己 的kickstart配置文件。kickstart配置工具命令為system-config-kickstart

  • 方法3:閱讀kickstart配置文件的手冊。用任何一個文本編輯器都可以創建你自己的kickstart配置文件。

ks.cfg文件組成大致分為3段

命令段:

鍵盤類型,語言,安裝方式等系統的配置,有必選項和可選項,如果缺少某項必選項,安裝時會中斷並提示用戶選擇此項的選項

軟件包段:

  • %packages

  • @groupname:指定安裝的包組

  • package_name:指定安裝的包

  • -package_name:指定不安裝的包

  • 在安裝過程中默認安裝的軟件包,安裝軟件時會自動分析依賴關係。

腳本段(可選):

  • %pre:預安裝腳本(由於只依賴於啟動鏡像,支持的命令很少)

  • %post:後安裝腳本(基本支持所有命令)

  • 而具體的ks.cfg文件的配置,我們只需要在已經安裝好的linux的root家目錄找到anaconda_ks.cfg(這個ks文件就是在安裝linux後,根據用戶的安裝選項自動生成的)

↓上下滑動可查看完整內容

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

關鍵字 含義

install(可選) 明確指定系統此次進行的是全新安裝系統,而不是升級upgrade;是默認項;

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.31.72 --dir=/data/iso

url (可選) 指定通過FTP或HTTP從網絡獲取安裝樹;

--url 指定資源位置

例:

url --url ftp://:@/

url --url

bootloader (必需)設定boot loader安裝選項;

--append= 可以指定內核參數,要指定多個參數,使用空格分隔它們。

--driveorder= 設定設備BIOS中的開機設備啟動順序

--location= 設定引導記錄的位置,有效的值如下:

mbr(默認值);

partition(在包含內核的分區的第一個扇區安裝引導裝載程序)或none(不安裝引導裝載程序)。

例:

bootloader --location=mbr --append=“rhgb quiet” --driveorder=sda,sdb

bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb rhgb quiet quiet"

clearpart (可選)在建立新分區前清空系統上原有的分區表,默認不刪除分區;

--all 擦除系統上原有所有分區;

--drives 刪除指定驅動器上的分區

--initlabel 初始化磁盤卷標為系統架構的默認卷標

--linux 擦除所有的linux分區

--none(default)不移除任何分區

例:

clearpart --drives=hda,hdb --all --initlabel

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

drivedisk (可選)如果使用特殊存儲方式時,需要指定驅動程序盤位置以便加載存儲驅動;

1. 將驅動盤拷貝到本地硬盤某分區根目錄:

drivedisk [ --type= ]

2. 也可以指定一個網絡位置加載驅動程序盤

drivedisk --source=ftp://path/to/drive.img

drivedisk --source=nfs:host://path/to/drive.img

firewall (可選)配置系統防火牆選項;

firewall -enable|--disable [ --trust ] [ --port= ]

--enable 拒絕外部發起的任何主動連接;

--disable 不配置任何iptables防禦規則;

--trust 指定完全信任網卡設備;

--port 使用port:protocol格式指定可以通過防火牆的服務;

例:

firewall --enable --trust eth0 --trust eth1 --port=80:tcp

firewall --disabled

selinux (可選)設置系統selinux狀態;默認為啟用並處於enforcing模式;

selinux [ --disabled|–enforcing|--premissive ]

例:

selinux --disabled

reboot (可選) 在系統成功安裝完成後默認自動重啟系統(kickstart方法時);

在收到你敢裝系統完成後,會提示按任意鍵進行重啟;

在本文件中沒有明確指明其他方法時就默認完成方式為reboot;

使用 reboot 選項可能會導致安裝的死循環,這依賴於安裝介質和方法。需要特別注意;

halt (可選) 在系統成功安裝完成後關機;默認為reboot;

其他選項還有shutdown、poweroff,需要使用請自行參考官方文檔。

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

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

key (可選) 設置一個安裝碼(installration number),用於獲取RedHat官方的支持服務;

--skip 跳過key設置,不進行設置;如果不設置可能跳轉到交互模式讓用戶選取動作;

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

例:

keyboard us

lang (必需)設置安裝過程使用的語言及系統的缺省語言;文本模式安裝時可能不支持某些語言(中、韓...),所以可能仍以默認的英文方式安裝;默認en_us,裝中文時,需要後期%packages部分裝上中文支持組件;

例:

lang en_US

timezone (可選) 設置系統的時區;

timezone [ --utc ]

例:

timezone --utc Asia/Shanghai

timezone Asia/Shanghai

auth/authconfig (必需) 設置系統的認證方式;默認為加密但不隱藏(shadow);

--enablemd5 使用MD5加密方式

--useshadow或—enableshadow 使用隱藏密碼;

--enablenis= 使用NIS認證方式

--nisdomain= NIS域

--nisserver= NIS服務器 還可以設置LDAP、SMB及Kerberos5認證方式,詳細請參考官方文檔;

例:

authconfig --useshadow --enablemd5

authconfig --enableshadow --passalgo=sha512 設置密碼加密方式為sha512 啟用shadow文件。

rootpw (必需) 設置系統root賬號的密碼;

rootpw [ --iscrypted ]

--iscrypted 表示設置的密碼為加密過的串;

例:

rootpw pa4word rootpw --iscrypted $1$RPYyxobb$/LtxMNLJC7euEARg2Vu2s1

rootpw --iscrypted $6$fvyDQYgM0a7kwvth$jAhWo.26MxcNMFwnJNl6011diLKv8Ai/3QapVZhfaXExPz9wAQfrxHfx.4RWK2SPb83OB33MyYX61Xd3h1hvB/

network (可選) 配置網絡信息;在網絡安裝(NFS/HTTP/FTP)時必須指定;

--bootproto=dhcp|bootp|static 指定ip獲取方式,默認為dhcp/bootp;static方法要求在kickstart文件裡輸入所有的網絡信息。

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

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 (可選)

如果該項存在,就不對系統的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模式必須)建立新分區;

part |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

part /boot --fstype=ext4 --asprimary --size=200

part swap --asprimary --size=512

part / --fstype=ext4 --grow --asprimary --size=200

raid (可選) 設置RAID。

raid 掛載點 --level= --device=

掛載點: 選取根/時,注意儘量避免/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分區類型

--byte-pre-inode= 設置該RAID分區上inode大小;

--precent= 設定LV大小為VG可用空間的比例;

例:

part pv.20 --size=5000 volgroup mvvg pv.20 logvol /data --vgname=myvg --size=3000 --name=mydata

firstboot(可選) 負責協助配置redhat一些重要的信息。

firstboot --disable

logging(可選) 設置日誌級別。

logging --level=info

上下滑動可查看完整內容

以下是ks配置文件的內容

可以根據自己所需進行調整,ks文件需要用.cfg結尾,必須與default文件中指定的位置相同。

ks.cfg

↓上下滑動可查看完整內容

#version=DEVEL

install #表示是安裝系統

# System authorization information

auth --enableshadow --passalgo=sha512 #啟用加密

text #文本安裝

#graphical #圖形化安裝,註釋掉

# Use graphical install

# Firewall configuration

firewall --disabled #關閉防火牆

# SELinux configuration

selinux --disabled #關閉selinux

# Run the Setup Agent on first boot

firstboot --disable #關閉第一次啟動後的安裝配置

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 #安裝時配置網卡地址

network --hostname=localhost.localdomain #安裝時配置主機名

# System timezone

timezone Asia/Shanghai #時區

# 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 #同意最終用戶許可協議

# Reboot after installation

reboot #安裝後重啟

# Disk partitioning information

%include /tmp/partition.ks

%pre #系統安裝前所執行的腳本

#!/bin/sh

# 創建分區,如果分區比較簡單,可以放在上面,分區比較多的,可以像這樣寫腳本放在%pre塊內

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 #系統安裝後所執行的腳本

#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結尾

%addon com_redhat_kdump --enable --reserve-mb='auto'

ip.sh、ip.txt、zabbix_agent.sh是安裝後所需要執行的腳本,配置在%post塊內,使用wget下載下來,再進行執行。可以自行編寫腳本實現功能,比如根據機器序列號進行IP配置,進行內核參數調優,權限設置,加入zabbix監控等等。

以下附加一份IP配置腳本,因為比較特殊,需要在網卡上配置vlan,打vlan標籤。

↓上下滑動可查看完整內容

ip.txt

#依次對應序列號、業務網IP、數據網IP、管理網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 << EOF

TYPE=Ethernet

BOOTPROTO=none

DEVICE=eth2

ONBOOT=yes

IPADDR=$ip_10

PREFIX=24

EOF

cat > /etc/sysconfig/network-scripts/ifcfg-eth3 << EOF

DEVICE=eth3

ONBOOT=yes

IPADDR=$ip_20

cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF

DEVICE=eth0

ONBOOT=yes

USERCL=no

MASTER=bond0

SLAVE=yes

EOF

cat > /etc/sysconfig/network-scripts/ifcfg-eth1 << EOF

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 << EOF

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

上下滑動可查看完整內容

五、小結

  • PXE客戶端獲取鏡像的方式不僅僅只有http,還有nfs和FTP

  • 在多網卡的情況下,最好指定網卡來啟用DHCP

  • tftp安裝時是安裝tftp-server,並且它被xinetd所管理,所以需要安裝xinetd

  • pxelinux.0文件在/usr/share/syslinux文件夾下,如果沒有,需要安裝syslinux

  • 使用pxe+kickstart時,最好關閉selinux和firewall

  • tftp根目錄下的文件,如vmlinuz等文件最好是從所安裝鏡像的文件目錄下的isolinux下拷過去,不能隨便用別的鏡像內的文件,會報錯

  • 細讀流程,知道原理,在報錯的時候才好排錯

上面具體說了有關於pxe+kickstart的原理,以及linux的自動化安裝配置。下面簡單說下esxi的自動化配置,原理是一樣的。

自動化配置安裝esxi6.0

以下環境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有所區別,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 # 創建鏡像存放的文件夾

[root@localhost html]# mount /data/ios/ESXi-6.3-Custom.iso /var/www/html/Esxi6.3 # 掛載鏡像到文件夾

[root@localhost html]# mkdir ks_cfg # 創建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 # 將文件內的/全部去掉

[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文件:

↓上下滑動可查看完整內容

[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的協議

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 # 可以在腳本中設置自定義網絡

上下滑動可查看完整內容

我們的內容大致就是以上這樣。

酸爽!我用这套无人值守安装系统瞬间搞定上百台服务器

近期熱文


分享到:


相關文章: