3 Creating an AutoYaST control file #
3.1 Collecting information #
To create the control file, you need to collect information about the systems you are going to install. This includes hardware data and network information among other things. Make sure you have the following information about the machines you want to install:
Hard disk types and sizes
Network interface and MAC address if known (for example, when using DHCP)
3.2 Creating/editing a control file manually #
You need to create the control file manually and ensure that it has a valid
syntax. To verify if the file has a valid XML structure, you can use the
utility xmllint
available with the
libxml2
package:
xmllint <control file>
If the control file is not well formed, for example, if a tag is not closed,
xmllint
will report the errors.
To validate the control file, use the tool jing
from the
package with the same name. During validation, misplaced or missing tags and
attributes and wrong attribute values are detected.
jing /usr/share/YaST2/schema/autoyast/rng/profile.rng <control file>
/usr/share/YaST2/schema/autoyast/rng/profile.rng
is
provided by the package yast2-schema-micro
. This file
describes the syntax and classes of an AutoYaST profile.
Before going on with the autoinstallation, fix any errors resulting from such checks. The autoinstallation process cannot be started with an invalid and not well-formed control file.
You can use any XML editor available on your system or any text editor with XML support (for example, Emacs, Vim). .
The built-in nxml-mode turns Emacs into a fully-fledged XML editor with automatic tag completion and validation. Refer to the Emacs help for instructions on how to set up nxml-mode.
3.3 Creating a control file via script with XSLT #
If you have a template and want to change a few things via script or command
line, use an XSLT processor like xsltproc
. For example,
if you have an AutoYaST control file and want to fill out the host name via
script for any reason. (If doing this often, you should consider scripting
it.)
First, create an XSL file:
<?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>
This file expects the host name and the domain name as parameters from the user.
<xsl:param name="hostname"/> <xsl:param name="domain"/>
There will be a copy of those parameters in the DNS section of the control file. This means that if there already is a domain element in the DNS section, you will get a second one, which will cause conflicts.
For more information about XSLT, go to the official Web page www.w3.org/TR/xslt
3.4 Checking a control file #
Depending on the use case, creating an AutoYaST profile can be difficult, especially if you build a dynamic profile using rules/classes, ERB templates or pre-scripts. For more information, see Part III, “Managing mass installations with dynamic profiles”.
Starting with SUSE Linux Enterprise Micro
5.1, AutoYaST validates the profile
during the installation, reporting any problem found to the user. Although
it is recommended to check whether the profile is correct or not, you can
disable this behavior by setting the
YAST_SKIP_XML_VALIDATION
boot parameter to
1
.
Moreover, to simplify the testing and debugging process, AutoYaST offers the
check-profile
command, which takes care of fetching,
building and, optionally, importing the profile to detect any potential
problem.
Although this command uses the same approach as the installation, the results may vary depending on the differences between the current system and installation media: YaST package versions, architecture, etc.
You must be careful when running this command because pre-installation
scripts and ERB code would run as the root
user. Use
only profiles that you trust.
3.4.1 Basic checks #
The simplest way to use this command is just to read and validate the profile:
>
sudo
yast2 autoyast check-profile filename=autoinst.xml output=result.xml
The result.xml
file contains the result of evaluating
the profile. Bear in mind that, even if you do not use any advanced
feature, the content of autoinst.xml
and
result.xml
may differ. The reason is that AutoYaST does
some cleaning up when it processes the profile.
check-profile
can deal with remote files too:
>
sudo
yast2 autoyast check-profile filename=http://192.168.1.100/autoinst.xml output=result.xml
3.4.2 Running pre-scripts #
Optionally, AutoYaST can run the scripts that are included in the profile,
reporting any error found during the execution. This is especially relevant
if you are using a pre-installation script to modify the profile. To enable
this feature, you need to set the run-scripts
option to
true
.
>
sudo
yast2 autoyast check-profile filename=http://192.168.1.100/autoinst.xml output=result.xml run-scripts=true
You must be careful when enabling the run-scripts
option, because the scripts will run as root and they may affect the
current system.
3.4.3 Importing the profile #
It is possible to face some problems when importing a valid profile, even if it is correct. The reason is that AutoYaST does not perform any logic check when fetching, building and validating the profile.
To anticipate such problems, the check-profile
command
imports the profile and reports problems that it has detected. As it may
take a while, you can disable this behavior by setting the
import-all
option to false
.
>
sudo
yast2 autoyast check-profile filename=http://192.168.1.100/autoinst.xml output=result.xml import-all=false
Importing the profile is a safe operation and does not alter the underlying system in any way.