3 创建 AutoYaST 控制文件 #
3.1 收集信息 #
要创建控制文件,您需要收集有关所要安装系统的信息。这包括硬件数据和网络信息等。请确保已收集有关您要安装的计算机的以下信息:
硬盘类型和大小
图形界面和连接的监视器(如果有)
网络接口和 MAC 地址(如果已知,例如使用 DHCP 时)
另外,请校验是否安装 autoyast2-installation 和 autoyast2 。
3.2 使用配置管理系统 (CMS) #
我们提供了基于 YaST 的配置界面,用于创建一个或多个计算机的控制文件。此系统依赖于现有模块,这些模块通常用于在常规操作模式下配置计算机,例如在安装 SUSE Linux Enterprise Server 后进行配置。
配置管理系统可让您轻松创建控制文件,以及管理可在包含多个客户端的联网环境中使用的配置储存库。
3.2.1 创建新控制文件 #
创建 AutoYaST 配置文件的最简单方法是使用现有 SUSE Linux Enterprise Server 系统作为模板。在已安装的系统上,启动 › › 。接下来,从菜单中选择 › 。选择您要包含在配置文件中的系统组件。或者,通过在命令行中运行 sudo yast clone_system
创建包含完整系统配置的配置文件。
这两种方法都会创建文件 /root/autoinst.xml
。在命令行中创建的版本可用于设置在其上创建了配置文件的系统的相同克隆。但是,通常需要调整该文件,才能安装多个非常类似但不完全相同的计算机。为此,可以使用您偏好的文本编辑器/XML 编辑器调整配置文件。
控制文件的几乎所有资源都可以使用配置管理系统进行配置,只存在几种例外情况。该系统具有灵活性,某些资源的配置与 YaST 控制中心提供的配置相同。除了现有模块和用户熟悉的模块以外,我们还创建了新的界面用于完成特殊和复杂的配置,例如分区、一般选项和软件的配置。
此外,使用 CMS 还能保证生成的控制文件的有效性,并可直接使用该控制文件来启动自动安装。
确保已安装配置系统(软件包 autoyast2
),然后使用 YaST 控制中心或者以 root 身份使用以下命令来调用该系统(确保正确设置 DISPLAY
变量,以启动图形用户界面而不是基于文本的界面):
/sbin/yast2 autoyast
3.3 手动创建/编辑控制文件 #
如果您要手动编辑控制文件,请确保它采用有效语法。要检查语法,请使用发行套件自带的工具。例如,要校验文件的格式是否正确(采用有效的 XML 结构),请使用 libxml2
软件包中提供的实用程序 xmllint
:
xmllint <control file>
如果控制文件的格式不正确(例如,某个标记缺少结束部分),xmllint
将报告错误。
要验证控制文件,请使用同名软件包中的工具 jing
。在验证过程中,会检测放错位置或缺少的标记与属性以及错误的属性值。软件包
jing 是随 SUSE Software Development Kit 一起提供的。
jing /usr/share/YaST2/schema/autoyast/rng/profile.rng <control file>
/usr/share/YaST2/schema/autoyast/rng/profile.rng
由软件包 yast2-schema
提供。此文件描述 AutoYaST 配置文件的语法和类。
在继续自动安装之前,请修复此类检查发现的所有错误。如果控制文件无效或格式不正确,将无法启动自动安装过程。
您可以使用系统上提供的任何 XML 编辑器,或者支持 XML 的任何文本编辑器(例如 Emacs 和 Vim)。但是,为许多计算机手动创建控制文件并不是最好的做法;控制文件仅应看作是自动安装引擎与配置管理系统 (CMS) 之间的接口。
内置的 nxml-mode 将 Emacs 转变成了一个具有自动标记填写和验证功能的成熟 XML 编辑器。有关如何设置 nxml-mode 的说明,请参见 Emacs 帮助。
3.4 使用 XSLT 通过脚本创建控制文件 #
如果您有一个模板并想要通过脚本或命令行更改一些设置,请使用 xsltproc
之类的 XSLT 处理器。例如,如果您有一个 AutoYaST 控制文件,而出于任何原因您想要通过脚本填写主机名则可以使用 XSLT。(如果您经常需要执行此操作,应考虑编写操作脚本。)
首先创建一个 XSL 文件:
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:y2="http://www.suse.com/1.0/yast2ns" xmlns:config="http://www.suse.com/1.0/configns" xmlns="http://www.suse.com/1.0/yast2ns" version="1.0"> <xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="no" cdata-section-elements="source"/> <!-- the parameter names --> <xsl:param name="hostname"/> <xsl:param name="domain"/> <xsl:template match="/"> <xsl:apply-templates select="@*|node()"/> </xsl:template> <xsl:template match="y2:dns"> <xsl:copy> <!-- where to copy the parameters --> <domain><xsl:value-of select="string($domain)"/></domain> <hostname><xsl:value-of select="string($hostname)"/></hostname> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="@*|node()" > <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
此文件需要用户以参数的形式提供主机名和域名。
<xsl:param name="hostname"/> <xsl:param name="domain"/>
控制文件的 DNS 部分包含这些参数的副本。这意味着,如果 DNS 部分已包含一个域元素,您将获得另一个域元素,如此会导致冲突。
有关 XSLT 的详细信息,请访问官方网页 www.w3.org/TR/xslt