A.3. Kickstart 文件中的脚本
kickstart 文件可以包括以下脚本:
-
%pre
-
%pre-install
-
%post
本节提供有关脚本的以下详情:
- 执行时间
- 可以包含在脚本中的命令类型
- 脚本的目的
- 脚本选项
A.3.1. %pre 脚本
%pre
脚本在加载 Kickstart 文件后立即在系统中运行,但在完全解析并开始安装之前。每个部分必须以 %pre
开头并以 %end
结尾。
%pre
脚本可用于激活和配置联网和存储设备。还可以使用安装环境中可用的脚本来运行脚本。如果您在继续安装之前有需要特殊配置的联网和存储,或者具有设置其他日志参数或环境变量的脚本,则添加 %pre
脚本非常有用。
使用 %pre
脚本调试问题可能比较困难,因此建议仅在需要时使用 %pre
脚本。
Kickstart 的 %pre
部分会在安装阶段执行,其在获取安装程序镜像(inst.stage2
) 后发生:这意味着在 root 切换到安装程序环境(安装程序镜像)后,以及 Anaconda
安装程序本身启动 后 。然后,应用 %pre
中的配置,可用于从配置的安装存储库中获取软件包,例如:通过Kickstart 中的 URL。但是,不能 用于配置网络从网络获取镜像(inst.stage2
)。
除了安装环境 /sbin
和 /bin
目录中的大多数实用程序外,还可在 %pre
脚本中使用与网络、存储和文件系统相关的命令。
您可以在 %pre
部分中访问网络。然而,命名服务还没有被配置,所以只能使用 IP 地址,而不能使用 URL。
pre 脚本不会在 chroot 环境中运行。
A.3.1.1. %pre 脚本部分选项
以下选项可以用来改变预安装脚本的行为。要使用某个选项,请将其附加到脚本开头的 %pre
行中。例如:
%pre --interpreter=/usr/libexec/platform-python -- Python script omitted -- %end
--interpreter=
允许指定不同的脚本语言,如 Python。可以使用系统中可用的脚本语言;在大多数情况下,它们是
/usr/bin/sh
、/usr/bin/bash
和/usr/libexec/platform-python
。请注意,
platform-python
解释器使用 Python 版本 3.6。对于新路径和版本,您必须将您的针对以前的 RHEL 版本的 Python 脚本进行更改,以适用于新的路径和版本。另外,platform-python
用于系统工具:使用安装环境之外的python36
软件包。有关 Red Hat Enterprise Linux 中 Python 的详情,请参考 配置基本系统设置 中的 Python 简介。--erroronfail
-
显示错误并在脚本失败时暂停安装。错误消息会指示您记录故障原因的位置。安装的系统可能会处于不稳定且无法启动的状态。您可以使用
inst.nokill
选项来调试脚本。 --log=
将脚本的输出记录到指定的日志文件中。例如:
%pre --log=/tmp/ks-pre.log
A.3.2. %pre-install 脚本
pre-install
脚本中的命令会在以下任务完成后运行:
- 系统已被分区
- 文件系统创建并挂载到 /mnt/sysroot 下
- 网络已根据任何引导选项和 kickstart 命令进行配置
每个 %pre-install
部分必须以 %pre-install
开头并以 %end
结尾。
%pre-install
脚本可用于修改安装,并在软件包安装之前添加带有保证 ID 的用户和组。
建议您在安装所需的任何修改中使用 %post
脚本。只有在 %post
脚本对所需修改不够时才使用 %pre-install
脚本。
注意: pre-install
脚本不会在 chroot 环境中运行。
A.3.2.1. %pre-install script 部分选项
以下选项可用于更改 pre-install
脚本的行为。要使用某个选项,请将其附加到脚本开头的 %pre-install
行中。例如:
%pre-install --interpreter=/usr/libexec/platform-python -- Python script omitted -- %end
请注意,您可以有多个 %pre-install
部分,它们具有相同或不同的解释器。它们按照它们在 Kickstart 文件中的顺序进行评估。
--interpreter=
允许指定不同的脚本语言,如 Python。可以使用系统中可用的脚本语言;在大多数情况下,它们是
/usr/bin/sh
、/usr/bin/bash
和/usr/libexec/platform-python
。请注意,
platform-python
解释器使用 Python 版本 3.6。对于新路径和版本,您必须将您的针对以前的 RHEL 版本的 Python 脚本进行更改,以适用于新的路径和版本。另外,platform-python
用于系统工具:使用安装环境之外的python36
软件包。有关 Red Hat Enterprise Linux 中 Python 的详情,请参考 配置基本系统设置 中的 Python 简介。--erroronfail
-
显示错误并在脚本失败时暂停安装。错误消息会指示您记录故障原因的位置。安装的系统可能会处于不稳定且无法启动的状态。您可以使用
inst.nokill
选项来调试脚本。 --log=
将脚本的输出记录到指定的日志文件中。例如:
%pre-install --log=/mnt/sysroot/root/ks-pre.log
A.3.3. %post 脚本
%post 脚本是安装后脚本,可在安装完成后运行,但在第一次重启系统前运行。您可以使用这部分来运行任务,比如系统订阅。
您可以添加系统在安装结束后但在第一次重启该系统之前要运行的命令,。此部分必须以 %post
开头并以 %end
结尾。
%post
部分可用于安装其他软件或配置其他名称服务器等功能。post-install 脚本是一个 chroot
环境中运行的,因此,从安装介质中复制脚本或 RPM 软件包等任务在默认情况下不起作用。您可以使用 --nochroot
选项更改此行为,如下所述。然后 %post
脚本将在安装环境中运行,而不是在安装的目标系统中的 chroot
中运行。
由于安装后脚本在 chroot
环境中运行,因此大多数 systemctl
命令将拒绝执行任何操作。
请注意,在执行 %post
部分的过程中,仍然必须插入安装介质。
A.3.3.1. %post 脚本部分选项
以下选项可以用来改变安装后脚本的行为。要使用某个选项,请将其附加到脚本开头的 %post
行中。例如:
%post --interpreter=/usr/libexec/platform-python -- Python script omitted -- %end
--interpreter=
允许指定不同的脚本语言,如 Python。例如:
%post --interpreter=/usr/libexec/platform-python
可以使用系统中可用的脚本语言;在大多数情况下,它们是
/usr/bin/sh
、/usr/bin/bash
和/usr/libexec/platform-python
。请注意,
platform-python
解释器使用 Python 版本 3.6。对于新路径和版本,您必须将您的针对以前的 RHEL 版本的 Python 脚本进行更改,以适用于新的路径和版本。另外,platform-python
用于系统工具:使用安装环境之外的python36
软件包。有关 Red Hat Enterprise Linux 中 Python 的详情,请参考 配置基本系统设置 中的 Python 简介。--nochroot
允许您指定在 chroot 环境之外运行的命令。
以下示例将 /etc/resolv.conf 文件复制到刚安装的文件系统中。
%post --nochroot cp /etc/resolv.conf /mnt/sysroot/etc/resolv.conf %end
--erroronfail
-
显示错误并在脚本失败时暂停安装。错误消息会指示您记录故障原因的位置。安装的系统可能会处于不稳定且无法启动的状态。您可以使用
inst.nokill
选项来调试脚本。 --log=
将脚本的输出记录到指定的日志文件中。请注意,无论您是否使用
--nochroot
选项,日志文件的路径都必须考虑。例如,没有--nochroot
:%post --log=/root/ks-post.log
使用
--nochroot
:%post --nochroot --log=/mnt/sysroot/root/ks-post.log
A.3.3.2. 示例:在安装后脚本中挂载 NFS
这个 %post
部分的示例挂载 NFS 共享并执行位于 /usr/new-machines/
上的名为 runme
的脚本。请注意,在 Kickstart 模式中不支持 NFS 文件锁定,因此需要使用 -o nolock
选项。
# Start of the %post section with logging into /root/ks-post.log %post --log=/root/ks-post.log # Mount an NFS share mkdir /mnt/temp mount -o nolock 10.10.0.2:/usr/new-machines /mnt/temp openvt -s -w -- /mnt/temp/runme umount /mnt/temp # End of the %post section %end
A.3.3.3. 示例:将 subscription-manager 作为安装后脚本运行
Kickstart 安装中最常用的安装脚本之一就是使用 Red Hat Subscription Manager 自动注册安装的系统。以下是 %post
脚本中的自动订阅示例:
%post --log=/root/ks-post.log subscription-manager register --username=admin@example.com --password=secret --auto-attach %end
subscription-manager 命令行脚本在红帽订阅管理服务器(客户门户网站订阅管理、Satellite 6 或者 CloudForms System Engine)中注册系统。这个脚本还可用来自动在该系统中分配或者附加与该系统最匹配的订阅。在客户门户网站中注册时,请使用红帽网络登录证书。当在 Satellite 6 或者 CloudForms System Engine 中注册时,您可能需要指定更多 subscription-manager 选项 --serverurl
、--org
、--environment
以及您的本地管理员提供的凭证。请注意,以 --org --activationkey
组合格式的凭证是避免在共享的 kickstart 文件中公开 --username --password
值的好方法。
注册命令中可以使用附加选项为系统设置首选服务等级,并为那些需要在旧流中继续修复的延长更新支持订阅客户限制对特定 RHEL 次要版本的更新和勘误。
另请参阅红帽客户门户网站中的如何在 kickstart 文件中使用 subscription-manager? 文章来了解有关在 Kickstart %post
部分中使用 subscription-manager
的更多信息。