2 AutoYaST 控制文件 #
2.1 简介 #
控制文件也称为配置文件,是单个系统的配置说明。它由带有属性的资源集构成,包括对复杂结构(例如列表、记录、树和大型嵌入式对象或参照对象)的支持。
SLES 12 和 openSUSE Leap 42.0 中引入了许多重大更改,例如,切换到 systemd 和 GRUB 2 的功能。这些变化同样需要在 AutoYaST 中进行根本性的更改。因此,您无法使用 SLES 11 上创建的 AutoYaST 控制文件来安装 SUSE Linux Enterprise Server 15 SP4,反之亦然。
2.2 格式 #
XML 配置格式提供简单易学的一致文件结构,并且在尝试配置新系统时也很容易记住这种结构。
AutoYaST 控制文件使用 XML 来描述系统安装和配置。XML 是一种常用标记,许多用户都很熟悉该语言的概念以及用于处理 XML 文件的工具。如果您要编辑现有控制文件,或者要创建一个控制文件,强烈建议您对该控制文件进行验证。为此,可以使用 xmllint 或 jing 等 XML 验证解析器(请参见第 3.3 节 “手动创建/编辑控制文件”)。
以下示例演示了一个 XML 格式的控制文件:
<?xml version="1.0"?>
<!DOCTYPE profile>
<profile
xmlns="http://www.suse.com/1.0/yast2ns"
xmlns:config="http://www.suse.com/1.0/configns">
<partitioning config:type="list">
<drive>
<device>/dev/sda</device>
<partitions config:type="list">
<partition>
<filesystem config:type="symbol">btrfs</filesystem>
<size>10G</size>
<mount>/</mount>
</partition>
<partition>
<filesystem config:type="symbol">xfs</filesystem>
<size>120G</size>
<mount>/data</mount>
</partition>
</partitions>
</drive>
</partitioning>
<scripts>
<pre-scripts>
<script>
<interpreter>shell</interpreter>
<filename>start.sh</filename>
<source>
<![CDATA[
#!/bin/sh
echo "Starting installation"
exit 0
]]>
</source>
</script>
</pre-scripts>
</scripts>
</profile>2.3 结构 #
下面是基本控制文件容器的示例,本章稍后将解释其实际内容。
<?xml version="1.0"?> <!DOCTYPE profile> <profile xmlns="http://www.suse.com/1.0/yast2ns" xmlns:config="http://www.suse.com/1.0/configns"> <!-- RESOURCES --> </profile>
<profile> 元素(根节点)包含一个或多个相异资源元素。允许的资源元素在纲要文件中指定
2.3.1 资源和属性 #
资源元素包含多个相异的属性和资源元素、同一资源元素的多个实例,或者为空。资源元素的允许内容在纲要文件中指定。
属性元素为空,或者包含一个文本值。每个资源元素中允许的属性元素和值在纲要文件中指定
一个元素可以是其他元素的一个容器(资源),也可以包含一个文本值(属性),但永远不会同时以这两种形式存在。此项限制在纲要文件中指定。包含多个值的配置组件必须以属性值中的嵌入式列表形式或者以嵌套式资源的形式来表示。
经过分析的数据模型中将不存在空元素(例如 <foo></foo> 或 <bar/>)。通常会将这种元素解释为需要提供合理的默认值。如果您需要明确为空的字符串,请使用 CDATA 部分:<foo><! [CDATA[]]></foo>。
2.3.2 嵌套式资源 #
嵌套式资源元素允许在任何级别构建配置组件的树形结构。
有两种嵌套式资源:映射和列表。映射(也称为关联性数组、哈希或字典)包含按标记名称标识的混合内容。列表或数组中的所有项具有相同的类型。
...
<drive>
<device>/dev/sda</device>
<partitions config:type="list">
<partition>
<size>10G</size>
<mount>/</mount>
</partition>
<partition>
<size>1G</size>
<mount>/tmp</mount>
</partition>
</partitions>
</drive>
....
在以上示例中,drive 资源是由 device 属性和 partitions 资源构成的映射。partitions 资源是包含多个 partition 资源实例的列表。每个 partition 资源是包含 size 和 mount 属性的映射。
嵌套式资源的默认类型是映射,不过您可以根据自己的需要指定其类型。必须使用 config:type="list" 属性将列表标记为列表类型。
从 SUSE Linux Enterprise Server 15 SP3 开始,可使用属性 t 代替 config:type 来指定元素类型。
<mode t="boolean">true</mode>
2.3.3 属性 #
使用全局属性 (attribute) 来定义资源和属性 (property) 中的元数据。属性用于定义上下文切换。如前面的章节中所示,它们还可用于命名和键入属性。属性位于独立的名称空间中,因此无需将其视为默认名称空间中的保留字。
config:type 属性 (attribute) 用于确定所分析数据模型中的资源或属性 (property) 的类型。对于资源,列表需要 list 类型,而映射则是不需要属性的默认类型。有一个例外。如果映射为空,需要将其标记为映射,这样便不会将其与单纯的字符串值混淆。
<general t="map" />
对于属性,可以使用 boolean、symbol 和 integer,默认类型为 string。
如上所述,除了 map 和 string 值外,其他属性都不是可选属性。之所以属性有时看似可选,是因为纲要的各个部分在使用数据类型方面具有很大的不一致性。在某些位置枚举由符号表示,而在其他位置则需要以字符串表示。一个资源需要 config:type="integer",而另一个资源则是分析字符串属性中的数字。有些资源使用 config:type="boolean",还有些资源则需要 yes 甚至 1。如有疑问,请查阅纲要文件。