2.4. 模板


Kickstart 模板可让您在您的 kickstart 文件中添加变量、片断以及流量控制报告,比如 for 循环和 if 报告。您可以使用 cheetah 工具得到达到此目的。
模板会对您有帮助的理由如下:
  • 在多个 kickstart 间重新使用某个 kickstart 的具体部分,比如磁盘分区部分。
  • 在多个 kickstart 间您可能要执行一些 %post 动作。
  • 在多个服务器间定义片断,比如 DNS 服务器、proxy 服务器和 web 服务器。例如 web 服务器可能需要定义以下片断:
    httpd
    mod_ssl
    mod_python
    
    Copy to Clipboard Toggle word wrap
    如果您要创建 web 服务器侧写,请在 Kickstart 文件的 %package 部分包含 web 服务器片断。如果您要在 web 服务器和 proxy 服务器中同时拥有侧写,您应该在软件包部分包含二者的片断。然后如果您要在 web 服务器片断中添加另一个软件包,比如 mod_perl,您更新该片断后,就会更新所有使用那个片断的侧写。
变量

模板可让您定义在 kickstart 文件中使用的变量。变量是可以继承的,这样就可在一层中设定它们并覆盖更低的层。因此,如果在系统层定义了某个变量,那么它就会覆盖在侧写或者 kikcstart 树层中定义的同一变量。同样,如果在侧写层定义了某个变量,那么它将会覆盖在 kickstart 树层定义的同一变量。

注意

注:无法为自动生成的 kickstart 树定义 kickstart 树变量,比如那些在您执行 satellite 同步时生成的树。
片断(Snippet)

片断可重复使用多个 kickatart 模板中的代码片。它们可衍生出很多行,其中包含变量。可使用文本 $SNIPPET('片段名称') 将其包含在 kickstart 树中。您可以为软件包列表创建片断,可以是 %post 脚本,或者是通常包含在 kickstart 文件中的文本。

要管理片断,请导航至「系统」 「Kickstart」 「Kickstart 片断(Kickstart Snippet)」
「Kickstart 片断」页面显示一些不能编辑的默认片断,但所有机构都可以使用它们。默认片断可在编写或者上传到 RHN Satellite 服务器的 kickstart 文件中使用。默认片断是保存在 RHN Satellite 服务器文件系统的 /var/lib/cobbler/snippets/ 目录中。/var/lib/rhn/kickstarts/wizard/ 中还有一些向导模式的 kickstart 模板,其中解释了不同的默认片断及其工作原理。
redhat_register 片断是 kickstart 的一部分,用于在 RHN Satellite 服务器中注册机器的默认片断。它使用名为 redhat_management_key 的变量注册机器。要使用这个片断,请在系统、侧写或者发行层设定 redhat_management_key 变量,并在 kickstart 文件的 %post 部分添加 $SNIPPET('redhat_register')。RHN Satellite 服务器生成的所有向导类型的 kickstart 都包含在 %post 部分的这个片断中。
「自定义片断」标签可让您查看并编辑您的机构生成且使用的片断。您可以点击 创建新片断 按钮生成新片断。自定义片断保存在 /var/lib/rhn/kickstarts/snippets/ 目录中。RHN Satellite 为不同机构在不同目录中保存片断,因此自定义片断将会被保存在类似以下名称的目录中,其中 1 为机构 ID:
$SNIPPET('spacewalk/1/snippet_name')
Copy to Clipboard Toggle word wrap
要确定用来在 kickstart 中插入片断的文本,请查看片断列表中的「片断宏」栏,或者在片断详情页中查看。

注意

位于全局层的片断不会与变量共享同一继承结构。但是可使用片断中的变量在系统请求 kickstart 时更改其行为方式。

图 2.3. Kickstart 片断

转义特殊字符

可在生成模板的过程中使用 $# 字符指定变量和控制流。如果您需要在脚本中出于其他目的使用这些字符,则需要将其转义以免将其识别为变量。有几个转义方法可用:

  • 在每个要在生成模板的过程中忽略的 $ 或者 # 实例前使用反斜杠(\)。
  • 使用 #raw ... #endraw 打包整个脚本
    所有使用向导类型 kickstart 所生成的 %pre%post 脚本都默认使用 #raw...#endraw 打包。这可在编辑 %post 或者 %pre 脚本时使用「模板」复选框切换。
  • 在该片断的第一行中包含 #errorCatcher Echo

例 2.1. 在模板中转义特殊字符

这个示例论述了如何在 kickstart 模板中转义特殊字符。
%post 部分插入以下 bash 脚本:
%post 
echo $foo > /tmp/foo.txt
Copy to Clipboard Toggle word wrap
如果不转义 $,则模板生成引擎就会尝试查找名为 $foo 的变量,且因为 foo 不存在而失败。
转义 $ 最简单的方法是使用反斜杠字符(\):
%post 
echo \$foo > /tmp/foo.txt
Copy to Clipboard Toggle word wrap
这样就会将 \$foo 变为 $foo
第二个方法是将 #raw ... #endraw 中的整个 bash 脚本打包,如下
%post 
#raw  
echo $foo > /tmp/foo.txt 
#end raw
Copy to Clipboard Toggle word wrap
最后一个方法是在您 kickstart 模板的第一行中包含 #errorCatcher Echo。这可让模板引擎忽略所有不存在的变量并照原样输出其文本。在使用向导模式的 kickstart 中已经包含此选项,并可添加到手动创建的所有原始 kickstart 中。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat