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
Graphical interface and attached monitor, if any
Network interface and MAC address if known (for example, when using DHCP)
Also verify that both autoyast2-installation and autoyast2 are installed.
3.2 Using the configuration management system (CMS) #
To create the control file for one or more computers, a configuration interface based on YaST is provided. This system depends on existing modules which are usually used to configure a computer in regular operation mode, for example, after SUSE Linux Enterprise Server is installed.
The configuration management system lets you easily create control files and manage a repository of configurations for use in a networked environment with multiple clients.
3.2.1 Creating a new control file #
The easiest way to create an AutoYaST profile is to use an existing
SUSE Linux Enterprise Server system as a template. On an already installed system, launch
› › . Then select
› from the menu. Choose the system components
you want to include in the profile. Alternatively, create a profile
containing the complete system configuration by launching
› › or running
sudo yast clone_system
from the command line.
Both methods will create the file /root/autoinst.xml
.
The cloned profile can be used to set up an identical clone of the system
it was created from. However, you will usually want to adjust the file to
allow for installing multiple machines that are very similar, but not
identical. This can be done by adjusting the profile with your favorite
text/XML editor.
Be aware that the profile might contain sensitive information such as password hashes and registration keys.
Carefully review the exported profiles and make sure to keep file permissions restrictive.
With some exceptions, almost all resources of the control file can be configured using the configuration management system. The system offers flexibility and the configuration of some resources is identical to the one available in the YaST control center. In addition to the existing and familiar modules new interfaces were created for special and complex configurations, for example for partitioning, general options and software.
Furthermore, using a CMS guarantees the validity of the resulting control file and its direct use for starting automated installation.
Make sure the configuration system is installed (package
autoyast2
) and call it using the
YaST control center or as root with the following command (make sure the
DISPLAY
variable is set correctly to start the graphical
user interface instead of the text-based one):
/sbin/yast2 autoyast
3.3 Creating/editing a control file manually #
If editing the control file manually, make sure it has a valid syntax. To
check the syntax, use the tools already available on the distribution. For
example, to verify that the file is well-formed (has a valid XML structure),
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. The
jing package is provided with the SUSE Software Development Kit.
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-default
. This
file describes the syntax and classes of an AutoYaST profile.
AutoYaST can be extended by other products and modules, but the schema does not contain the specification for those extensions. As a consequence, when AutoYaST is given a profile that uses one of those extensions, it might report the profile as invalid.
Thus, starting in SUSE Linux Enterprise Server
SP3,
AutoYaST does not validate top-level unknown sections, and ignores them. For
example, in the example below, <sap-inst>
is not
validated. The rest is validated as usual.
<general> <mode> <confirm config:type="boolean">true</confirm> </mode> </general> <sap-inst> <!-- this section is not validated -->> </sap-inst>
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). However, it is not optimal to create the control file manually for multiple machines, and it should only be seen as an interface between the autoinstallation engine and the Configuration Management System (CMS).
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.4 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.5 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 Server
15
SP3, 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.5.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.5.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.5.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.