AutoYast ist eine praktische Sache zum automatischen Installieren von SUSE Linux (und anderen Linuxen).
In der autoinst.xml werden die Installations-Parameter hinterlegt, der Ort der autoinst.xml-Datei wird dem Kernel übergeben und später vom SUSE-Installationsprogramm ausgewertet.

Leider sind die langen Dateien nicht immer gut lesbar, und bei mehreren Versionen wird ein diff schnell mühsam, zum Beispiel wenn die Blöcke innerhalb der Autoyast-Dateien nicht in der gleichen Reihenfolge eingefügt wurden.

Aus diesem Grund lagere ich Abschnitte in einzelne Dateien aus...

Wie wird so eine autoinst.xml überhaupt angewendet?
Das Folgende Beispiel zeigt die Verwendung mit virt-install:

#! /bin/bash
virt-install \
--hvm \
--name MySLESVM1 \
--vcpus=2 \
--memory=4096 \
--location "http://sles-install-server/SLES12-SP1-x86_64/" \
--network bridge=br0 \
--disk path="/dev/vg1/lv_myserver1_MySLESVM1 \
--autostart \
--extra-args "autoyast=http://sles-autoyast-server/autoinst.xml install=http://sles-install-server/SLES12-SP1-x86_64/ ..."

Der entscheidende Aufruf ist "autoyast=", hier wird der Pfad zur AutoYast-Datei angegeben.

Wie sieht eine normale autoinst.xml aus?

<?xml version="1.0"?>
<!DOCTYPE profile>
<profile xmlns="http://www.suse.com/1.0/yast2ns" xmlns:config="http://www.suse.com/1.0/configns">
  <add-on>
    <add_on_products config:type="list"/>
  </add-on>
  <bootloader>
    <device_map config:type="list">
      <device_map_entry>
        <firmware>hd0</firmware>
        <linux>/dev/sda</linux>
      </device_map_entry>
    </device_map>

    ...teils mehrere 1000 Zeilen Code...

      </password_settings>
      <shell>/bin/bash</shell>
      <uid>1</uid>
      <user_password>*</user_password>
      <username>bin</username>
    </user>
  </users>
</profile>

Wie sieht es aus, wenn wir die autoinst.xml in mehrere Dateien aufteilen?

Dazu müssen wir zuerst die Zeile "<profile..." um diesen Eintrag erweitern:

"xmlns:xinclude="http://www.w3.org/2001/XInclude";"

anschließend fügen wir mit XInclude Verweise auf unsere einzelnen Dateien ein:

<?xml version="1.0"?>
<!DOCTYPE profile>
<profile xmlns="http://www.suse.com/1.0/yast2ns" xmlns:config="http://www.suse.com/1.0/configns" xmlns:xinclude="http://www.w3.org/2001/XInclude">
  <xi:include href="http://sles-autoyast-server/partitioning-xvda.xml" />
  <xi:include href="http://sles-autoyast-server/users.xml" />
  <xi:include href="http://sles-autoyast-server/suse_register.xml" />
  ...
</profile>

Die partitioning-xvda.xml sieht so aus:

Statt mit "<profile..." beginnt die Datei mit dem Namen des Konfigurations-Blocks, hier "<partitioning...". config:type="list" ist nur dann mit ein zu fügen, wenn es im Original-Block vorhanden war.

<partitioning config:type="list" xmlns="http://www.suse.com/1.0/yast2ns" xmlns:config="http://www.suse.com/1.0/configns" xmlns:xinclude="http://www.w3.org/2001/XInclude">
  <drive>
    <device>/dev/xvda/</device>

    ...

    
  </drive>
</partitioning>

Das war schon Alles :-)