Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

27.3.3. 预安装脚本

解析 Kickstart 文件后,但安装开始之前,将立即在系统中运行 %pre 脚本。这个部分必须放在 Kickstart 文件末尾,在 第 27.3.1 节 “Kickstart 命令和选项” 中描述的 Kickstart 命令后面,且必须以 %pre 开头并以 % end 结尾。如果您的 Kickstart 文件还包括 %post 部分,则包含 %pre 和 %post 部分的顺序无关紧要。
%pre 脚本可用于激活和配置联网和存储设备。还可以使用安装环境中可用的脚本来运行脚本。如果您在继续安装之前有需要特殊配置的联网和存储,或者具有设置其他日志参数或环境变量的脚本,则添加 %pre 脚本非常有用。使用 %pre 脚本调试问题可能比较困难,因此建议仅在需要时使用 %pre 脚本。
重要
Kickstart 的 %pre 部分会在安装阶段执行,该阶段发生在安装程序镜像(inst.stage2) 后发生:这意味着在 root 切换到安装程序环境(安装程序镜像) 后,在 Anaconda 安装程序本身启动后。然后,应用 %pre 中的配置,可用于从配置的安装仓库中获取软件包,例如:Kickstart 中的 URL。但是,无法使用 配置网络从网络获取镜像(inst.stage2)。
除了安装环境 /sbin 和 / bin 目录中的大多数实用程序外,还可在 %pre 脚本中使用与网络、存储和文件系统相关的命令。
您可以在 %pre 部分中访问网络。但是,此时尚未配置 名称服务,因此只有 IP 地址可以工作,而不能使用 URL。
Kickstart 的预安装脚本部分 无法 管理多个安装树或源介质。必须为每个创建的 Kickstart 文件包含此信息,因为预安装脚本会在安装过程的第二阶段发生。
注意
与安装后脚本不同,安装前脚本不会在 chroot 环境中运行
以下选项可以用来改变预安装脚本的行为。要使用某个选项,请将其附加到脚本开头的 %pre 行中。例如:
%pre --interpreter=/usr/bin/python
--- Python script omitted --
%end
--interpreter=
允许指定不同的脚本语言,如 Python。可以使用系统中可用的脚本语言;在大多数情况下,它们是 /usr/bin/sh、/ usr/bin/bash/usr/bin/python
--erroronfail
显示错误并在脚本失败时暂停安装。错误消息会指示您记录故障原因的位置。
--log=
将脚本的输出记录到指定的日志文件中。例如:
%pre --log=/mnt/sysimage/root/ks-pre.log
以下是 %pre 部分的示例:

例 27.6. %pre 脚本示例

%pre
#!/bin/sh
hds=""
mymedia=""
for file in /proc/ide/h* do
mymedia=`cat $file/media`
if [ $mymedia == "disk" ] ; then
hds="$hds `basename $file`"
fi
done
set $hds
numhd=`echo $#`
drive1=`echo $hds | cut -d' ' -f1`
drive2=`echo $hds | cut -d' ' -f2`

#Write out partition scheme based on whether there are 1 or 2 hard drives
if [ $numhd == "2" ] ; then
#2 drives
echo "#partitioning scheme generated in %pre for 2 drives" > /tmp/part-include
echo "clearpart --all" >> /tmp/part-include
echo "part /boot --fstype xfs --size 75 --ondisk hda" >> /tmp/part-include
echo "part / --fstype xfs --size 1 --grow --ondisk hda" >> /tmp/part-include
echo "part swap --recommended --ondisk $drive1" >> /tmp/part-include
echo "part /home --fstype xfs --size 1 --grow --ondisk hdb" >> /tmp/part-include
else
#1 drive
echo "#partitioning scheme generated in %pre for 1 drive" > /tmp/part-include
echo "clearpart --all" >> /tmp/part-include
echo "part /boot --fstype xfs --size 75" >> /tmp/part-include
echo "part swap --recommended" >> /tmp/part-include
echo "part / --fstype xfs --size 2048" >> /tmp/part-include
echo "part /home --fstype xfs --size 2048 --grow" >> /tmp/part-include
fi
%end
此脚本决定了系统中的硬盘驱动器数量,并根据它是否具有一个或多个驱动器来编写具有不同分区方案的文本文件。不在 Kickstart 文件中有一组分区命令,包括以下行:
%include /tmp/part-include
将使用 脚本中选择的分区命令。