AutoYast2 xml in SLES is similar to kickstart used with Red Hat only in terms of concept which means both of them are used for automating the installation but the syntax and variables used are completely different.
AutoYaST2 is a system for installing one or more SUSE Linux systems automatically and without user intervention. AutoYaST2 installations are performed using an AutoYaST profile with installation and configuration data. That profile can be created using the configuration interface of AutoYaST2 and can be provided to YaST2 during installation in different ways.
Configure General options (timezone, keyboard and mouse)
General options include all the settings related to the installation process and the environment of the installed system.
The mode section configures the behavior of AutoYaST with regard to confirmation and rebooting.
- By default, the user must confirm the auto-installation process. This option allows the user to view and change the settings for a target system before they are committed and can be used for debugging.
- confirm is set to "true" by default to avoid recursive installs when the system schedules a reboot after initial system setup. Only disable confirmation if you want to carry out a fully unattended installation.
- With halt you cause AutoYaST to shut down the machine after all packages have been installed. Instead of a reboot into stage two, the machine is turned off. The boot loader is already installed and all your chroot scripts have run.
- final_halt and final_reboot have been introduced with openSUSE 11.0 and SLES11. You can reboot or halt the machine after installation and configuration are finished at the end of stage 2.
<clock>
<hwclock>UTC</hwclock>
<timezone>Asia/Calcutta</timezone>
</clock>
<keyboard>
<keymap>english-us</keymap>
</keyboard>
<language>en_US</language>
<mode>
<halt config:type="boolean">false</halt>
<forceboot config:type="boolean">false</forceboot>
<final_reboot config:type="boolean">false</final_reboot>
<final_halt config:type="boolean">false</final_halt>
<confirm config:type="boolean">true</confirm>
<second_stage config:type="boolean">true</second_stage>
</mode>
<mouse>
<id>probe</id>
</mouse>
<report>
<messages>
<show config:type="boolean">true</show>
<timeout config:type="integer">10</timeout>
<log config:type="boolean">true</log>
</messages>
<errors>
<show config:type="boolean">true</show>
<timeout config:type="integer">10</timeout>
<log config:type="boolean">true</log>
</errors>
<warnings>
<show config:type="boolean">true</show>
<timeout config:type="integer">10</timeout>
<log config:type="boolean">true</log>
</warnings>
</report>
</general>
Configure bootloader
Below section in the autoyast xml is mandatory, although the highlighted values can be modified accordingly
<activate config:type="boolean">false</activate>
<loader_type>grub</loader_type>
<repl_mbr config:type="boolean">false</repl_mbr>
<global>
<boot_mbr config:type="boolean">true</boot_mbr>
</global>
</bootloader>
Configure Networking, DNS, Routing
- YaST will keep network settings created during installation (via Linuxrc) and/or merge it with network settings from the AutoYaST profile (if defined).
- AutoYaST settings have higher priority than already present configuration files.
- YaST will write ifcfg-* files from profile without removing old ones.
- If there is an empty or no dns and routing section, YaST will keep already present values. Otherwise settings from the profile will be applied.
In the below syntax I am creating a single interface with a DNS server and hostname
<dns>
<dhcp_resolv config:type="boolean">true</dhcp_resolv>
<domain></domain>
<hostname>golinuxhub</hostname>
<nameserver>127.0.0.1</nameserver>
</dns>
<routing>
<ip_forward config:type="boolean">false</ip_forward>
<routes config:type="list">
<route>
<destination>default</destination>
<device>-</device>
<gateway>192.168.1.32</gateway>
<netmask>-</netmask>
</route>
</routes>
</routing>
<interfaces config:type="list">
<interface>
<device>eth0</device>
<startmode>onboot</startmode>
<bootproto>static</bootproto>
<ipaddr>192.168.1.10</ipaddr>
<netmask>255.255.255.224</netmask>
</interface>
</interfaces>
</networking>
Configure NTP
Using the below syntax you can configure your NTP client with the list of NTP servers
<configure_dhcp config:type="boolean">false</configure_dhcp>
<peers config:type="list">
<peer>
<address>10.10.10.102</address>
<initial_sync config:type="boolean">true</initial_sync>
<options></options>
<type>server</type>
</peer>
<peer>
<address>10.10.10.104</address>
<initial_sync config:type="boolean">true</initial_sync>
<options></options>
<type>server</type>
</peer>
</peers>
<start_at_boot config:type="boolean">true</start_at_boot>
<start_in_chroot config:type="boolean">true</start_in_chroot>
</ntp-client>
Create a User
To create a user use syntax as explained below with the encrypted password and it's login shell
<user>
<encrypted config:type="boolean">true</encrypted>
<home>/root</home>
<shell>/bin/bash</shell>
<user_password>/.b.X4RxPGnig</user_password>
<username>root</username>
</user>
</users>
Configure partitioning
To understand more on every syntax used here you can follow the Guide from SuSE.
In the below example I am creating LVM based configiration with root, boot, swap and some other data partitions
<drive>
<initialize config:type="boolean">true</initialize>
<partitions config:type="list">
<!-- part for boot -->
<partition>
<format config:type="boolean" >false</format>
<partition_id config:type="integer" >131</partition_id>
<filesystem config:type="symbol" >ext3</filesystem>
<format config:type="boolean" >true</format>
<mount>/boot</mount>
<size>128M</size>
</partition>
<!-- part for root -->
<partition>
<format config:type="boolean" >false</format>
<lvm_group>system</lvm_group>
<partition_id config:type="integer" >142</partition_id>
<size>max</size>
</partition>
<!-- max alloc root 128 auto -->
</partitions>
<use>all</use>
</drive>
<drive>
<device>/dev/system</device>
<initialize config:type="boolean" >false</initialize>
<is_lvm_vg config:type="boolean" >true</is_lvm_vg>
<lvm2 config:type="boolean" >true</lvm2>
<partitions config:type="list" >
<!-- LV for root -->
<partition>
<filesystem config:type="symbol" >ext3</filesystem>
<format config:type="boolean" >true</format>
<lv_name>root</lv_name>
<mount>/</mount>
<partition_id config:type="integer" >142</partition_id>
<size>800m</size>
</partition>
<!-- LV for tmp -->
<partition>
<filesystem config:type="symbol" >ext3</filesystem>
<format config:type="boolean" >true</format>
<lv_name>tmp</lv_name>
<mount>/tmp</mount>
<partition_id config:type="integer" >142</partition_id>
<size>2048m</size>
</partition>
<!-- LV for var -->
<partition>
<filesystem config:type="symbol" >ext3</filesystem>
<format config:type="boolean" >true</format>
<lv_name>var</lv_name>
<mount>/var</mount>
<partition_id config:type="integer" >142</partition_id>
<size>4096m</size>
</partition>
<!-- LV for opt -->
<partition>
<filesystem config:type="symbol" >ext3</filesystem>
<format config:type="boolean" >true</format>
<lv_name>opt</lv_name>
<mount>/opt</mount>
<partition_id config:type="integer" >142</partition_id>
<size>2048m</size>
</partition>
<!-- LV for swap -->
<partition>
<filesystem config:type="symbol" >swap</filesystem>
<format config:type="boolean" >true</format>
<lv_name>swap</lv_name>
<mount>swap</mount>
<partition_id config:type="integer" >142</partition_id>
</partition>
</partitions>
<pesize>32M</pesize>
<use>all</use>
</drive>
</partitioning>
Configure Software
You can provide a custom list of rpms which you want to be installed or removed during the installation
<kernel>kernel-default</kernel>
<patterns config:type="list">
<pattern>Minimal</pattern>
</patterns>
<packages config:type="list">
<package>update-alternatives</package>
<package>vim-base</package>
<package>vim-data</package>
<package>vim</package>
<package>audit</package>
<package>libltdl7</package>
<package>openssh</package>
<package>man</package>
<package>man-pages</package>
<package>openssl1</package>
<package>libopenssl1_0_0</package>
<package>quota</package>
</packages>
<remove-packages config:type="list">
<package>mpt-firmware</package>
</remove-packages>
</software>
Custom User scripts
By adding scripts to the auto-installation process you can customize the installation according to your needs and take control in different stages of the installation.
In the auto-installation process, five types of scripts can be executed and they will be described here in order of "appearance" during the installation.
All scripts have to be in the <scritps> section.
- pre-scripts (very early, before anything else really happens)
- postpartitioning-scripts (after partitioning and mounting to /mnt but before RPM installation—since openSUSE 11.2 and SLES11 SP3)
- chroot-scripts (after the package installation, before the first boot)
- post-scripts (during the first boot of the installed system, no services running)
- init-scripts (during the first boot of the installed system, all services up and running)
1. pre script
<script>
<filename>my-test.sh</filename>
<interpreter>shell</interpreter>
<source><![CDATA[#!/bin/sh
echo "This is a dummy pre script"
]]>
</source>
</script>
<aiPreScript/>
</pre-scripts>
2. post scripts
<script>
<filename>enable_reboot_on_panic.sh</filename>
<source> <![CDATA[#!bin/sh
echo "This is a dummy post script"
]]>
</source>
</script>
</post-scripts>
3. chroot scripts
<script>
<chrooted config:type="boolean">true</chrooted>
<interpreter>shell</interpreter>
<filename>disable-ipv6.sh</filename>
<source>
<![CDATA[
sysctl -w net.ipv6.conf.all.disable_ipv6=1;
echo "net.ipv6.conf.all.disable_ipv6=1" >> /etc/sysctl.conf;
]]>
</source>
</script>
</chroot-scripts>
There are many more sections which can be used in an autoyast xml file which goes out of this article's scope. For more information you can always follow the SuSE Documentation
I hope the article was useful.