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/TipsAndTricks/KickStart (last edited 2015-01-15 15:09:55 by TimothyLee)