Automated Installation Using Agama
This article describes how to perform automated, unattended installation of SUSE Linux Enterprise Server for SAP applications using Agama on both bare metal and virtual machines. Agama is a service-based installer that reads a JSON or Jsonnet profile describing the target system—partitioning, networking, software selection, user accounts and more—and installs accordingly, with a high level of backward compatibility for existing AutoYaST profiles. Read this article to understand how to plan, customize and start such an installation for consistent, efficient bulk deployments.
Prerequisites:
A bare-metal server or a virtual machine. For server installations without any desktop environment, SUSE recommends a minimum of 1 CPU, 2 GB memory and 32 GB storage (which includes storage for Btrfs snapshots in the root partition, swap space, and storage for software packages).
An image file for the product you want to install, downloaded from the SUSE Customer Center.
An active registration code for the product you want to install. You can generate a registration code for the product and activate its subscription for your organization at the SUSE Customer Center. Registering the product gives you access to the latest maintenance and security updates.
Note: Optional registrationCertain images that are signed with the developer's key may allow you to skip registration before or during installation. Besides, certain images may contain all installable packages for your operating system that you can use as an offline package repository. In such cases, you may not need an active registration code before installation. However, if you use software packages from the official online repositories, SUSE recommends registering your product with the SUSE Customer Center.
1 Introduction to automated installation using Agama #
Agama is a service-based Linux installer built to support both interactive and unattended installation of SUSE Linux Enterprise Server for SAP applications. Given a JSON profile describing the target system, Agama installs accordingly, simplifying automated installation with several clients for both interactive and automated use.
1.1 What is Agama? #
Agama is a service-based Linux installer capable of performing both interactive and unattended installations. You can provide Agama with a JSON profile file detailing the initial system state, such as user authentication, partitioning, networking and software selection. On receiving the profile and instructions for installation from one of its supported clients, Agama installs your target system accordingly. Users can interact with and control the installation process using Agama's Web interface, command-line interface and HTTP API, facilitating automation and integration into existing workflows.
While Agama reuses many principles and internal components from previous SUSE installers like YaST, it focuses only on the installation process rather than being a general configuration tool. See AutoYaST compatibility for how it relates to AutoYaST.
1.2 Why use Agama for automated installation? #
Agama offers its installation service through an HTTP API, which you can use interactively from a Web interface and a command-line interface (CLI), or provide a JSON profile to Agama for automated installation of a target system. Using the HTTP API, you can also integrate with custom scripts and deployment tools. The benefits of using Agama for automated installation are as follows:
- Focus on core installation
Agama focuses on core installation tasks such as user authentication, network configuration, storage setup and software installation, delegating further configuration to other tools such as Ansible, Salt, Cockpit or OpenSCAP.
- Profile-based installation
You can define installation parameters for the target system in an easily readable and editable JSON or Jsonnet profile. Existing XML-based AutoYaST profiles are also supported with some exceptions.
- Comprehensive profile configuration
The profile configures far more of the target system than the Agama Web interface exposes. It covers the following areas, among others:
User authentication and product registration
Network connections
Storage: drives, partitions, Logical Volume Management (LVM), Redundant Array of Independent Disks (RAID), encryption, resizing and deletion
Software selection by patterns and packages
Localization: language, keyboard and time zone
- Dynamic profiles
Agama supports dynamic profiles using Jsonnet, injecting hardware information that can be processed at runtime. This avoids reliance on AutoYaST's rules or ERB for dynamic configurations.
- AutoYaST compatibility
Agama offers a mechanism to reuse existing AutoYaST profiles to a great extent. It supports some dynamic features such as pre-scripts, rules/classes, and Embedded Ruby (ERB) when using AutoYaST profiles. In a JSON or Jsonnet Agama profile, a
legacyAutoyastStoragesection allows direct use of the AutoYaST profile'spartitioningsection for backward compatibility.- Custom scripts
Profiles can define pre-installation, post-partitioning, post-installation, and init scripts that run at specific stages. You can include scripts by URL, location in the hard drive, or embed the script content in the profile itself.
- Easy initiation
The typical way to start an unattended installation from an ISO image is using the
inst.autokernel boot option, pointing to the profile URL or its location in the hard drive. You can also use theagama config loadcommand from the Agama CLI to load a profile, followed by theagama installcommand. The CLI also allows inspection, modification and validation of the profile, and subsequent monitoring of the installation process.
2 What is an Agama profile? #
An Agama profile is a configuration file that describes a complete target system: partitioning, networking, software selection, user accounts and registration. Agama reads the profile and installs accordingly, without further interaction. The concept is similar to an AutoYaST profile, but Agama covers only the installation itself and delegates further system configuration to other tools.
2.1 Introduction to the Agama profile structure #
The Agama profile configuration is defined using a JSON document. It contains several sections that are necessary for describing the installation parameters for a customized system. At a high level, the profile consists of the following sections:
{
"product": {}, 1
"root": {}, 2
"user": {}, 3
"l10n": {}, 4
"hostname": {}, 5
"software": {}, 6
"storage": {}, 7
"bootloader": {}, 8
"network": {}, 9
"security": {}, 10
"scripts": {}, 11
"files": {}, 12
"legacyAutoyastStorage": {}, 13
"iscsi": {}, 14
"dasd": {}, 15
"zfcp": {}, 16
"ntp": {}, 17
"access": {}, 18
"questions": {} 19
}
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
You can also describe profiles using Jsonnet, which is a superset of JSON. Jsonnet offers features like variables, functions and more convenient syntax, making profiles more readable, concise, and dynamic for injecting hardware information at runtime.
For more information on the JSON and Jsonnet profiles, refer to the resources mentioned in Section 14, “For more information”. The upstream resources usually contain the most up-to-date information and examples about the profiles.
2.2 How compatible are Agama profiles with AutoYaST profiles? #
Agama and AutoYaST profiles are largely compatible for all common use cases. However, Agama profiles are not fully compatible with AutoYaST profiles, and cannot be used as a drop-in replacement without checking the compatibility. There are certain aspects of the AutoYaST profiles that are currently supported in Agama profiles, or may be supported in the future. However, there are certain other aspects that are neither currently supported in Agama profiles, nor will be supported in the future. For more information, refer to Using AutoYaST Profiles with Agama.
3 Creating an Agama profile #
A minimal Agama profile is a JSON file with two required sections:
product identifies what to install, and root sets
the administrator credentials. Agama applies its defaults to everything else. Add
product registration, a host name, a non-root user and localization settings to produce a
profile that installs a usable system without any interaction.
3.1 Requirements for creating a profile #
The product identifier of your target product, and, if applicable, a registration code and email.
3.2 Writing a basic profile #
A minimal Agama JSON profile only needs a product section to identify
what to install, and a root section with credentials for the root user.
Agama uses the defaults for the rest of the profile. As a best practice, also configure
the following:
Product registration
A host name
A non-root user
Minimal localization settings
{
"product": {
"id": "PRODUCT_ID",
"registrationCode": "REGISTRATION_CODE",
"registrationEmail": "EMAIL"
},
"hostname": {
"static": "STATIC_HOSTNAME",
"transient": "TRANSIENT_HOSTNAME"
},
"root": {
"hashedPassword": true,
"password": "HASHED_ROOT_PASSWORD", 1
"sshPublicKey": "SSH_PUBLIC_KEY" 2
},
"user": {
"hashedPassword": false,
"fullName": "FULL_NAME",
"userName": "USERNAME",
"password": "PLAINTEXT_PASSWORD",
"sshPublicKey": "SSH_PUBLIC_KEY" 3
},
"l10n": {
"locale": "LOCALE",
"keymap": "KEYMAP",
"timezone": "TIMEZONE"
}
}See Section 5.3, “Root authentication for an Agama installation profile” for how to generate a hashed password. | |
You can generate an SSH public key by running the following command:
Based on your requirements, choose the key type and the key size. However, it is better to adopt stronger security. |
To evaluate the correctness of the profile, run the following command:
#agama config validate AGAMA_PROFILE.json
3.3 A more complete example #
The following profile combines several sections into one working example: product registration, root and user accounts, localization, software selection, a single-disk storage layout using the product's default partitioning, a static network connection, a boot loader timeout, and a post-installation script. Adapt the values to your own environment; see Section 5, “Details of an Agama installation profile” for every field each section accepts.
{
"product": {
"id": "PRODUCT_ID", 1
"registrationCode": "REGISTRATION_CODE",
"registrationEmail": "EMAIL"
},
"hostname": {
"static": "STATIC_HOSTNAME"
},
"root": {
"hashedPassword": true,
"password": "HASHED_ROOT_PASSWORD", 2
"sshPublicKey": "SSH_PUBLIC_KEY" 3
},
"user": {
"fullName": "FULL_NAME",
"userName": "USERNAME",
"hashedPassword": false,
"password": "PLAINTEXT_PASSWORD"
},
"l10n": {
"locale": "LOCALE",
"keymap": "KEYMAP",
"timezone": "TIMEZONE"
},
"software": {
"patterns": ["minimal_base", "selinux"],
"packages": ["vim", "htop"]
},
"storage": {
"drives": [
{ "partitions": [ { "generate": "default" } ] }
]
},
"network": {
"connections": [
{
"id": "ETH0_CONNECTION",
"interface": "eth0",
"method4": "manual",
"addresses": ["192.168.100.10/24"],
"gateway4": "192.168.100.1",
"nameservers": ["192.168.100.1"],
"autoconnect": true
}
]
},
"bootloader": {
"timeout": 5
},
"scripts": {
"post": [
{
"name": "enable-firewall",
"chroot": true,
"content": "#!/bin/bash\nsystemctl enable firewalld"
}
]
}
}
Find the identifiers available on your installation medium by inspecting the
agama-products package's | |
Generate a hashed password the same way as in the minimal profile above (see Section 5.3, “Root authentication for an Agama installation profile”). | |
Generate an SSH public key the same way as in the minimal profile above:
|
3.4 Generating a profile from an interactive installation #
Instead of writing a profile by hand, you can configure a system interactively through the Agama Web interface or CLI, then capture the resulting configuration as a profile to reuse for future automated installations of similar systems.
Start the Agama installer and configure the system interactively: product, storage, network, users, and any other section you need. Do not start the installation yet.
Before Agama installs the system, generate a profile from the current configuration:
#agama config show --output profile.jsonSettings left at their default value are not included in the output.
Review
profile.json, and remove or adjust anything specific to this one machine, such as a static host name or address, before reusing it for other installations.
The saved profile can then be loaded like any other, either with
agama config load during another interactive session, or by pointing
inst.auto at it for an unattended installation.
3.5 Summary of creating a profile #
With the sections above in place, you have a working Agama profile that installs
SUSE Linux Enterprise Server for SAP applications with a host name, a non-root user, and basic localization settings. Add
further sections, such as storage, network, or
software, as your deployment requires, or generate a starting point
automatically from an interactive installation with agama config show.
4 Editing an Agama installation profile #
Add a $schema key to your Agama installation profile to get validation
and autocompletion in a schema-aware editor such as Visual Studio Code. The editor then
flags invalid keys and values as you type, so mistakes surface while you write the profile
instead of once an unattended installation is already running. The installer itself ignores
this key.
4.1 Why validate a profile while you edit it? #
An Agama installation profile uses JSON, which you can write in any text editor. Unlike
XML-based AutoYaST profiles, though, JSON has no native way to reference a validation schema.
Editors that support the unofficial $schema key can use it to flag invalid
keys or values and suggest valid ones as you type, catching mistakes that would otherwise
only surface once an unattended installation is already running. Visual Studio Code and
VSCodium are the most common editors with this support.
The $schema value is used only by the editor, for validation while you
write the profile. The Agama installer always validates against its own embedded schema,
regardless of what $schema points to, and completely ignores this key
at installation time.
4.2 Requirements for editing a profile #
A text editor that supports JSON Schema validation using the $schema
key, for example Visual Studio Code or VSCodium.
4.3 Adding schema validation to a profile #
Open your Agama installation profile in a schema-aware editor.
Add a
$schemakey pointing to the profile schema matching your target product and version. For SUSE Linux Enterprise Server for SAP applications 16.1 profiles:{ "$schema": "https://raw.githubusercontent.com/agama-project/agama/refs/heads/master/rust/share/profile.schema.json" }Save the file. Your editor now flags invalid keys or values and suggests valid ones as you type.
4.4 Summary of profile validation #
Adding a $schema key to your profile gives you validation and
autocompletion while editing, catching mistakes before you start an unattended installation.
Remove or ignore this key when you actually run the installation; the installer does not
use it.
4.5 Troubleshooting profile validation #
If the installer reports that your profile is invalid even though your editor did not
flag any problems, run agama config validate against the file directly
to see the exact validation error the installer would report.
5 Details of an Agama installation profile #
The Agama profile contains various sections to configure different aspects of the system installation. For real deployments where you would want to simultaneously install multiple systems with the same initial configuration, prepare a customized profile with all the necessary details. You can start with the template of the minimal example and add details progressively. This section gives you an idea of the most useful details you should consider for real deployments.
5.1 Product configuration for an Agama installation profile #
The product section defines the SUSE product to be installed and
includes optional registration data and add-on modules. This is essential for systems
requiring access to subscription repositories or additional functionality.
product configuration for an Agama installation profile #"product": {
"id": "PRODUCT_ID",
"registrationCode": "REGISTRATION_CODE",
"registrationEmail": "EMAIL_ADDRESS",
"registrationUrl": "REGISTRATION_URL",
"addons": [
{
"id": "ADDON_ID",
"version": "ADDON_VERSION",
"registrationCode": "ADDON_REGISTRATION_CODE"
}
]
}This section contains the following fields:
- id
The product identifier used to select the base SUSE product to be installed, for example
SLESorSLES_SAP. This field is mandatory. Find the identifiers available on your installation medium by inspecting the agama-products package'sproducts.d/*.yamlfiles, or by selecting the product interactively and runningagama config show.- mode
Optional installation mode. Some products support more than one mode, changing how the installed system behaves. For example, SUSE Linux Enterprise Server for SAP applications supports
standardandimmutable(an immutable OS using transactional updates). If omitted, the product uses its traditional default behavior; it is preferred to specify the mode explicitly.- registrationCode
The registration code for the product obtained from the SUSE Customer Center and used to activate repositories and receive updates. Registration is available only for the SUSE Linux Enterprise family of products.
- registrationEmail
The e-mail address associated with the registration account used during product activation.
- registrationUrl
The full URL of the registration server. If you are using the SUSE Customer Center, you can omit this field. However, it is useful when registering from a custom server.
- addons
A list of optional add-on modules or extensions to be activated alongside the base product.
id: Identifier of the add-on. For example,sle-hafor High Availability.version: Specific version of the add-on to be installed. This is required if multiple versions are available.registrationCode: Optional registration code for the add-on if separate activation is required.
5.2 Host name configuration for an Agama installation profile #
The hostname section sets the system's static and transient host name. The
static host name is persistent across reboots, while the transient host name is used
temporarily at runtime and may be overridden by network services like DHCP.
hostname configuration for an Agama installation profile #"hostname": {
"static": "STATIC_HOSTNAME",
"transient": "TRANSIENT_HOSTNAME"
}This section contains the following fields:
- static
The persistent host name written to
/etc/hostname. This name remains consistent across system reboots and is used by default if no transient host name is specified.- transient
A temporary host name applied at runtime. This may be used during deployment or installation to reflect an ephemeral identity. For example, it can be set via DHCP or by installation tooling like Agama.
5.3 Root authentication for an Agama installation profile #
The root section defines authentication settings for the system's
root account. This includes a root password (either plain or pre-hashed) and an
optional SSH public key for remote access.
For the installation to succeed, either a password or an SSH public key must be set for
root, or a first user (see Section 5.4, “User configuration for an Agama installation profile”)
must be defined. Otherwise there is no way to log in to the installed system.
root configuration for an Agama installation profile #"root": {
"hashedPassword": true,
"password": "HASHED_ROOT_PASSWORD",
"sshPublicKey": "SSH_PUBLIC_KEY"
}This section contains the following fields:
- hashedPassword
Boolean flag indicating whether the
passwordfield contains a hashed value. If set totrue, the password must already be hashed using a method supported by the target system, as listed bymkpasswd --method=help. Iffalseor omitted, the value is treated as plain text and hashed during installation.- password
root's password. IfhashedPasswordistrue, this must be a pre-generated hash. Otherwise, plain text is accepted and will be hashed during installation.To generate a hashed password, use the
mkpasswdcommand from the whois package. List the hashing methods supported by the target system with:>sudomkpasswd --method=helpThen hash the password with the chosen method, for example:
>sudomkpasswd --method=yescryptAlternatively, use
openssl passwd -6for a SHA-512 hash, oropenssl passwd -5for SHA-256.Warning: Avoid DES and MD5Do not use DES- or MD5-based hashing methods, since they are considered insecure. See the
cryptmanual page (man 5 crypt) for details on the available hashing methods and their strength.- sshPublicKey
An optional SSH public key, or list of keys, to be added to
root's~/.ssh/authorized_keysfile. This allows passwordlessrootlogin over SSH. The key must be in OpenSSH format. For example, starting withssh-rsaorssh-ed25519.sshPublicKeysis an accepted alias with identical behavior.You can generate an SSH public key by running the following command:
>sudossh-keygen -t rsa -b 4096 -C "YOUR_EMAIL@EXAMPLE.COM"Based on your requirements, choose the key type and the key size. However, it is better to adopt stronger security.
5.4 User configuration for an Agama installation profile #
The user section defines the initial non-root user account created during
installation. This includes the user's full name, login name, password (plain or hashed), and
an optional SSH public key.
user configuration for an Agama installation profile #"user": {
"hashedPassword": false,
"fullName": "FULL_NAME",
"userName": "LOGIN_NAME",
"password": "USER_PASSWORD",
"sshPublicKey": "SSH_PUBLIC_KEY"
}This section contains the following fields:
- hashedPassword
Boolean flag indicating whether the
passwordfield contains a hashed value. If set totrue, the password must be a pre-hashed SHA-512 crypt value. Otherwise, the plain text password will be hashed during installation.- fullName
The full name of the user, typically used for display purposes in graphical environments. For example,
Jane Doe.- userName
The system login name for the user. This becomes their Linux user name and home directory under
/home. For example,jane.- password
The user's password, in plain text or pre-hashed, depending on the
hashedPasswordflag. If plaintext is provided, it will be automatically hashed.- sshPublicKey
An optional SSH public key, or list of keys, to be added to the user's
~/.ssh/authorized_keysfile, in the same format asroot'ssshPublicKey(see Section 5.3, “Root authentication for an Agama installation profile”).sshPublicKeysis an accepted alias with identical behavior.
5.5 Localization configuration for an Agama installation profile #
The l10n section defines the system locale, keyboard layout, and time
zone settings. These parameters determine the default locale and input behavior after
installation.
localization section
Older profiles may use a localization section instead, with
language and keyboard fields. Agama's profile
schema still accepts it, but marks it deprecated; use l10n in new
profiles.
l10n configuration for an Agama installation profile #"l10n": {
"locale": "LOCALE_ID",
"keymap": "KEYMAP_ID",
"timezone": "TIMEZONE"
}This section contains the following fields:
- locale
The system locale. For example,
en_US.UTF-8orde_DE. This controls messages, number formats, date formats, and default encoding. List the locales available on the installation medium withlocalectl list-locales.- keymap
The default keyboard layout identifier. For example,
usorde. This affects key mapping on both text consoles and graphical desktops. List the keymaps available on the installation medium withlocalectl list-keymaps; both the dash and parenthesis forms are accepted, for exampleus-dvorakorus(dvorak).- timezone
The system time zone using a region/location format. For example,
Europe/Berlin. This sets the default system clock and affects date/time display.
5.6 Software configuration for an Agama installation profile #
The software section defines which software components are installed on
the system via SUSE's pattern and package management infrastructure.
software configuration for an Agama installation profile #"software": {
"patterns": [
"minimal_base",
"app_server"
],
"packages": [
"vim",
"htop",
"curl"
]
}This section contains the following fields:
- patterns
A list of software patterns to be installed. Patterns are curated collections of packages designed to serve a functional role. For example,
minimal_base,gnome,app_server. To list the patterns available for SUSE Linux Enterprise Server for SAP applications and your target architecture, runzypper se --type patternon a registered system.Note: Providing a plain list replaces the default pattern selectionIf you specify
patternsas a plain list, patterns that would otherwise be pre-selected by the product (for example,selinux) are not installed unless you include them in the list yourself. To add to, or remove from, the default selection instead of replacing it, use an object withaddandremovekeys:"patterns": { "add": ["gnome", "office"], "remove": ["selinux"] }- packages
A list of individual packages to install in addition to those brought in by selected patterns. For example, vim, htop and curl. To list the packages available from the official SUSE Linux Enterprise Server for SAP applications repositories for your target architecture, run
zypper packageson a registered system.- onlyRequired
Optional boolean. If set to
true, Agama tellslibzypp(the library behind Zypper and Agama's own package resolution) to only use mandatory hard dependencies when solving the selected patterns and packages, skipping optional ones. If set tofalseor omitted,libzyppalso resolves optional dependencies.- extraRepositories
A list of additional repositories to use as an installation source, alongside the repositories the selected product already provides. Each entry supports the following fields:
alias: a unique identifier for the repository. Mandatory. Also used as the file name when saving the repository configuration to the installed system, so avoid/and other special characters, and avoid spaces to keep the file name usable directly on a command line without quoting.url: the repository's URL, in a format recognized bylibzypp. Mandatory.priority: optional priority for this repository, where a lower number means higher precedence. Defaults to99, the same as other repositories. Use0-98for a higher priority repository, or100-200for a lower priority one.name: optional user-friendly name for the repository. Defaults to the value ofaliasif omitted. Unlikealias, it may contain spaces or special characters.enabled: optional boolean controlling whether the repository is active. Useful for predefining a repository you plan to enable later. Repositories are enabled by default.allowUnsigned: optional boolean. Iftrue, the repository is accepted even without a GPG signature. Useful for your own repositories. Not set by default.gpgFingerprints: optional list of accepted GPG fingerprints for the repository. Useful when the repository is signed with a key not already included on the installation medium. Empty by default.
When enabling SUSE Package Hub during a manual installation, you are prompted to trust the
repository's GPG key. To trust it automatically during an unattended installation, add a
software.import_gpg answer to the questions section.
The example below uses SUSE Package Hub's current signing key; if it has since changed, get the
current ID and fingerprint from a prior interactive installation or from SUSE Package Hub's
repository metadata:
{
"product": {
"id": "SLES",
"registrationCode": "SLES_REGISTRATION_CODE",
"addons": [
{ "id": "PackageHub" }
]
},
"questions": {
"policy": "auto",
"answers": [
{
"class": "software.import_gpg",
"answer": "Trust",
"data": {
"id": "488C583D287A0027",
"fingerprint": "BF3F 9A67 D3A2 FF98 A73F 5E07 488C 583D 287A 0027"
}
}
]
}
}5.7 Storage configuration for an Agama installation profile #
The storage section defines the system's target disk layout, such as
devices, partitions and volume management, to be applied during installation. Its contents
are defined by a separate Agama storage schema, which the profile schema references.
An exhaustive description of all possible storage configurations using Agama is beyond the scope of this section, as it will need careful consideration of the storage model schema. For information on advanced storage configuration, refer to Section 6, “Advanced storage configuration using Agama profiles”.
storage section syntax for an Agama installation profile #"storage": {
"drives": [ ... ],
"volumeGroups": [ ... ],
"mdRaids": [ ... ],
"boot": { ... }
}
A storage section contains several entries describing how to configure the
corresponding storage devices, and some extra entries such as boot to
set up some general aspects that influence the final layout.
Each volume group or software RAID can represent a new logical device to be created, or an
existing device from the system to be processed. Entries below drives
represent devices that can be used as regular disks, which includes removable and fixed
disks, SD cards, DASD or zFCP devices, iSCSI disks, and multipath devices. Those entries
always correspond to devices that can be found on the system, because Agama cannot create
that kind of device.
If the storage section is omitted entirely, Agama still needs a target
for installation, so it generates an initial proposal automatically. It attempts to install
onto a single disk, wiping its content and applying the product's default settings, such as
Btrfs snapshots and default file system sizes. If that attempt does not produce a valid
storage setup and the system has more than one disk, Agama retries the same approach on
another disk, up to five attempts across as many different disks.
In some cases, storage can be replaced by the
legacyAutoyastStorage section. This section supports everything offered
in the partitioning section of the AutoYaST profile. However, Agama
does not validate this special section, so be careful to provide valid AutoYaST
options.
5.8 Boot loader configuration for an Agama installation profile #
The bootloader section defines boot-time behavior, including whether to
pause at the boot menu and what extra kernel parameters to pass. It affects the installed
system's boot loader configuration, whether that is GRUB 2 or, as a preview feature,
systemd-boot (see Section 10.5, “Advanced and diagnostic options”).
bootloader configuration for an Agama installation profile #"bootloader": {
"timeout": 5,
"extraKernelParams": "KERNEL_PARAMETERS"
}This section contains the following fields:
Set at most one of stopOnBootMenu and timeout in the
same profile. Setting both at once fails schema validation.
- stopOnBootMenu
Boolean flag that, if set to
true, forces the system to stop at the GRUB 2 boot menu instead of proceeding automatically. This is useful for debugging or choosing alternate boot options manually.- timeout
Number of seconds the GRUB 2 boot menu is shown before continuing with the default entry. Set to
0to boot immediately.- extraKernelParams
Additional kernel command-line parameters to append to the default ones during boot. These are passed directly to the Linux kernel. For example,
console=ttyS0orquiet splash.- updateNvram
Available since SUSE Linux 16.1. Optional boolean. Determines whether the installer modifies the system's NVRAM (Non-Volatile RAM) to update the boot order or entries. If set to
false, the NVRAM is left untouched, which is useful for preserving an existing boot manager or specific firmware configuration.
5.9 Network configuration for an Agama installation profile #
The network section defines a list of network
connections to be configured, using the same connection concept as
NetworkManager. Each connection supports a common set of fields plus, depending on the connection
type, an additional wireless, bridge,
bond, or vlan section.
network configuration for an Agama installation profile #"network": {
"connections": [
{
"id": "ETH0_CONNECTION",
"interface": "eth0",
"method4": "manual",
"addresses": ["192.168.100.10/24"],
"gateway4": "192.168.100.1",
"nameservers": ["1.1.1.1", "8.8.8.8"],
"autoconnect": true
},
{
"id": "WIFI_HOME",
"interface": "wlan0",
"method4": "auto",
"wireless": {
"ssid": "MYSSID",
"password": "MYWIFIPASSWORD",
"security": "wpa-psk"
}
},
{
"id": "BRIDGE0",
"interface": "br0",
"method4": "auto",
"bridge": {
"stp": true,
"forwardDelay": 15,
"ports": ["eth0", "eth1"]
}
},
{
"id": "BOND0",
"interface": "bond0",
"method4": "manual",
"addresses": ["10.0.0.100/24"],
"gateway4": "10.0.0.1",
"bond": {
"mode": "active-backup",
"options": "miimon=100",
"ports": ["eth2", "eth3"]
}
},
{
"id": "SECURE_ETH",
"interface": "eth4",
"method4": "auto",
"ieee-8021x": {
"eap": ["peap"],
"identity": "USERNAME",
"password": "PASSWORD",
"caCert": "/etc/certs/ca.pem"
}
}
]
}The following fields are common to any connection type:
- id
Human-readable, unique name for the connection.
- method4 / method6
IPv4 and IPv6 addressing method. Possible values are
auto(usually DHCP),manual,link-local, anddisabled(the default).- interface
Name of the network interface to bind to this connection (for example,
eth0). If omitted, the connection can apply to any device that does not conflict with other match settings such asmacAddressormatch.- macAddress
MAC address of the network interface to bind to this connection.
- customMacAddress
MAC address to assign to the connection. Either a literal MAC address, or one of
preserve,permanent,random, orstable.- mtu
The connection's MTU (Maximum Transmission Unit).
- gateway4 / gateway6
IPv4 and IPv6 default gateway addresses.
- addresses
List of static IP addresses (IPv4 and/or IPv6) in CIDR format.
- nameservers
List of name server IP addresses (IPv4 and/or IPv6).
- dnsSearchList
List of DNS domains to search.
dnsSearchlist(lowercasel) is accepted too, but is deprecated; preferdnsSearchListin new profiles.- ignoreAutoDns
Boolean. Whether DNS options provided automatically (for example, through DHCP) are ignored.
- status
The desired status for the connection:
up,down, orremoved. Settingremovedis useful to delete an existing connection, for example before creating a new one on the same interface.- autoconnect
Boolean. Specifies whether the connection is brought up automatically.
- persistent
Boolean. Whether the connection should be kept on the installed system after installation.
- match
Criteria to select the device to apply the connection to, based on NetworkManager's own device-matching mechanism, as an alternative to
interfaceormacAddress. Supports matching byinterfacename,driver, or PCIpath, each accepting a list of values that may include wildcards. For example,{"interface": ["eth*", "ens*"]}matches any interface starting withethorens.- wireless
Configures a Wi-Fi connection:
ssid: Wi-Fi network name.password: Wi-Fi passphrase.security: key management method. Possible values arenone(the default),owe,ieee8021x,wpa-psk,sae,wpa-eap, andwpa-eap-suite-b-192.mode: wireless mode. Possible values areinfrastructure(the default),adhoc,mesh, andap.
- ieee-8021x
Configures IEEE 802.1X (EAP) authentication for a connection, for enterprise networks that authenticate at the link layer before an IP address is assigned:
eap: list of EAP methods to use. Possible values:leap,md5,tls,peap,ttls,pwd,fast.phase2Auth: phase 2 inner authentication method. Possible values:pap,chap,mschap,mschapv2,gtc,otp,md5,tls.identity: identity string, often the user's login name.password: password used for EAP authentication.caCert/caCertPassword: path to the CA certificate, and its password if the certificate is encrypted.clientCert/clientCertPassword: path to the client certificate, and its password if the certificate is encrypted.privateKey/privateKeyPassword: path to the private key, and its password if the key is encrypted.anonymousIdentity: anonymous identity string for EAP methods that support it.peapVersion: which PEAP version to use, whenpeapis set as the EAP method. Possible values:0,1.peapLabel: optional boolean that forces use of the new PEAP label during key derivation.
- bridge
Configures a network bridge. The
interfacefield sets the bridge's own device name, whileidis the connection name.interface: the bridge device's own name.id: the connection name.ports: interfaces or connection IDs to include in the bridge.stp: boolean. Enables the Spanning Tree Protocol.forwardDelay: STP forward delay, in seconds.priority: STP priority, an integer of zero or higher, where lower values take precedence.maxAge: STP maximum message age, in seconds.helloTime: STP hello time, in seconds.
- bond
Configures a network bond. The
interfacefield sets the bond's own device name, whileidis the connection name.interface: the bond device's own name.id: the connection name.ports: devices to include in the bond.mode: bonding mode. Possible values:balance-rr(the default),active-backup,balance-xor,broadcast,802.3ad,balance-tlb,balance-alb.options: additional bonding options (for example,miimon=100).
- vlan
Configures a VLAN. Supported fields:
id: the VLAN identifier, an integer from 0 to 4094.parent: name of the parent interface the VLAN is created from.protocol: encapsulation protocol. Either802.1Q(the default) or802.1ad.
Example 12: Samplevlanconnection for an Agama installation profile #{ "id": "vlan10", "method4": "manual", "status": "up", "persistent": true, "addresses": ["192.168.1.28/24"], "gateway4": "192.168.1.1", "vlan": { "id": 10, "parent": "eth0" } }
5.10 Security configuration for an Agama installation profile #
The security section allows you to add trusted SSL certificates to the
installed system. This is useful when connecting to internal package mirrors, registration
servers, or other TLS services that require non-default certificate authorities.
security configuration for an Agama installation profile #"security": {
"sslCertificates": [
{
"fingerprint": "FINGERPRINT",
"algorithm": "SHA256"
}
]
}This section contains the following fields:
- sslCertificates
A list of custom SSL certificates to install into the system's trust store. Each item specifies the certificate's fingerprint and the hashing algorithm used.
fingerprint: The cryptographic fingerprint of the certificate, formatted as a colon-separated hex string. For example,A8:DE:08:B1:57:52:FE:70:DF:D5:31:EA:E3:53:BB:39:EE:01:FF:B9.algorithm: The fingerprint algorithm used to compute the hash. Supported values areSHA1andSHA256.Warning: Use SHA256 for better securitySHA1is cryptographically broken and should not be used. UseSHA256wherever possible.
To verify the fingerprint of a certificate in PEM format:
>sudoopenssl x509 -in FILE.pem -noout -fingerprint -sha256
Trusted certificates can be installed permanently by placing them in
/etc/pki/trust/anchors and then executing:
>sudoupdate-ca-certificates
5.11 Scripts configuration for an Agama installation profile #
The scripts section allows you to define custom shell scripts to be
executed at different stages of the SUSE installation lifecycle. These scripts can be
embedded inline, fetched from a URL, and optionally executed in a chroot environment (where
applicable).
scripts configuration for an Agama installation profile #"scripts": {
"pre": [
{
"name": "PRE_CHECK_DISK.sh",
"content": "#!/bin/bash\nif [ ! -e /dev/sda ]; then echo 'Disk not found' >&2; exit 1; fi"
}
],
"postPartitioning": [
{
"name": "CREATE_MOUNTS.sh",
"url": "http://EXAMPLE.COM/SCRIPTS/MOUNTS.sh"
}
],
"post": [
{
"name": "FINALIZE_INSTALL.sh",
"content": "#!/bin/bash\necho 'Installation complete'",
"chroot": true
}
],
"init": [
{
"name": "FIRST_BOOT.sh",
"content": "#!/bin/bash\necho 'System booted for the first time'"
}
]
}This section defines the following script categories:
- pre
Scripts executed before the installation begins. Useful for pre-flight checks or environment preparation.
- postPartitioning
Scripts run immediately after partitioning is completed, but before packages are installed.
- post
Scripts run after installation finishes. These can optionally execute within the target system's root via chroot, which is one way to enable a service. For enabling SSH or Cockpit access specifically, prefer the
accesssection (see Section 5.18, “Access configuration for an Agama installation profile”) over a custom script.- init
Scripts executed during the first boot of the installed system. These are useful for final configuration, logging, or notifications.
Note: Troubleshooting init scriptsOn the installed system,
initscripts are written to/var/lib/agama/scripts/init/and run once, in name order, by theagama-scripts.serviceunit at first boot; the service then disables itself. Each script's output is logged to/var/lib/agama/scripts/init/log/SCRIPT_NAME.log.
Each script object supports the following keys:
- name
File name used to identify the script on disk. Required for all scripts.
- content
Inline script body. Must begin with a shebang (for example,
#!/bin/bash).- url
HTTP/HTTPS location from which to fetch the script. Cannot be combined with
content.- chroot
Boolean. If
true, the script is executed inside the installed system's root via chroot. Applies only topostscripts. Defaults totruewhen omitted.systemd does not run inside the chroot, so a chrooted script can enable a service (a symlink operation) but cannot start one. If a command needs a running systemd, use an
initscript instead.
{
"name": "enable-apache2.sh",
"chroot": true,
"content": "#!/bin/bash\nsystemctl enable apache2.service"
}5.12 Files configuration for an Agama installation profile #
The files section allows deployment of custom user-defined files into the
installed system. These files are written just before post-installation scripts run and can
be useful for configuring services, dropping keys, or overriding system files.
files configuration for an Agama installation profile #"files": [
{
"destination": "ABSOLUTE_FILE_PATH",
"content": "FILE_CONTENT",
"permissions": "0644",
"user": "USERNAME",
"group": "GROUPNAME"
}
]This section contains an array of file definitions. Each entry supports the following fields:
- destination
Required absolute path where the file will be written inside the target system. For example,
/etc/MYAPP/CONFIG.YAML.- content
Inline string representing the content of the file. This field is mutually exclusive with
url; one of the two must be present.- url
URL (relative or absolute) to fetch the file content from. Used instead of inline
content. One ofurlorcontentis required.- permissions
Optional file mode string (octal), such as
0644or0755, to set on the created file.- user
Optional owner user name to assign to the file. The user must already exist in the installed system.
- group
Optional owner group to assign to the file. The group must already exist in the installed system.
5.13 Legacy AutoYaST storage configuration for an Agama installation profile #
The legacyAutoyastStorage section allows reuse of AutoYaST-style storage
definitions by expressing them in JSON. It accepts an array of opaque objects directly
representing the legacy partitioning structure, allowing migration or backward compatibility
for existing storage configurations.
legacyAutoyastStorage configuration for an Agama installation profile #"legacyAutoyastStorage": [
{
"partitions": {
"partition": [
{
"device": "/dev/sda1",
"mount": "/",
"size": "20G",
"filesystem": "ext4"
},
{
"device": "/dev/sda2",
"mount": "swap",
"size": "4G",
"filesystem": "swap"
}
]
}
}
]This section contains the following:
- legacyAutoyastStorage
An array of JSON objects compatible with the XML structure used in AutoYaST's
partitioningsection. This allows experienced administrators to reuse complex partitioning logic without switching to Agama-native storage syntax.
5.14 iSCSI configuration for an Agama installation profile #
The iscsi section defines parameters required for configuring iSCSI
targets that should be discovered and mounted during system installation. This is
particularly relevant for systems that boot from a storage area network (SAN) or use
iSCSI-based storage volumes.
The iscsi section corresponds to the Agama storage schema and contains
only two properties: initiator and targets.
iSCSI configuration for an Agama installation profile #"iscsi": {
"initiator": "iqn.2013-02.de.suse:01:e229358d2dea", 1
"targets": [
{
"address": "TARGET_IP",
"port": 3260,
"name": "IQN_OF_TARGET",
"interface": "default",
"startup": "onboot",
"authByTarget": {
"username": "CHAP_USERNAME",
"password": "CHAP_PASSWORD"
}
}
]
}
An existing system typically already has a generated initiator name in
|
This section contains the following configuration keys:
- initiator
The unique iSCSI Qualified Name (IQN) the system identifies itself with on the iSCSI SAN. For example,
iqn.2013-02.de.suse:01:e229358d2dea.- targets
An array of target definitions to connect to. Each target supports the following fields (only the first four—
address,port,name, andinterface—are mandatory):address: IP address or host name of the iSCSI target.port: TCP port of the target.name: iSCSI name (IQN) of the target.interface: the iSCSI interface to use, not to be confused with the network interface. Eitherdefaultor the name of an interface defined at/var/lib/iscsi/ifaces/.startup: the startup mode for the iSCSI node. Supported values areonboot,manual, andautomatic.authByTarget: optional CHAP (Challenge Handshake Authentication Protocol) credentials used if the target authenticates the initiator. An object withusernameandpassword.authByInitiator: optional CHAP credentials used, in addition toauthByTarget, for bidirectional authentication where the initiator also authenticates the target. Same format asauthByTarget.
5.15 DASD devices configuration for an Agama installation profile #
The dasd section is used to activate, configure, or format Direct Access
Storage Device (DASD) volumes on IBM Z (s390x) systems. It is relevant only when installing
SUSE on mainframe hardware.
dasd devices configuration for an Agama installation profile #"dasd": {
"devices": [
{
"channel": "0.0.1234", 1
"state": "active",
"format": true
},
{
"channel": "0.0.5678",
"state": "offline"
}
]
}
List the channel (Bus-ID) of every DASD device visible to the system with the
|
This section defines the following keys:
- devices
A list of DASD devices to configure. Each device is represented as an object with the following fields:
channel: Required. The device channel path, typically in the format0.0.xxxx.state: Optional. Indicates whether the device should be madeactiveor putoffline. Defaults toactive.format: Optional. Boolean indicating whether the device should be formatted. If unspecified, formatting happens only if necessary.diag: Optional. Boolean indicating whether the device should have its diagnostic (diag) flag set. If unspecified, the existing state is preserved.Warning: Expert settingOnly set
diagif you specifically need to and understand the consequences. Modifying the diagnostic flag on the wrong DASD device can make it stick, disappear, or behave unexpectedly.
5.16 zFCP configuration for an Agama installation profile #
The zfcp section activates zFCP (Fibre Channel Protocol) storage on
IBM Z (s390x) systems for use as installation targets. There are two ways to activate
zFCP storage. If your storage server supports LUN masking, activating the controller alone
triggers an automatic LUN scan. Otherwise, you must define each disk manually using its
hardware coordinates.
zfcp configuration for an Agama installation profile #"zfcp": {
"controllers": ["0.0.fa00", "0.0.fc00"],
"devices": [
{
"channel": "0.0.fa00",
"wwpn": "0x500507630300c562",
"lun": "0x4010403300000000" 1
},
{
"channel": "0.0.fb00",
"wwpn": "0x500507630300c563",
"lun": "0x4010403300000000",
"active": false
}
]
}
List the channel, WWPN, and LUN of every zFCP device visible to the system with the
|
This section contains the following fields:
- controllers
A list of zFCP controller channel IDs to activate for automatic LUN scanning. For example,
0.0.fa00.- devices
A list of individual disks to activate explicitly. Required when the controller cannot discover LUNs automatically. Each entry supports the following fields:
channel: the channel ID of the zFCP controller the disk is attached to.wwpn: the World Wide Port Name of the storage server port.lun: the Logical Unit Number of the disk volume.active: optional boolean to explicitly enable or disable the disk. If a device is listed here without its controller also listed undercontrollers, Agama activates that controller automatically.
If a LUN that is not already known to the system—common with storage from vendors
other than IBM DS8000—fails to activate when listed under
devices, activate it manually before installation instead. For
example, use the rd.zdev boot parameter, or run
chzdev and then rescan the devices.
5.17 Network Time Protocol configuration for an Agama installation profile #
Having the correct date and time during installation matters: an incorrect clock can
cause unexpected errors. The Agama installation medium ships chrony,
which synchronizes the system clock automatically. The optional ntp
section lets you force Agama to synchronize using specific NTP sources instead, and copies
that configuration to the installed system.
ntp configuration for an Agama installation profile #"ntp": {
"sources": [
{
"type": "pool",
"address": "2.opensuse.pool.ntp.org",
"iburst": true,
"offline": false
}
]
}
The sources list defines the systems to synchronize with. Each source
supports the following fields:
- address
The host name or IP address of the NTP source.
- type
The type of NTP source:
pool: a pool of NTP servers (for example,pool.ntp.org); the pool name resolves to multiple servers andchronypicks the best ones.server: a specific NTP server to synchronize with.peer: an NTP peer for symmetric (bidirectional) time exchange.
- iburst
Optional boolean. If
true,chronysends a burst of packets at startup to speed up the initial synchronization. Defaults tofalse.- offline
Optional boolean. If
true, the source is initially marked offline. Useful for sources that require network connectivity that may not be present at boot time. Defaults tofalse.
If you need to synchronize the date and time before Agama itself starts (for example, if
the system has no working clock), use the rd.ntp boot option instead of
the profile's ntp section.
5.18 Access configuration for an Agama installation profile #
The access section configures how the installed system can be accessed
remotely, over SSH and Cockpit.
access configuration for an Agama installation profile #"access": {
"ssh": "enabled",
"webConsole": "default"
}This section contains the following fields:
- ssh
Whether SSH access is enabled. If omitted, SSH access is enabled automatically when either the
userorrootsection definessshPublicKeys. Supported values:enabled: ensures SSH is accessible. Root login using a password can still be restricted by the product's default configuration.default: keeps the product's default behavior.
- webConsole
Whether access to Cockpit, the system's Web-based management console, is enabled. Supported values:
enabled: ensures Cockpit is accessible. Root login can still be prevented by the product's default configuration.default: keeps the product's default behavior.
5.19 Questions configuration for an Agama installation profile #
The questions section automates the answers to questions the installer
would otherwise ask interactively, so an unattended installation does not stall waiting for
a response.
questions configuration for an Agama installation profile #"questions": {
"policy": "auto",
"answers": [
{
"class": "storage.activate_multipath",
"answer": "yes"
},
{
"class": "storage.luks_activation",
"answer": "decrypt",
"password": "LUKS_PASSWORD",
"data": {
"device": "/dev/sda22"
}
}
]
}
The policy field determines the default behavior for questions that have
no matching predefined answer:
user(default): the installer prompts the user for a response.auto: the installer automatically selects the question's default value. If the question has no default, the installation fails.
Each entry in the answers list can contain the following fields:
class: a unique identifier for the question, for examplestorage.activate_multipath.text: optional. The full text of the question, used for matching.answer: the value to use as the answer.password: required only for questions that also need a password, such asstorage.luks_activationwith thedecryptanswer.data: optional object with additional key-value pairs to match the question. Matching againstdatais a partial match: if your entry'sdatais a subset of the question's data and all specified values are identical, it counts as a match.
Retry answer unless certain
Using Retry as an answer can send the installation into an infinite
loop if the retried action is never going to succeed. Only use it when you are certain the
question will eventually succeed.
The following question classes are currently available:
| Class | Description | Possible answers |
|---|---|---|
autoyast.unsupported | There are unsupported elements in an AutoYaST profile. | Abort, Continue |
software.medium_error | There is an issue accessing the software medium. | Retry, Skip |
software.unsigned_file | A file from a repository is not digitally signed. | Yes, No |
software.import_gpg | A signature is signed with an unknown GPG key. | Trust, Skip |
software.unknown_gpg | A file is signed by an unknown key. | Trust, Skip |
software.digest.no_digest | A file is in a signed repository but not listed among the checksums. | Yes, No |
software.digest.unknown_digest | A file's checksum is not known, or does not match (wrong checksum). | Yes, No |
software.package_error.medium_error | A package failed to download from the medium. | Retry, Continue |
software.package_error.provide_error | A package failed to be provided, for example due to an I/O error. | Retry, Continue |
software.script_error | A package script failed. | Retry, Continue |
storage.activate_multipath | The system appears to have multipath storage, and whether to activate it. | yes, no |
storage.commit_error | Some storage actions failed, and whether to continue. | yes, no |
storage.luks_activation | A LUKS-encrypted device is detected and needs a password to probe it. | skip, decrypt |
load.retry | Asks whether to retry loading the profile. | Yes, No |
registration.certificate | The registration server uses an unknown certificate. | trust, reject |
6 Advanced storage configuration using Agama profiles #
The storage section of an Agama profile lets you declaratively define
the target disk layout, from simple partition schemes to complex combinations of
partitions, LVM, and software RAID, all before the system boots for the first time.
This section illustrates several common use cases with examples. For an exhaustive reference of all elements, refer to the schema https://github.com/agama-project/agama/blob/master/rust/share/storage.schema.json.
6.1 Basic structure of the storage schema #
This section builds on the storage section introduced in
Section 5.7, “Storage configuration for an Agama installation profile”, going into more detail on
how to describe devices, match existing hardware, size volumes, and control booting.
Before running an installation, validate the configuration using the tools provided by Agama.
6.2 Describing the devices #
The drives collection contains several optional fields, some of which are
mutually exclusive.
drive collection #{
"alias": "...",
"search": { ... },
"encryption": { ... },
"filesystem": { ... },
"partitions": [ ... ],
"ptableType": "..."
}
Usually, a device represented by a drive entry is divided into several
partitions. Each entry of partitions has the following structure with
several optional fields:
partitions #{
"alias": "...",
"search": { ... },
"id": "...",
"size": { ... },
"encryption": { ... },
"filesystem": { ... },
"delete": ...,
"deleteIfNeeded": ...
}Drives and partitions can be combined such that one disk is used to create partitions and the other is directly formatted.
"storage": {
"drives": [
{
"partitions": [
{
"filesystem": { "path": "/" },
"size": { "min": "10 GiB" }
},
{
"filesystem": { "path": "swap" },
"size": "2 GiB"
}
]
},
{
"filesystem": { "path": "/home" }
}
]
}
An entry from volumeGroups can have the following properties:
volumeGroups #{
"name": "...",
"search": { ... },
"extentSize": ...,
"physicalVolumes": [ ... ],
"logicalVolumes": [ ... ]
}
Entries of logicalVolumes are relatively similar to the ones used to
describe partitions.
logicalVolumes #{
"alias": "...",
"search": { ... },
"name": "...",
"size": { ... },
"encryption": { ... },
"filesystem": { ... },
"pool": ...,
"usedPool": "...",
"stripes": ...,
"stripeSize": ...,
"delete": ...,
"deleteIfNeeded": ...
}To understand how all the previously described elements fit together, consider the following example in which the first disk of the system is partitioned and a volume group is created on top of that partition after encryption, to allocate two file systems.
"storage": {
"drives": [
{
"partitions": [
{
"alias": "pv",
"id": "lvm",
"size": { "min": "12 GiB" },
"encryption": {
"luks2": { "password": "my secret passphrase" }
}
}
]
}
],
"volumeGroups": [
{
"name": "system",
"physicalVolumes": [ "pv" ],
"logicalVolumes": [
{
"size": { "min": "10 GiB" },
"filesystem": { "path": "/", "type": "btrfs" }
},
{
"size": "2 GiB",
"filesystem": { "path": "swap", "type": "swap" }
}
]
}
]
}
Agama can also manage software-defined MD RAID arrays represented as entries at the
mdRaids collection.
mdRaids collection #{
"alias": "...",
"name": "...",
"search": { ... },
"level": "...",
"parity": ...,
"chunkSize": ... ,
"devices": [ ... ],
"size": { ... },
"encryption": { ... },
"filesystem": { ... },
"partitions": [ ... ],
"ptableType": "...",
}
The devices property is used to specify the devices that act as members of
the RAID.
mdRaids and devices #"storage": {
"drives": [
{
"search": "/dev/sda",
"partitions": [
{ "alias": "sda-40", "size": "40 GiB" }
]
},
{
"search": "/dev/sdb",
"partitions": [
{ "alias": "sdb-40", "size": "40 GiB" }
]
}
],
"mdRaids": [
{
"devices": [ "sda-40", "sdb-40" ],
"level": "raid0"
}
]
}6.3 Searching existing devices #
When a section in the profile describes modification and deletion of devices, the description must match with one or more devices from the system. If a description matches several devices, the same operations are applied to all of them. This approach is useful in several situations, such as applying the same partitioning schema to several disks or deleting all partitions of a disk that match a given criteria.
Matching is performed using a search subsection, as illustrated below. By
default, all devices in the scope fitting the conditions are matched. You can limit the
number of devices that match using max. The following example shows how
you can use several search sections to find the three biggest disks in the system, delete all
partitions bigger than 1 GiB within them and create new partitions of type RAID.
search section #"storage": {
"drives": [
{
"search": {
"sort": { "size": "desc" },
"max": 3
},
"partitions": [
{
"search": {
"condition": { "size": { "greater": "1 GiB" } }
},
"delete": true
},
{
"alias": "newRaidPart",
"id": "raid",
"size": { "min": "1 GiB" }
}
]
}
]
}
The scope of each search depends on the place in the profile of the search
section. In the example, the search in the drives section considers all
disks in the system, while the search in the partitions subsection only
considers the partitions of the disks matched by the outer search. A search section inside
the description of an MD RAID only matches the software
RAID devices. A search section inside the partitions subsection of that
RAID description only matches the partitions of RAIDs that have matched the conditions of the
most external search.
A device can never match two different sections of the Agama profile. When several sections at the same level contain a search subsection, devices are matched in the order the sections appear on the profile.
"storage": {
"drives": [
{
"search": {
"sort": { "size": "desc" },
"max": 1
},
"alias": "biggest"
},
{
"search": {
"sort": { "size": "desc" },
"max": 1
},
"alias": "secondBiggest"
}
]
}An empty search matches all devices in the scope. For example, the configuration given below deletes all the partitions of the chosen disk, but only if the disk contains partitions.
"storage": {
"drives": [
{
"partitions": [
{ "search": {}, "delete": true }
]
}
]
}
If there is not a single system device matching the scope and the conditions of a given
search, then ifNotFound is used. If the value is skip,
the device definition is ignored. If the value is error, the whole
process is aborted.
Entries on drives are different from all other subsections describing devices because drives can only be matched to existing devices. If search is omitted for a drive, it is considered to contain the following configuration:
search if omitted for a drive #{
"search": {
"sort": "name",
"max": 1,
"ifNotFound": "error"
}
}When the syntax of a search subsection becomes cumbersome, you can use simple strings.
You can use search to find a device by its name. For example:
{ "search": "/dev/sda" }
The string * allows you to match all the devices from the current context,
if any. This is especially useful to match all partitions or logical volumes in a device,
irrespective of whether there is any. For example, the two following search sections are
equivalent:
{ "search": "*" }{ "search": { "ifNotFound": "skip" } }6.4 Additional search conditions #
Besides matching by name, size, or partition number, a search section's
condition also accepts the following conditions. Which ones are available
depends on the kind of device:
driverandbossapply only todrives.idapplies only topartitions.filesystemapplies todrives,mdRaids,partitions, andlogicalVolumes.partitionsapplies todrivesandmdRaids.
filesystemMatches by the presence, type, or label of a file system. Use the shortcut string
"any"to match formatted devices, or"none"to match unformatted ones; otherwise provide an object withtypeorlabel.{ "search": { "condition": { "filesystem": "any" } } } { "search": { "condition": { "filesystem": { "type": "xfs" } } } } { "search": { "condition": { "filesystem": { "label": "DATA" } } } }idMatches a partition by its
id. The following table lists every recognized value and the partition table types that accept it.Table 2: Partition id values #Value Description Partition table dos12FAT12 partition MS-DOS dos16FAT16 partition MS-DOS ntfsNTFS or HPFS partition MS-DOS dos32FAT32 partition MS-DOS extendedExtended partition MS-DOS diagDiagnostics partition MS-DOS, GPT prepPPC PReP boot partition MS-DOS, GPT swapSwap partition MS-DOS, GPT, DASD linuxLinux partition MS-DOS, GPT, DASD, implicit irstIntel Rapid Start Technology partition MS-DOS, GPT lvmLVM partition MS-DOS, GPT, DASD raidRAID partition MS-DOS, GPT, DASD xbootldrBoot Loader Specification partition MS-DOS, GPT espEFI System Partition MS-DOS, GPT bios_bootBIOS boot partition GPT windows_basic_dataWindows basic data partition GPT microsoft_reservedMicrosoft reserved partition GPT linux_homeLinux home partition GPT linux_server_dataLinux server data partition GPT linux_root_armLinux root partition (arm) GPT linux_root_aarch64Linux root partition (aarch64) GPT linux_root_ppc32Linux root partition (ppc) GPT linux_root_ppc64beLinux root partition (ppc64be) GPT linux_root_ppc64leLinux root partition (ppc64le) GPT linux_root_riscv32Linux root partition (riscv32) GPT linux_root_riscv64Linux root partition (riscv64) GPT linux_root_s390Linux root partition (s390) GPT linux_root_s390xLinux root partition (s390x) GPT linux_root_x86Linux root partition (x86) GPT linux_root_x86_64Linux root partition (x86_64) GPT linux_usr_armLinux usr partition (arm) GPT linux_usr_aarch64Linux usr partition (aarch64) GPT linux_usr_ppc32Linux usr partition (ppc) GPT linux_usr_ppc64beLinux usr partition (ppc64be) GPT linux_usr_ppc64leLinux usr partition (ppc64le) GPT linux_usr_riscv32Linux usr partition (riscv32) GPT linux_usr_riscv64Linux usr partition (riscv64) GPT linux_usr_s390Linux usr partition (s390) GPT linux_usr_s390xLinux usr partition (s390x) GPT linux_usr_x86Linux usr partition (x86) GPT linux_usr_x86_64Linux usr partition (x86_64) GPT { "search": { "condition": { "id": "esp" } } }driverMatches drives handled by the given kernel driver, as reported by
hwinfo. A drive can be handled by several drivers; the condition matches if any of them is the given one.{ "search": { "condition": { "driver": "ahci" } } }bossBoolean. Whether the drive is a BOSS (Boot Optimized Storage Solution) device, a technology introduced by Dell. Use
falseto match any other drive.partitionsMatches a drive or MD RAID by the presence or properties of its partitions. Use the shortcut string
"any"or"none"for presence alone, or an object withany,none,all, orcountto match against a nested condition.{ "search": { "condition": { "partitions": "any" } } } { "search": { "condition": { "partitions": { "any": { "size": { "greater": "10 GiB" } } } } } } { "search": { "condition": { "partitions": { "count": { "min": 2, "max": 3 } } } } }
Combine conditions with and, or, and
not operators, each taking one or more nested conditions:
{
"search": {
"condition": {
"and": [
{ "boss": false },
{ "size": { "greater": "100 GiB" } }
]
}
}
}6.5 Referencing other devices #
At certain times, it is necessary to reference other devices as part of the specification of
an LVM volume group or RAID. Those devices can be existing system devices, or devices that
will be created as response to another entry of the Agama profile. For that purpose, you
can use alias.
alias in storage configuration #"storage": {
"drives": [
{
"partitions": [
{ "size": "50 GiB", "id": "lvm", "alias": "newPV" }
]
}
],
"volumeGroups": [
{
"name": "newVG",
"physicalVolumes": [ "newPV" ],
"logicalVolumes": [ { "name": "data", "size": "20 GiB" } ]
}
]
}If a section matching several existing devices contains an alias, that alias is considered as a reference to all the devices. Consider the following equivalent examples that assume there are at least two disks in the system:
"storage": {
"drives": [
{
"search": {
"sort": { "size": "desc" },
"max": 1
},
"alias": "biggest"
},
{
"search": {
"sort": { "size": "desc" },
"max": 1
},
"alias": "secondBiggest"
}
],
"mdRaids": [
{
"devices": [ "biggest", "secondBiggest" ],
"level": "raid0"
}
]
}
"storage": {
"drives": [
{
"search": {
"sort": { "size": "desc" },
"max": 2
},
"alias": "big"
}
],
"mdRaids": [
{
"devices": [ "big" ],
"level": "raid0"
}
]
}6.6 Specifying the size of a device #
When configuring storage in the Agama profile, you must specify the desired size for a new
device or the target size when resizing an existing one. The schema allows for flexible size
specification. The most common method is using a human-readable string that can be parsed
into a valid size. For example, 10 GiB. Alternatively, you can provide a
size as an array (a tuple) containing a minimum size and an optional maximum size. The
resulting size will be between these two thresholds. If the maximum is omitted, the device
will expand to consume all available contiguous space, respecting other specified size
constraints.
For configurations targeting existing partitions or Logical Volumes (LVs)—which must
include a search section—the special keyword current can be used as
a minimum or maximum size limit. For the use of current and how it affects
resizing the corresponding devices, see
Section 6.9, “Deleting and shrinking existing devices”.
If the size property is completely omitted for an existing device (for example, combined with
search), Agama acts as if both minimum and maximum limits were set to
current. This characteristic implies that the partition or logical volume
is not resized. If the size is omitted for a device that will be created but includes a
file system entry specifying a mount point, Agama can determine the size limits by applying
the settings of the installation product. In Agama terminology, the product is the
operating system being installed, and it specifies the default size ranges for its relevant
file systems, such as /, swap and
/home.
6.7 Partition needed for booting #
You can use the boot entry to configure whether Agama should calculate
and create extra partitions needed for booting. The behavior is the same when using an alias. If
the device is not specified, Agama takes the location of the root file system as reference.
"storage": {
"drives": [
{
"search": "/dev/sda",
"alias": "bootDisk"
},
{
"search": "/dev/sdb",
"partitions": [
{ "filesystem": { "path": "/" } }
]
}
],
"boot": {
"configure": true,
"device": "bootDisk"
}
}6.8 Keeping an existing file system or encryption layer #
The entry filesystem contains a reuseIfPossible flag
with a default value of false. You can use it in combination with
search to specify that the device must not be re-formatted.
6.9 Deleting and shrinking existing devices #
The storage configuration proposal must allow defining how to manage existing storage components, including partitions, LVM logical volumes, MD RAIDs, and LVM volume groups. A search mechanism is employed to match a partition or LVM logical volume definition with one or more devices already present on the system. Once a match is made, you can specify the required action.
The component can be marked to be deleted unconditionally, or deleted if needed to free space for newly defined devices. It can also be shrunk to a necessary size or shrunk or extended to a specific size or range. It is even possible to express combined actions, like attempting to shrink a component first and only proceeding to delete it if shrinking doesn't free up enough space.
Deletion is achieved with the corresponding delete flag for unconditional
deletion or the deleteIfNeeded flag for conditional deletion. If either of
these flags is active for a partition, it is illogical to specify any other usage for it,
such as declaring a file system. For example, you can configure the proposal to
unconditionally delete partition number 1 and then conditionally delete
other partitions as needed to secure the space for a new 30 GiB partition.
"storage": {
"drives": [
{
"partitions": [
{
"search": {
"condition": { "number": 1 }
},
"delete": true
},
{ "search": {}, "deleteIfNeeded": true },
{ "size": "30 GiB" }
]
}
]
}Often some partitions or logical volumes are shrunk only to make space for the declared devices. But because resizing is not a destructive operation, you can declare a given partition to be resized (shrunk or extended), then formatted and/or mounted.
Resizing a partition can be limited depending on its content and the file system type.
Combining search and resize is enough to indicate that
Agama is expected to resize a given partition, if possible. The keyword
current can be used as min and/or
max for the size range, and it is always equivalent to the exact original
size of the device. The simplest way to use current is to just specify
that the matched device should keep its original size. That is the default for searched (and
found) devices, if size is completely omitted.
"storage": {
"drives": [
{
"partitions": [
{
"search": {
"condition": { "number": 1 }
},
"size": { "min": "current", "max": "current" }
}
]
}
]
}
You can use other combinations to specify how a device could be resized, if possible. The
following examples match existing partitions by their file system label (set beforehand
with a tool such as e2label or during a prior installation), using the
filesystem search condition's label field.
"storage": {
"drives": [
{
"partitions": [
{
"search": {
"condition": { "filesystem": { "label": "shrinkIfNeeded" } }
},
"size": { "min": 0, "max": "current" }
},
{
"search": {
"condition": { "filesystem": { "label": "resizeToFixedSize" } }
},
"size": "15 GiB"
},
{
"search": {
"condition": { "filesystem": { "label": "resizeByRange" } }
},
"size": { "min": "10 GiB", "max": "50 GiB" }
},
{
"search": {
"condition": { "filesystem": { "label": "growAsMuchAsPossible" } }
},
"size": { "min": "current" }
}
]
}
]
}
When the size limits are specified as a combination of current and a fixed
value, ensure that the resulting min is not bigger than the resulting
max.
Both deleteIfNeeded and a size range can be combined to indicate that
Agama should make space first, by shrinking the partitions and deleting them only if
shrinking is not enough.
"storage": {
"drives": [
{
"partitions": [
{
"search": {},
"size": { "min": 0, "max": "current" },
"deleteIfNeeded": true
}
]
}
]
}6.10 Generating default volumes #
Every product provides a configuration which defines the storage volumes, such as the
partitions to create by default and the file systems that are supported for each of them.
The default or mandatory
product volumes can be automatically generated by using a generate section
in the partitions or logicalVolumes sections.
"storage": {
"drives": [
{
"partitions": [
{ "generate": "default" }
]
}
]
}
The generate section allows creating the product volumes without
explicitly writing all of them. The configuration above would be equivalent to the following:
"storage": {
"drives": [
{
"partitions": [
{ "filesystem": { "path": "/" } },
{ "filesystem": { "path": "/home" } },
{ "filesystem": { "path": "swap" } }
]
}
]
}
If any path is explicitly defined, the generate section will not generate
a volume for it. For example, with the following configuration, only root and swap would be
automatically added.
"storage": {
"drives": [
{
"partitions": [
{ "generate": "default" },
{ "filesystem": { "path": "/home" } }
]
}
]
}The auto-generated volumes can be also configured. For example, for encrypting the partitions:
"storage": {
"drives": [
{
"partitions": [
{
"generate": {
"partitions": "default",
"encryption": {
"luks1": { "password": "12345" }
}
}
}
]
}
]
}
The mandatory keyword can be used for generating only the mandatory
partitions or logical volumes:
"storage": {
"volumeGroups": [
{
"name": "system",
"logicalVolumes": [
{ "generate": "mandatory" }
]
}
]
}6.11 Generating physical volumes #
You can configure volume groups to explicitly use a set of devices as physical volumes. The aliases of the devices to use are added to the list of physical volumes:
"storage": {
"drives": [
{
"search": "/dev/vda",
"partitions": [
{ "alias": "pv2", "size": "100 GiB" },
{ "alias": "pv1", "size": "20 GiB" }
]
}
],
"volumeGroups": [
{
"name": "system",
"physicalVolumes": ["pv1", "pv2"]
}
]
}
The physical volumes can be automatically generated too, by simply indicating the target
devices in which to create the partitions. For that, a generate section is
added to the list of physical volumes:
"storage": {
"drives": [
{
"search": "/dev/vda",
"alias": "pvs-disk"
}
],
"volumeGroups": [
{
"name": "system",
"physicalVolumes": [
{ "generate": ["pvs-disk"] }
]
}
]
}If the auto-generated physical volumes have to be encrypted, then the encryption config is added to the generate section:
"storage": {
"drives": [
{
"search": "/dev/vda",
"alias": "pvs-disk"
}
],
"volumeGroups": [
{
"name": "system",
"physicalVolumes": [
{
"generate": {
"targetDevices": ["pvs-disk"],
"encryption": {
"luks2": { "password": "12345" }
}
}
}
]
}
]
}7 Activating multipath during installation of SUSE Linux Enterprise Server for SAP applications using Agama #
Agama activates multipath either unconditionally or on demand. Set the
LIBSTORAGE_MULTIPATH_AUTOSTART=1 boot parameter to force activation
when you know the system uses multipath. Otherwise, Agama tries to detect multipath
devices and asks whether to activate them. Answer that question in the Web interface, from
the Agama command-line interface, or in advance in the profile's
questions section.
7.1 Understanding multipath activation during installation using Agama #
Multipath in Linux is a device mapper framework that provides redundancy and improved performance for storage devices by creating a single logical device from multiple physical paths to the same storage target. This architecture prevents storage I/O interruptions due to hardware failures while enabling load balancing across paths, and is commonly used in enterprise environments.
To enable this capability, the multipath subsystem must be activated by Agama during installation of SUSE Linux Enterprise Server for SAP applications. Once activated, multipath affects all devices system-wide, meaning all disks must be referenced exclusively by their corresponding multipath device names. Agama currently provides several mechanisms for users to activate multipath support.
7.2 Requirements for multipath activation #
The Agama installer, which is available with the
.isofile you use for installing SUSE Linux Enterprise Server for SAP applications.For forced activation of multipath, access to command-line boot parameters.
For conditional activation of multipath, access to the Agama web interface, or the Agama CLI, or Agama profiles.
By default, all the different ways of forced and conditional activation of multipath are available to you.
7.3 Activating multipath using boot parameters #
If you are certain that the system uses multipath, the most reliable method to ensure that Agama activates the corresponding subsystems is to enable the environment variable LIBSTORAGE_MULTIPATH_AUTOSTART at the time of boot.
To enable multipath during installation, perform the following steps:
When the boot menu is displayed, press E to edit the boot parameters.
Add the LIBSTORAGE_MULTIPATH_AUTOSTART parameter and set it to
1.Figure 2: Activation of multipath using boot parameters #Press Ctrl–X or F10 to exit the edit window and continue with the boot.
7.4 Activating multipath using the Agama Web interface, CLI, or profiles #
If multipath activation is not enforced through the boot parameter, Agama attempts to detect multipath devices in the system. When detected, Agama either prompts you to confirm multipath activation, or proceeds with unattended installation based on the answer provided in the Agama profile.
Detection of multipath devices using Agama is not fully reliable. If you are sure that the system uses multipath devices, we recommend using the method of enabling the necessary boot parameters.
Depending on whether you are performing an interactive or an unattended installation, perform the necessary steps as described below.
In an interactive installation, Agama prompts you to confirm whether to activate multipath. The prompt can be answered interactively using the Web interface, or from the Agama CLI.
If using the Web interface, confirm when you see a prompt similar to the following:
Figure 3: Activation of multipath using the Agama Web interface #If using the Agama CLI, add the answer to your Agama profile, either before or after the question comes up:
If the question has not come up yet, add the following to your profile and load it with
agama config editoragama config load(see Section 4, “Editing an Agama installation profile”):{ "questions": { "answers": [ { "class": "storage.activate_multipath", "answer": "yes" } ] } }If the question has already come up, answer it interactively with
agama monitor(see Section 13.10, “agama monitor”).
In an unattended installation, Agama looks for an answer to the question about multipath activation in the Agama profile.
Edit the Agama profile to include the following JSON configuration:
{ "questions": { "answers": [ { "class": "storage.activate_multipath", "answer": "yes" } ] } }Provide the path to the Agama profile using the inst.auto=URL/PATH/TO/AGAMA/JSON/PROFILE boot parameter.
7.5 Summary of multipath activation #
In a manual installation, activate multipath in one of two ways. Add the LIBSTORAGE_MULTIPATH_AUTOSTART=1 boot parameter, or confirm multipath activation in the Agama Web or command-line interface during the installation.
In an unattended installation, edit the Agama profile to include an answer to the multipath activation question. Then pass the path to the profile as the value of the inst.auto boot parameter.
7.6 Troubleshooting multipath activation #
Depending on the chosen method of multipath activation, use one or more of the following troubleshooting tips:
If using forced activation, ensure that you correctly add the LIBSTORAGE_MULTIPATH_AUTOSTART=1 boot parameter. After the boot, you can verify it in the content of the GRUB 2 configuration file of your system.
If using answers to Agama questions, ensure that you have used the correct JSON snippet for multipath activation, by running the
agama config showcommand.
8 Enabling Kdump from first boot during automated installation using Agama #
Kdump is neither installed nor enabled on a freshly installed system, so a crash during
or shortly after first boot leaves you without diagnostic information. Add a
post-installation script to the scripts section of your Agama profile,
with chroot set to true, to install and enable
Kdump inside the target system before it boots for the first time.
8.1 Why configure Kdump before first boot? #
Kdump is not installed or enabled on a freshly installed system by default. A crash during or shortly after first boot would then leave you without diagnostic information. A post-installation script in your Agama profile can close that gap: it installs and enables Kdump inside the target system's chroot, before the system boots for the first time.
8.2 Requirements for enabling Kdump #
An Agama installation profile you control, for an unattended installation of SUSE Linux Enterprise Server for SAP applications.
8.3 Adding the Kdump post-installation script #
Add a
postentry to thescriptssection of your Agama profile, withchrootset totrueso the script runs inside the installed system rather than the installation medium:"scripts": { "post": [ { "name": "enable-kdump", "chroot": true, "content": "#!/usr/bin/bash\nzypper --non-interactive install kdump\nsystemctl enable kdump-commandline.service\nsystemctl enable kdump.service\nkdumptool commandline -u" } ] }The script performs the following steps:
zypper --non-interactive install kdump: installs the kdump package. The--non-interactiveflag runs Zypper non-interactively, which is required for an unattended installation.systemctl enable kdump-commandline.service: enables the auxiliary service that sets up Kdump parameters from the kernel command line during boot.systemctl enable kdump.service: enables the main Kdump service, which manages capturing and saving crash dumps.kdumptool commandline -u: updates the boot loader configuration with the recommended kernel command-line arguments for Kdump.
Merge this
scriptssection into your existing profile alongside your other settings, such asproductanduser, and start the unattended installation as usual (see Section 9, “Initiating automated installation using Agama”).
8.4 Summary of enabling Kdump #
With the enable-kdump post-installation script in place, Kdump is
installed, enabled, and configured on the boot loader as soon as the installed system boots
for the first time.
8.5 Verifying Kdump after installation #
After the system completes installation and reboots for the first time, verify that Kdump is enabled and configured correctly.
Check that both services are
active (exited)oractive (running):>sudosystemctl status kdump>sudosystemctl status kdump-commandline.serviceCheck that a
crashkernel=allocation is present on the kernel command line:>cat /proc/cmdlineThe output contains an entry similar to
crashkernel=SIZEM@OFFSET.
To confirm Kdump actually captures a crash dump, you can intentionally trigger a kernel
crash with the command below, then check the /var/crash directory
after the system reboots. Only do this on a non-production, disposable system.
>echo c | sudo tee /proc/sysrq-trigger
9 Initiating automated installation using Agama #
Start an unattended Agama installation with the inst.auto boot
parameter, from a profile at one of Agama's predefined locations, or from the Agama
CLI with agama config load and agama install. All
three methods read the same profile and install the system without further interaction.
9.1 Requirements for starting an unattended installation #
The machine booted from an Agama installation medium, at the boot menu where kernel parameters can still be edited.
An Agama profile reachable from the target machine, either over the network or from local media, such as a USB stick.
9.2 Initiating the unattended installation #
Choose one of the following two methods. Both start the same unattended installation, so perform only one of them.
Start the installation using kernel boot parameters.
Add the
inst.autoparameter to the kernel command line to specify the location of the Agama profile:inst.auto=http://example.net/profile.json
Agama reads the profile and starts the installation without further interaction. This method is suitable for PXE boot setups, custom ISO builds, or cloud-init workflows. For setting up a PXE boot server, see Section 14, “For more information”.
Start the installation without a boot parameter by placing the profile at one of Agama's predefined locations.
If no
inst.autoparameter is given, Agama searches a set of predefined locations for a profile. It tries the file namesautoinst.jsonnet,autoinst.json, andautoinst.xml, in that order, and uses the first one it finds. Agama checks the following locations:A device labeled
OEMDRV, such as an attached USB stick, typically used for pre-installed systems.The root of the installation medium itself, such as the USB stick or DVD you booted from.
The root of the installer's own live file system, useful for a custom ISO image with the profile already embedded.
Agama does not report an error if none of these locations contain a profile. The installation then proceeds interactively as usual.
Start the installation using the Agama CLI.
Switch to the root shell already running on virtual console 8; no password is required there. If using a software such as the Virtual Machine Manager, use the menu to send the signal Ctrl–Alt–F8. To return to the graphical console, use Ctrl–Alt–F7.
On that console, you will have the Agama CLI available.
Optionally, set a password using the live.password=PASSWORD boot parameter if you want to access the Agama CLI over SSH instead, or want a password prompt on a text console other than virtual console 8.
Load the profile with the following command:
#agama config load profile.jsonOptionally, review and adjust the loaded configuration in an editor:
#agama config editValidate the profile:
#agama config validate profile.jsonInitiate the installation with the following command:
#agama installMonitor the installation with the following command:
#agama monitorFinish the installation with the following command:
#agama finish
9.3 Summary of starting an unattended installation #
An unattended Agama installation starts from the inst.auto kernel boot
parameter, or from a profile at one of Agama's predefined locations if that parameter is
not given. If you also need shell access during the installation, switch to the root shell
already running on virtual console 8, or set a root password with
live.password to log in through a different text console or via SSH.
Either way, the Agama CLI lets you load, edit, and validate the profile, then start,
monitor, and finish the installation.
9.4 Troubleshooting the start of an installation #
If
agama installreports that preconditions for installation are not met, runagama config validate profile.jsonagain to confirm the loaded profile is valid, and checkagama statusfor the current installation state.If the installation fails or behaves unexpectedly, collect the installation logs before the live session ends or the system reboots. See Section 12, “Post-installation troubleshooting of automated installation using Agama”.
10 Agama boot options #
The behavior of the Agama Live ISO can be altered using the kernel command line at boot
time. On architectures that support GRUB 2, modify the agama-installer
boot entry, adding the options below at the end of its linux line.
10.1 Specifying and starting an unattended installation #
inst.autoTells the installer to use the profile at the given URL to start an unattended installation.
inst.auto=http://mydomain.org/profile.jsonnet
inst.auto_insecureIgnores SSL/TLS problems, such as a self-signed certificate, when downloading the profile.
inst.infoPoints to an info file containing additional Agama settings. Useful when you need to provide more options than are practical to type at the boot prompt. Only parameters documented in this section are supported. Kernel parameters in the file are ignored.
inst.info=ftp://myserver/devel.info
inst.installIn unattended mode, Agama automatically starts the installation after reading the profile. Set this to
0to stop after reading the profile instead, giving you a chance to review the installation options before proceeding.inst.finishChanges Agama's behavior when the installation finishes:
stop: do nothing (default for interactive installation). The Web interface shows a button to reboot and a chance to download the logs.reboot: reboot the system (default for unattended installation).halt: halt the system.poweroff: power off the system.
inst.finish=poweroff
10.2 Pre-boot scripts and driver updates #
inst.scriptURL of an installation script that runs during boot, before
inst.auto(if given) is processed. Can perform preparation work or tweak the installation workflow using Agama's command-line interface.inst.script_insecureIgnores SSL/TLS problems, such as a self-signed certificate, when downloading the installation script.
inst.dudApplies a Driver Update (DUD) to the installation environment, to patch or extend the installer. Supported formats include RPM packages and DUD archives created with
mkdud. Can be specified multiple times, with each entry processed independently. This option performs no dependency checks or signature validation on the provided update.inst.dud=https://download.opensuse.org/some-project/some.rpm inst.dud=label://UPDATES/package.rpm
Besides patching the live image or adding kernel modules, a DUD can also carry a partial Agama profile. Place an
autoinst.jsonnet,autoinst.json, orautoinst.xmlfile in the DUD'sinst-sysdirectory. Agama then copies and processes that file automatically, in addition to any profile given viainst.auto. This is useful for bundling installation scripts or settings together with a live-image patch or replacement package, without a separate profile download.inst.dud_insecure- Warning: Security risk
Disabling SSL/TLS checks is a security risk. An attacker could tamper with the downloaded DUD image and inject malicious code into the system, or cause vulnerable packages to be installed.
Ignores SSL/TLS problems, such as a self-signed certificate, when downloading the DUD image from an HTTPS server.
inst.dud_packages.gpg- Warning: Security risk
Installing unknown packages is a security risk. Malicious code could be installed on your system.
Set to
0to ignore package GPG signature problems when installing DUD packages to the target system. Applies only to DUD packages; GPG problems for other packages are still detected and reported.
10.3 Network, registration, and time #
inst.copy_networkWhether the persistent NetworkManager system connections should be copied to the target system at the end of installation. Enabled by default.
inst.copy_network=0
inst.register_urlSets the URL of the RMT or SUSE Customer Center proxy server to register the product with.
inst.register_url=http://rmt.example.net
inst.install_url- Warning: Affects all products
Setting this variable affects all products.
Overrides the default
installation_urlset in the product files. Particularly useful for pre-production testing (for example, with openQA).inst.install_url=https://myrepo,https://myrepo2
proxySets up a network proxy, in the form
protocol://[user[:password]@]host[:port].proxy=http://192.168.122.1:3128
rd.ntpSets the time sources to synchronize the date and time before Agama itself starts; specify multiple times for multiple sources. The installation medium synchronizes during boot, and Agama copies the resulting configuration to the installed system.
rd.ntp=pool:1.opensuse.pool.ntp.org:iburst
inst.self_updateAvailable since the initial release of SUSE Linux 16.0. Set
inst.self_update=0to disable the installer self-update. Related options:inst.self_update_ssl=0,inst.self_update_unsigned_repo=1,inst.self_update_import_key=1, andinst.self_update_gpg=0.
10.4 Live system access #
live.password/live.password_hashSets the
rootpassword of the live system.live.passwordaccepts a plain text password;live.password_hashexpects a hashed password, which is more secure but longer and harder to type at the boot prompt. The hashed form is more practical when the boot parameters are prepared in advance, for example for PXE boot or virtual machines. If you do not set a password with either option, Agama generates a random one and prints it to the console.live.password=nots3cr3t
live.password_dialogStarts an interactive full-screen dialog during boot for entering and confirming the password. If the dialog does not render correctly in some environments, try Ctrl–L to refresh the screen, or use
live.password_systemdinstead.live.password_dialog live.password_dialog=1
live.password_systemdAsks for the password using a single-line prompt instead of a full-screen dialog, which works better in constrained environments such as a serial console.
live.password_systemd live.password_systemd=1
inst.remoteAvailable since SUSE Linux 16.1. By default, the Agama installer can be accessed remotely from other machines or mobile devices. Set
inst.remote=0to disable remote access for increased security, restricting access to the local machine only. To disable other network services, such as SSH, use the standardsystemd.maskboot option instead.
10.5 Advanced and diagnostic options #
fipsStandard Linux kernel parameter. Set to
1to start the installer in FIPS-enabled mode; Agama also uses this as a trigger to propose a FIPS-compliant installed system.fips=1
inst.solver_testcaseAvailable since SUSE Linux 16.1. By default, the dependency solver test case is saved only on failure. Set
inst.solver_testcase=1to also save it on success, which is useful for debugging package dependency problems. Saved to/run/agama/testcase, and included in the logs created byagama logs store. If theZYPP_FULLLOG=1boot option is set, the solver test case is instead created automatically bylibzypp(the library behind Zypper and Agama's own package resolution) under/var/log/YaST2/autoTestcase, and this option is ignored.inst.systemd_boot_preview- Note: Preview feature
This is a preview feature for testing
systemd-bootsupport. It automatically falls back to GRUB 2 if the system does not meet the Boot Loader Specification (BLS) requirements, and may be removed after the testing period forsystemd-bootsupport ends.Available since SUSE Linux 16.1. Set to
1to enable thesystemd-bootboot loader as a preview feature. systemd.unitStandard way to change the
systemdboot target. Useful for headless mode, when neither a graphical interface nor a browser needs to start locally.systemd.unit=multi-user.target
systemd.maskStandard way to disable a
systemdunit during boot, for example to disable a default service started on the Live ISO:systemd.mask=sshd.service
10.6 Linuxrc compatibility #
Agama provides a few options that ease the transition from linuxrc, the
boot-time parameter parser used by earlier SUSE installers. They are not identical and work
slightly differently, but should be sufficient for regular use. Unlike
linuxrc, Agama is case-sensitive and requires the exact parameter name,
without the additional dots, dashes, and underscores linuxrc tolerated.
- Info file support
The
inst.infooption (see Section 10.1, “Specifying and starting an unattended installation”) acts similarly tolinuxrc'sinfo=option. However, it supports only URI schemes recognized bycurl, and the info file can contain only Agama-specific options.- Network configuration
Agama translates a subset of
linuxrc'sifcfgoption into theip/vlansyntax used bydracut; for most cases, prefer writingipdirectly instead. For a complete list ofdracutoptions, refer toman 7 dracut.cmdline.# ifcfg=*=dhcp ip=dhcp # ifcfg=eth0=dhcp ip=eth0:dhcp # ifcfg=eth0.10=192.168.0.100/24,192.168.0.1 vlan=eth0.10:eth0 ip=192.168.0.100::192.168.0.1:24::eth0.10 # ifcfg="eth0=192.168.0.33/24 10.0.0.100/24,192.168.0.1,192.168.0.1 10.0.0.1,example.com" ip=192.168.0.33::192.168.0.1:24::eth0 nameserver=192.168.0.1 nameserver=10.0.0.1 ip=10.0.0.100:::24::eth0
hostnameandSetHostnameAvailable with almost the same behavior as the equivalent
linuxrcoptions.hostname: sets the system's static host name indracutand persists it for the installer. If set, the transient host name is not used, so network configuration (for example, DHCP) does not modify it. Distinct from the profile's ownhostnamesection (see Section 5.2, “Host name configuration for an Agama installation profile”), which applies to the installed system rather than the live installation environment.SetHostname: controls whether the host name can be set by DHCP. Setting it to0sets NetworkManager'shostname-modetonone. If a static host name is already set, it is not modified either way; this differs from the behavior under Wicked.# Default, keeps the default NetworkManager hostname-mode SetHostname=1 # Sets the NetworkManager hostname-mode to 'none' SetHostname=0
- Environment variables
Some options were not handled by
linuxrcdirectly, but passed through to YaST using theinstall.inffile, available to the installer as environment variables. Agama recognizes the same variable name patterns:LIBSTORAGE*,YAST*,Y2*, andZYPP_FULLLOG, making them available to the Agama systemd services. For example,LIBSTORAGE_MULTIPATH_AUTOSTART(see Section 7.3, “Activating multipath using boot parameters”) andZYPP_FULLLOG(see Section 10.5, “Advanced and diagnostic options”) are already documented individually elsewhere in this reference.
11 Agama URLs #
In addition to well-known protocols such as http(s)://,
ftp://, and file://, Agama understands most AutoYaST-
and YaST-specific URL schemes. Use any of these wherever a URL is expected, for example
when pointing inst.auto at an unattended installation profile.
11.1 Supported schemes #
Agama supports the following standard schemes (relying on curl, so a
protocol may occasionally work "by accident"; only the schemes documented here are actually
supported):
httpandhttpsfor HTTP and HTTPS.ftpandftpsfor FTP and FTP over TLS.smbandsmbsfor the Server Message Block (SMB) protocol. Usesmbrather thancifs.filefor local files.
Agama also supports the following Agama-specific schemes, described in detail below:
Section 11.3.1, “device”, Section 11.3.2, “usb”,
Section 11.3.3, “label”, and Section 11.3.4, “cd, dvd, and hd”.
11.2 Relative references #
For the url property in the scripts and
files sections of an Agama profile, the value can be a relative
reference, resolved against the URL of the profile that contains it. This replaces the
relurl scheme used in AutoYaST.
For example, if the profile below is retrieved from
https://example.com/machines/sles16.jsonnet, the script URL resolves to
https://example.com/machines/scripts/snapshot.sh:
{
scripts: {
postPartitioning: [
{
name: "snapshot",
url: "scripts/snapshot.sh"
}
]
}
}11.3 Agama-specific schemes #
Standard protocols cover most use cases, but Agama-specific schemes can be handy in
others. For example, you could distribute a profile on a USB stick instead of over HTTP,
with usb:///profile.json, and let Agama search all attached USB devices
for it.
11.3.1 device #
The most flexible scheme, in the general form device://[DEVICE]/PATH.
Search for profile.json on /dev/sda1:
device://sda1/profile.json
Search in a specific directory on the same device:
device://sda1/profiles/sles.json
Nested devices are supported too:
device:///cciss/c1d0p5/sles.json
11.3.2 usb #
A form of device:// limited to USB devices. Searches
profile/sles.json on all attached USB devices:
usb:///profile/sles.json
11.3.3 label #
Searches a file system with a given label, in the form
label://LABEL/PATH. For example, search for
sles.json on a file system labeled OEMDRV:
label://OEMDRV/sles.json
11.3.4 cd, dvd, and hd #
Another particular case of device://, with a slightly different form
and no difference in behavior between the three names:
dvd:/PATH?devices=DEVICE.
hd:/sles.jsonnet?devices=/dev/sr0 dvd:/autoinst.xml?devices=sr1
device
Since cd, dvd, and hd offer no
advantage over device, prefer device instead.
11.3.5 Not yet supported #
repo:// URLs are not supported yet.
12 Post-installation troubleshooting of automated installation using Agama #
Run agama logs store to collect the Agama installation logs into a
compressed archive. The installation runs from a RAM disk, so copy that archive to a
permanent location, such as a networked machine reachable over scp or a
mounted USB stick, before the live session ends or the system reboots. Otherwise the logs
are lost.
12.1 Why collect logs from the command line? #
Agama installation logs are what you need to diagnose why an unattended installation failed or behaved unexpectedly. An unattended installation typically runs without an interactive graphical session, so the command-line workflow described here is usually the most practical way to get hold of them.
The installation itself runs from a RAM disk, so any logs you collect there are lost once the live session ends or the system boots into the newly installed system. Always copy collected logs to a permanent location before that happens.
12.2 Requirements for collecting logs #
Access to a shell on the machine running the Agama installation, either directly on the console or over SSH.
A permanent location to copy the logs to: a networked machine reachable over
scp, or a mountable USB stick or SD card.
12.3 Choosing when to collect the logs #
When you actually run the collection procedure below depends on how the installation went:
If the installation completes, wait until the final page appears, then run it.
If the installation crashes and you still have shell access, run it right after the crash.
If the whole live system hangs or crashes, try connecting over SSH from outside the machine instead. SSH is enabled by default; set a root password with
live.passwordin advance so you can log in (see Section 10.4, “Live system access”).
12.4 Collecting and saving the logs #
Run the following procedure from a shell on the machine running the installation.
Collect and store the logs in a compressed archive:
#agama logs storeThe command prints the exact path and file name where it stored the logs. See also Section 13.6.1, “
agama logs store” in the Agama command-line reference.Copy the archive to a permanent location before the live session ends or the system reboots. Choose one of the following methods.
Copy the archive to a networked machine over
scp, to a non-privileged user's home directory rather than the world-writable/tmpdirectory on the target:#scp /tmp/agama-logs*.tar.gz user@myworkingmachine:You can use an IP address instead of a host name. Find the installation machine's address with
ip a.Copy the archive to a mounted USB stick or SD card:
#lsblkIdentify the device name from the output, then mount it, copy the archive, and unmount it again:
#mount /dev/sdX1 /mnt cp /tmp/agama-logs*.tar.gz /mnt umount /mntIf
/mntis busy, create and use another mount point, such as/mnt2, instead.
12.5 Collecting logs after a successful installation #
If the installation succeeded and you can boot into and log in to the newly installed
system, the Agama installation logs are already preserved at
/var/log/agama-installation. No separate collection step is needed.
12.6 Summary of log collection #
Use agama logs store to collect a compressed archive of the installation
logs, then copy that archive off the machine before the live session ends. For a system that
finished installing successfully, the logs are already preserved at
/var/log/agama-installation on the installed system.
12.7 Troubleshooting log collection #
If you have no shell access because the system is hung and no root password was set at boot, you will not be able to log in over SSH to collect logs from that session. Consider adding the
live.passwordboot option in future installation attempts to keep this option available. See Section 10.4, “Live system access”.If
agama logs storefails or the archive seems incomplete, verify that you are running the command inside the live installation environment, not on an already rebooted target system.
13 Agama command-line reference #
The agama command-line program lets you inspect or change the
installation settings, handle installation profiles, start the installation, and monitor
its progress. This reference lists every agama command and subcommand.
13.1 Global options #
agama [OPTIONS] <COMMAND>
These options apply to the agama command itself, before any subcommand:
--host <HOST>URI pointing to Agama's remote host. For example,
https://my-server.lan,my-server.local, orlocalhost:10443. Defaults tohttp://localhost.--insecureWhether to accept invalid (for example, self-signed) certificates. Defaults to
false.--localSome commands can work even without a connection to the Agama server. Defaults to
false.
13.2 agama config #
Inspect or change the installation settings. The show subcommand
generates a profile, a JSON document describing the current configuration. To change a
configuration value, load a profile (complete or partial) using the
load subcommand.
agama config <COMMAND>
13.2.1 agama config show #
Generate an installation profile with the current settings. Settings without a value are
not included in the output. The output can be used as input for
agama config load.
agama config show [OPTIONS]
-o,--output <FILE_PATH>Save the output here. Prints to standard output if not given.
13.2.2 agama config load #
Read and load a profile.
agama config load [URL_OR_PATH]
<URL_OR_PATH>JSON file: URL or path, or
-for standard input.
13.2.3 agama config validate #
Validate a profile using JSON Schema. The schema is available at
/usr/share/agama/schema/profile.schema.json. Validation is always
performed as part of every other agama config command.
agama config validate [OPTIONS] <URL_OR_PATH>
<URL_OR_PATH>JSON file, URL or path, or
-for standard input.--localRun subcommands, if possible, in local mode, without trying to connect to a remote Agama server. Defaults to
false.
13.2.4 agama config generate #
Generate and print a native Agama JSON configuration from any supported profile kind and location. Supported kinds: JSON; Jsonnet (with hardware information injected); an AutoYaST profile, including ERB and rules/classes. Supported locations: a path, or a URL (including AutoYaST-specific schemes).
agama config generate [URL_OR_PATH]
<URL_OR_PATH>JSON file: URL or path, or
-for standard input.
13.2.5 agama config edit #
Edit and update an installation option using an external editor. Changes are discarded if
the editor exits with an error code. If no editor is specified, the
EDITOR environment variable is used, falling back to
/usr/bin/vi as a last resort.
agama config edit [OPTIONS]
-e,--editor <EDITOR>Editor command, including additional arguments if needed.
13.3 agama probe #
Analyze the system. In Agama terminology, probing means analyzing the system: reading software repositories, analyzing storage devices, and more. This command starts that analysis and returns immediately.
agama probe
13.4 agama install #
Start the system installation.
This command sets up the storage devices, installs packages, and so on. When the preconditions for installation are not met, it informs you and returns without making any changes to the system.
agama install
13.5 agama questions #
Handle installer questions. Agama might require user intervention at any time; for example, it might ask you to supply missing information such as a password to decrypt a file system, or to decide what to do after an error such as a repository connection failure. This command answers such questions directly from the command line.
agama questions <COMMAND>
13.5.1 agama questions mode #
Set the mode for answering questions.
agama questions mode <VALUE>
interactiveAsk the user and block the installation.
non-interactiveDo not block the installation.
13.5.2 agama questions answers #
Load predefined answers, to skip specific questions in interactive mode or change the answer in automatic mode.
agama questions answers <PATH>
<PATH>Path to a file containing the answers in JSON format.
13.5.3 agama questions list #
Print the list of questions waiting for an answer, in JSON format.
agama questions list
13.5.4 agama questions ask #
Read a question definition in JSON from standard input, and print the response once it is answered.
agama questions ask
13.6 agama logs #
Collect the installer logs. The logs are stored in a compressed archive for further inspection, and include system and Agama-specific logs and configuration files that are useful for troubleshooting and debugging.
agama logs <COMMAND>
13.6.1 agama logs store #
Collect and store the logs in a tar archive.
agama logs store [OPTIONS]
-d,--destination <DESTINATION>Path to the destination directory and, optionally, the archive file name. The extension is added automatically.
13.6.2 agama logs list #
List the logs to collect.
agama logs list
13.7 agama auth #
Authenticate with Agama's server. Unless you run this program as root, you need to
authenticate for most operations. Log in by specifying the root password through
agama auth login; on success, the server returns a JSON Web Token (JWT)
that is stored and used to authenticate subsequent requests. If you run this program locally
as root, authentication is skipped automatically because it uses the master token at
/run/agama/token (accessible only to root).
agama auth <COMMAND>
13.7.1 agama auth login #
Authenticate with Agama's server and store the token. Reads the password from standard
input if available, otherwise prompts interactively. On success, the token is stored in
.agama/agama-jwt.
agama auth login
13.7.2 agama auth logout #
Deauthenticate by removing the token. Does not affect root.
agama auth logout
13.7.3 agama auth show #
Print the used token to standard output.
agama auth show
13.8 agama download #
Download a file from a given AutoYaST URL. Useful for fetching additional scripts, configuration
files, or Agama auto-installation profiles using AutoYaST-supported schemes (for example,
device://). To convert an AutoYaST profile instead, use
agama config generate.
agama download <URL> <DESTINATION>
<URL>URL pointing to the file to download. A relative URL is resolved against the current working directory.
<DESTINATION>File name to save the download as.
13.9 agama finish #
Finish the installation.
agama finish [METHOD]
<METHOD>What to do after finishing the installation:
stop: do not reboot. The Agama backend keeps running.reboot: reboot into the installed system. This is the default; it can be overridden with theinst.finishkernel command-line argument.halt: halt the installed machine.poweroff: power off the installed machine.
13.10 agama monitor #
Continuously monitor the Agama service until it finishes.
agama monitor
When run from a terminal, agama monitor
shows an interactive display and lets you answer a pending installer question directly,
without preparing a separate answers file. This is the preferred way to answer a question
that has already come up during installation; to answer a question before it is asked,
predefine the answer in the profile's questions section instead (see
Section 5.19, “Questions configuration for an Agama installation profile”). When standard output
is not a terminal, agama monitor falls back to plain text output.
13.11 agama status #
Print the current state of the installation (for example, waiting, blocked, running, or finished).
agama status [OPTIONS]
--format <FORMAT>The format to show the status in. Defaults to
text.json: machine-readable JSON format.text: human-readable textual format that may be localized and is subject to change.
13.12 agama events #
Display Agama events.
agama events [OPTIONS]
-p,--prettyDisplay the events in a more human-readable way.
14 For more information #
For more information on Agama and automated installation, refer to the following resources:
The upstream resources listed below may contain code or information not covered under the terms of service by SUSE. Use them with caution only as a reference for clarity and inspiration.
Agama project on GitHub: Contains the source code for the Agama installer, useful for inspecting its internals directly.
For a broader comparison of Agama against YaST and AutoYaST, and other SUSE Linux 16 installer and deployment changes, refer to How to install and deploy SUSE Linux 16 with Agama.
For setting up a PXE boot server to deploy Agama over the network, refer to https://documentation.suse.com/sles/16.0/html/SLES-PXE-server/.
For reusing an existing AutoYaST profile with Agama, and which AutoYaST profile sections Agama supports, refer to Using AutoYaST Profiles with Agama.
15 Legal Notice #
Copyright© 2006– 2026 SUSE LLC and contributors. All rights reserved.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or (at your option) version 1.3; with the Invariant Section being this copyright notice and license. A copy of the license version 1.2 is included in the section entitled “GNU Free Documentation License”.
For SUSE trademarks, see https://www.suse.com/company/legal/. All other third-party trademarks are the property of their respective owners. Trademark symbols (®, ™ etc.) denote trademarks of SUSE and its affiliates. Asterisks (*) denote third-party trademarks.
All information found in this book has been compiled with utmost attention to detail. However, this does not guarantee complete accuracy. Neither SUSE LLC, its affiliates, the authors, nor the translators shall be held liable for possible errors or the consequences thereof.


