Anaconda 及 Kickstart 的提示與技巧

欲取得所有文檔,請參閱 https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Installation_Guide/ch-kickstart2.html (CentOS 5),https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/ch-kickstart2.html (CentOS 6)或 https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Installation_Guide/chap-kickstart-installations.html (CentOS 7)

調校 %packages 部份

當使用 %packages 來定義哪些套件需要安裝時,有一些比較少記載的選項可供使用:

--resolvedeps
自動排除套件之間的依賴。這個選項在 Centos 5 已經被降級。套件之間的依賴現在每次都會自動被排除。
--excludedocs

安裝時省略那些被標籤為文檔的檔案(就是那些在執行 rpm -qld <packagename> 時列出來的檔案)

--nobase
安裝時省略 @Base。除非你知道自己在做甚麼,否則這樣做行不通,因為可能會遺漏某些套件是安裝後執行腳本時所需的
--ignoremissing
忽視不存在的套件及群組,而不要詢問處理方法。這個選項在 Centos 5 已經被降級。套件之間的依賴現在每次都會自動被排除。

為 CentOS 4 選取最少套件的範例:

%packages --resolvedeps --excludedocs --nobase
kudzu

請留意這樣做會遺漏一些基本的元件。rpm、yum、vim、dhcp-client 及鍵盤佈局都不會存在。Kudzu 是必須的,因為沒有它,安裝程式將無法執行。

為 CentOS 5 選取最少套件的範例:

%packages --excludedocs --nobase
@Core

同樣,這樣做只會產生一個非常基本的系統,而大部份你遇期有的功能都不會存在。

<!> CentOS 4 上所指定的 --resolvedeps 已不必在 CentOS 5 或以上的發行版本中採用,因為較新的安裝程式經常會解決依賴關係。

分割磁碟

若果你以一個未分割的磁碟、或虛擬機器上未分割的映像作為起始點,請使用 --initlabelclearpart 參數來確定磁碟標籤會被初始化,否則 Anaconda 會互動地要求你確定建立磁碟標籤。假設你需要清除 xvda 上的所有分割區,並為未存在的磁碟標籤進行初始化,請執行:

clearpart --all --initlabel --drives=xvda

在直正的文字模式執行 anaconda

你很可能已經知道在你的 kickstart 檔內加入 "text" 這一行會令 anaconda 採用 ncurses 介面,而不是 X11 介面。但其實還有另一個可能選擇:就是在真正的文字模式中進行安裝。只要將 kickstart 檔內 "text" 這行以 "cmdline" 取代,anaconda 便會將整個安裝過程在文字模式中進行。尤其是當採用 %packages --nobase 或執行複雜的 %post 腳本時,這樣做會省下很多小時的偵錯時間,因為你可以親眼看見所有在安裝時執行的腳本的輸出。

啟用/停用 firstboot

你們都認識 firstboot,那個在安裝後幫助你設置系統的精靈。你可以在 kickstart 檔內的指命部份加入 "firstboot --enable" 或 "firstboot --disable" 來啟用或停用它。

各個終端機所顯示的內容

Alt-F1
使用 text 或 cmdline 模式安裝時的對話方塊
Alt-F2
指命殼的提示符號
Alt-F3
安裝程式所輸出的安裝日誌
Alt-F4
內核及其它程式所輸出的系統日誌
Alt-F5
其它信息
Alt-F7
使用圖像介面安裝時的對話方塊

記錄 %pre 及 %post

當使用 %pre 或 %post 腳本時,你可以輕易地用 --log=/path/to/file 將輸出記錄在一個檔案內

%post --log=/root/my-post-log
echo 'Hello, World!'

下面是另一個同時記錄輸出並將它顯示在畫面上的方法:

%post
exec < /dev/tty3 > /dev/tty3
chvt 3
echo
echo "################################"
echo "# Running Post Configuration   #"
echo "################################"
(
echo 'Hello, World!'
) 2>&1 | /usr/bin/tee /var/log/post_install.log
chvt 1

為防火牆設定多個信任的介面

你可以在防火牆的選項中多次加入 --trust 選項來信任多個介面:

# 啟用 firewall,打開 ssh 連接埠,並信任 eth1 及 eth2
firewall --enable --ssh --trust=eth1 --trust=eth2

令 kickstart 使用指定的網絡介面

當你的系統擁有多過一個的網絡介面時,anaconda 會詢問你要 kickstart 使用哪一個。這個決定可以在開機透過加入 ksdevice 參數來設定。要以 eth0 來進行 kickstart,你只須在內核指命行內加入 ksdevice=eth0

第二個方法是指定 ksdevice=link。這樣,anaconda 就會採用第一個穫得有效連線的介面。

第三個方法在 PXE 模式的安裝下生效。你須要在 PXE 設定檔內加入 IPAPPEND 2 及指定 ksdevice=bootif。這樣,anaconda 就會採用 PXE 啟動時使用的介面(這未必等同第一個穫得有效連線的介面)。

在 kickstart 設定檔內,你亦需要用 network 語句來定義網絡介面。假若你採用第二個或第三個方法,你便無法預知哪個介面會被使用。若果你在 network 語句中沒有指定一個介面,anaconda 將會按照 network 語句內的定義來設置 kickstart 所使用的儀器。

強迫 kickstart 詢問網絡設置

由 CentOS 5 起,有一個未被記載的選項可以在安裝過程啟用網絡設置的提示。在 network 語句內,為 --bootproto=  這個選項放入 query 關鍵字,如下:

network --device=eth0 --bootproto=query

這樣一個對話方塊便會出現,詢問有關 IP 位址及主機名稱的設定。

有用的現成 kickstart 檔

你可以在 https://github.com/CentOS/Community-Kickstarts 找到一堆現成的 kickstart 檔。它們的首要目的是為社群提供一些針對不同部署類型的 kickstart 範例。

Translation of revision 29

zh-tw/TipsAndTricks/KickStart (last edited 2015-01-15 15:07:10 by TimothyLee)