2.4. 模板
Kickstart 模板可让您在您的 kickstart 文件中添加变量、片断以及流量控制报告,比如
for 循环和 if 报告。您可以使用 cheetah 工具得到达到此目的。
模板会对您有帮助的理由如下:
- 在多个 kickstart 间重新使用某个 kickstart 的具体部分,比如磁盘分区部分。
- 在多个 kickstart 间您可能要执行一些
%post动作。 - 在多个服务器间定义片断,比如 DNS 服务器、proxy 服务器和 web 服务器。例如 web 服务器可能需要定义以下片断:
httpd mod_ssl mod_python
httpd mod_ssl mod_pythonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您要创建 web 服务器侧写,请在 Kickstart 文件的%package部分包含 web 服务器片断。如果您要在 web 服务器和 proxy 服务器中同时拥有侧写,您应该在软件包部分包含二者的片断。然后如果您要在 web 服务器片断中添加另一个软件包,比如mod_perl,您更新该片断后,就会更新所有使用那个片断的侧写。
变量
模板可让您定义在 kickstart 文件中使用的变量。变量是可以继承的,这样就可在一层中设定它们并覆盖更低的层。因此,如果在系统层定义了某个变量,那么它就会覆盖在侧写或者 kikcstart 树层中定义的同一变量。同样,如果在侧写层定义了某个变量,那么它将会覆盖在 kickstart 树层定义的同一变量。
注意
注:无法为自动生成的 kickstart 树定义 kickstart 树变量,比如那些在您执行 satellite 同步时生成的树。
片断(Snippet)
片断可重复使用多个 kickatart 模板中的代码片。它们可衍生出很多行,其中包含变量。可使用文本 $SNIPPET('片段名称') 将其包含在 kickstart 树中。您可以为软件包列表创建片断,可以是 %post 脚本,或者是通常包含在 kickstart 文件中的文本。
要管理片断,请导航至 。
「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')
$SNIPPET('spacewalk/1/snippet_name')
要确定用来在 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
%post
echo $foo > /tmp/foo.txt
如果不转义
$,则模板生成引擎就会尝试查找名为 $foo 的变量,且因为 foo 不存在而失败。
转义
$ 最简单的方法是使用反斜杠字符(\):
%post echo \$foo > /tmp/foo.txt
%post
echo \$foo > /tmp/foo.txt
这样就会将
\$foo 变为 $foo。
第二个方法是将
#raw ... #endraw 中的整个 bash 脚本打包,如下
%post #raw echo $foo > /tmp/foo.txt #end raw
%post
#raw
echo $foo > /tmp/foo.txt
#end raw
最后一个方法是在您 kickstart 模板的第一行中包含
#errorCatcher Echo。这可让模板引擎忽略所有不存在的变量并照原样输出其文本。在使用向导模式的 kickstart 中已经包含此选项,并可添加到手动创建的所有原始 kickstart 中。