This is a draft document that was built and uploaded automatically. It may document beta software and be incomplete or even incorrect. Use this document at your own risk.

Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
Automated Installation Using Agama
SUSE Linux Enterprise Server for SAP applications 16.1

Automated Installation Using Agama

Publication Date: 26 Aug 2026

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
    Note: Optional registration

    Certain 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.

Diagram of Agama's client-server architecture showing three clients—CLI, Web interface and others—connecting to the Agama core via an HTTP API
Figure 1: Agama client-server architecture

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 legacyAutoyastStorage section allows direct use of the AutoYaST profile's partitioning section 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.auto kernel boot option, pointing to the profile URL or its location in the hard drive. You can also use the agama config load command from the Agama CLI to load a profile, followed by the agama install command. 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
}

1

product: Identifies the OS/product to be installed.

2

root: Root credentials for administrative access.

3

user: First non-root user account.

4

l10n: Locale, keyboard, and time zone settings.

5

hostname: Static/transient host name settings.

6

software: Packages and patterns to be installed.

7

storage: Partitioning and mount configuration.

8

bootloader: Boot loader config and kernel params.

9

network: Network interface configuration.

10

security: SSL certs and other security settings.

11

scripts: Pre/post install scripting.

12

files: Inject additional files post-install.

13

legacyAutoyastStorage: Support for legacy AutoYaST JSON-style storage.

14

iscsi: iSCSI disk/target configuration.

15

dasd: Direct Access Storage Device (DASD) disk support for IBM Z (s390x).

16

zfcp: Fibre Channel Protocol (zFCP) disk support for IBM Z (s390x).

17

ntp: Time synchronization servers.

18

access: Remote access to the installed system over SSH and the Agama Web console.

19

questions: Predefined answers for questions the installer would otherwise ask interactively.

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

Example 1: A basic Agama profile for automated installation
{
  "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"
  }
}

1

See Section 5.3, “Root authentication for an Agama installation profile” for how to generate a hashed password.

2 3

You can generate an SSH public key by running the following command:

> sudo ssh-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.

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.

Example 2: A more complete Agama profile for automated installation
{
  "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"
      }
    ]
  }
}

1

Find the identifiers available on your installation medium by inspecting the agama-products package's products.d/*.yaml files, or by selecting the product interactively and running agama config show.

2

Generate a hashed password the same way as in the minimal profile above (see Section 5.3, “Root authentication for an Agama installation profile”).

3

Generate an SSH public key the same way as in the minimal profile above: ssh-keygen -t rsa -b 4096.

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.

  1. 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.

  2. Before Agama installs the system, generate a profile from the current configuration:

    # agama config show --output profile.json

    Settings left at their default value are not included in the output.

  3. 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.

Note
Note: Editor-only, not used by the installer

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

  1. Open your Agama installation profile in a schema-aware editor.

  2. Add a $schema key 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"
    }
  3. 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.

Example 3: Sample 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 SLES or SLES_SAP. This field is mandatory. Find the identifiers available on your installation medium by inspecting the agama-products package's products.d/*.yaml files, or by selecting the product interactively and running agama 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 standard and immutable (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-ha for 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.

Example 4: Sample 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.

Note
Note: Root or a first user is required

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.

Example 5: Sample 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 password field contains a hashed value. If set to true, the password must already be hashed using a method supported by the target system, as listed by mkpasswd --method=help. If false or omitted, the value is treated as plain text and hashed during installation.

password

root's password. If hashedPassword is true, 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 mkpasswd command from the whois package. List the hashing methods supported by the target system with:

> sudo mkpasswd --method=help

Then hash the password with the chosen method, for example:

> sudo mkpasswd --method=yescrypt

Alternatively, use openssl passwd -6 for a SHA-512 hash, or openssl passwd -5 for SHA-256.

Warning
Warning: Avoid DES and MD5

Do not use DES- or MD5-based hashing methods, since they are considered insecure. See the crypt manual 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_keys file. This allows passwordless root login over SSH. The key must be in OpenSSH format. For example, starting with ssh-rsa or ssh-ed25519. sshPublicKeys is an accepted alias with identical behavior.

You can generate an SSH public key by running the following command:

> sudo ssh-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.

Example 6: Sample 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 password field contains a hashed value. If set to true, 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 hashedPassword flag. 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_keys file, in the same format as root's sshPublicKey (see Section 5.3, “Root authentication for an Agama installation profile”). sshPublicKeys is 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.

Note
Note: Replaces the deprecated 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.

Example 7: Sample 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-8 or de_DE. This controls messages, number formats, date formats, and default encoding. List the locales available on the installation medium with localectl list-locales.

keymap

The default keyboard layout identifier. For example, us or de. This affects key mapping on both text consoles and graphical desktops. List the keymaps available on the installation medium with localectl list-keymaps; both the dash and parenthesis forms are accepted, for example us-dvorak or us(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.

Example 8: Sample 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, run zypper se --type pattern on a registered system.

Note
Note: Providing a plain list replaces the default pattern selection

If you specify patterns as 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 with add and remove keys:

"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 packages on a registered system.

onlyRequired

Optional boolean. If set to true, Agama tells libzypp (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 to false or omitted, libzypp also 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 by libzypp. Mandatory.

  • priority: optional priority for this repository, where a lower number means higher precedence. Defaults to 99, the same as other repositories. Use 0-98 for a higher priority repository, or 100-200 for a lower priority one.

  • name: optional user-friendly name for the repository. Defaults to the value of alias if omitted. Unlike alias, 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. If true, 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.

Note
Note: Trust the GPG key for the SUSE Package Hub repository

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.

Note
Note: Advanced storage configuration

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”.

Example 9: 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.

Note
Note: Compatibility with legacy AutoYaST storage

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”).

Example 10: Sample bootloader configuration for an Agama installation profile
"bootloader": {
  "timeout": 5,
  "extraKernelParams": "KERNEL_PARAMETERS"
}

This section contains the following fields:

Note
Note: stopOnBootMenu and timeout are mutually exclusive

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 0 to 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=ttyS0 or quiet 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.

Example 11: Sample 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, and disabled (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 as macAddress or match.

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, or stable.

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 (lowercase l) is accepted too, but is deprecated; prefer dnsSearchList in new profiles.

ignoreAutoDns

Boolean. Whether DNS options provided automatically (for example, through DHCP) are ignored.

status

The desired status for the connection: up, down, or removed. Setting removed is 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 interface or macAddress. Supports matching by interface name, driver, or PCI path, each accepting a list of values that may include wildcards. For example, {"interface": ["eth*", "ens*"]} matches any interface starting with eth or ens.

wireless

Configures a Wi-Fi connection:

  • ssid: Wi-Fi network name.

  • password: Wi-Fi passphrase.

  • security: key management method. Possible values are none (the default), owe, ieee8021x, wpa-psk, sae, wpa-eap, and wpa-eap-suite-b-192.

  • mode: wireless mode. Possible values are infrastructure (the default), adhoc, mesh, and ap.

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, when peap is 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 interface field sets the bridge's own device name, while id is 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 interface field sets the bond's own device name, while id is 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. Either 802.1Q (the default) or 802.1ad.

Example 12: Sample vlan connection 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.

Example 13: Sample 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 are SHA1 and SHA256.

    Warning
    Warning: Use SHA256 for better security

    SHA1 is cryptographically broken and should not be used. Use SHA256 wherever possible.

To verify the fingerprint of a certificate in PEM format:

> sudo openssl x509 -in FILE.pem -noout -fingerprint -sha256

Trusted certificates can be installed permanently by placing them in /etc/pki/trust/anchors and then executing:

> sudo update-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).

Example 14: Sample 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 access section (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
Note: Troubleshooting init scripts

On the installed system, init scripts are written to /var/lib/agama/scripts/init/ and run once, in name order, by the agama-scripts.service unit 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 to post scripts. Defaults to true when 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 init script instead.

Example 15: Enabling a service from a post-installation script
{
  "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.

Example 16: Sample 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 of url or content is required.

permissions

Optional file mode string (octal), such as 0644 or 0755, 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.

Example 17: Sample 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 partitioning section. 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.

Example 18: Sample 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"
      }
    }
  ]
}

1

An existing system typically already has a generated initiator name in /etc/iscsi/initiatorname.iscsi. To generate a new one instead, use the iscsi-iname command from the open-iscsi package.

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, and interface—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. Either default or the name of an interface defined at /var/lib/iscsi/ifaces/.

  • startup: the startup mode for the iSCSI node. Supported values are onboot, manual, and automatic.

  • authByTarget: optional CHAP (Challenge Handshake Authentication Protocol) credentials used if the target authenticates the initiator. An object with username and password.

  • authByInitiator: optional CHAP credentials used, in addition to authByTarget, for bidirectional authentication where the initiator also authenticates the target. Same format as authByTarget.

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.

Example 19: Sample 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"
    }
  ]
}

1

List the channel (Bus-ID) of every DASD device visible to the system with the lsdasd command.

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 format 0.0.xxxx.

  • state: Optional. Indicates whether the device should be made active or put offline. Defaults to active.

  • 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
    Warning: Expert setting

    Only set diag if 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.

Example 20: Sample 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
    }
  ]
}

1

List the channel, WWPN, and LUN of every zFCP device visible to the system with the lszdev zfcp command; each zfcp-lun entry's ID column shows the three values colon-separated, in that order.

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 under controllers, Agama activates that controller automatically.

Warning
Warning: Unknown LUNs could fail to activate

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.

Example 21: Sample 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 and chrony picks 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, chrony sends a burst of packets at startup to speed up the initial synchronization. Defaults to false.

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 to false.

Note
Note: Synchronizing time before Agama starts

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.

Example 22: Sample 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 user or root section defines sshPublicKeys. 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.

Example 23: Sample 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 example storage.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 as storage.luks_activation with the decrypt answer.

  • data: optional object with additional key-value pairs to match the question. Matching against data is a partial match: if your entry's data is a subset of the question's data and all specified values are identical, it counts as a match.

Warning
Warning: Avoid the 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:

Table 1: Supported question classes
ClassDescriptionPossible answers
autoyast.unsupportedThere are unsupported elements in an AutoYaST profile.Abort, Continue
software.medium_errorThere is an issue accessing the software medium.Retry, Skip
software.unsigned_fileA file from a repository is not digitally signed.Yes, No
software.import_gpgA signature is signed with an unknown GPG key.Trust, Skip
software.unknown_gpgA file is signed by an unknown key.Trust, Skip
software.digest.no_digestA file is in a signed repository but not listed among the checksums.Yes, No
software.digest.unknown_digestA file's checksum is not known, or does not match (wrong checksum).Yes, No
software.package_error.medium_errorA package failed to download from the medium.Retry, Continue
software.package_error.provide_errorA package failed to be provided, for example due to an I/O error.Retry, Continue
software.script_errorA package script failed.Retry, Continue
storage.activate_multipathThe system appears to have multipath storage, and whether to activate it.yes, no
storage.commit_errorSome storage actions failed, and whether to continue.yes, no
storage.luks_activationA LUKS-encrypted device is detected and needs a password to probe it.skip, decrypt
load.retryAsks whether to retry loading the profile.Yes, No
registration.certificateThe 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.

Example 24: Elements in the 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:

Example 25: Structure of 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.

Example 26: Combination of disks with partitions and direct formatting
"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:

Example 27: Structure of volumeGroups
{
  "name": "...",
  "search": { ... },
  "extentSize": ...,
  "physicalVolumes": [ ... ],
  "logicalVolumes": [ ... ]
}

Entries of logicalVolumes are relatively similar to the ones used to describe partitions.

Example 28: Structure of 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.

Example 29: A combination of disk partition, volume groups and 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.

Example 30: Structure of 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.

Example 31: An example with 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.

Example 32: Usage of the 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.

Example 33: Order of device matching
"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.

Example 34: Empty search matching all devices in the scope
"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:

Example 35: Behavior of 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:

Example 36: Searching using device name
{ "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:

Example 37: Example of equivalent search
{ "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:

  • driver and boss apply only to drives.

  • id applies only to partitions.

  • filesystem applies to drives, mdRaids, partitions, and logicalVolumes.

  • partitions applies to drives and mdRaids.

filesystem

Matches 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 with type or label.

{ "search": { "condition": { "filesystem": "any" } } }
{ "search": { "condition": { "filesystem": { "type": "xfs" } } } }
{ "search": { "condition": { "filesystem": { "label": "DATA" } } } }
id

Matches 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
ValueDescriptionPartition table
dos12FAT12 partitionMS-DOS
dos16FAT16 partitionMS-DOS
ntfsNTFS or HPFS partitionMS-DOS
dos32FAT32 partitionMS-DOS
extendedExtended partitionMS-DOS
diagDiagnostics partitionMS-DOS, GPT
prepPPC PReP boot partitionMS-DOS, GPT
swapSwap partitionMS-DOS, GPT, DASD
linuxLinux partitionMS-DOS, GPT, DASD, implicit
irstIntel Rapid Start Technology partitionMS-DOS, GPT
lvmLVM partitionMS-DOS, GPT, DASD
raidRAID partitionMS-DOS, GPT, DASD
xbootldrBoot Loader Specification partitionMS-DOS, GPT
espEFI System PartitionMS-DOS, GPT
bios_bootBIOS boot partitionGPT
windows_basic_dataWindows basic data partitionGPT
microsoft_reservedMicrosoft reserved partitionGPT
linux_homeLinux home partitionGPT
linux_server_dataLinux server data partitionGPT
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" } } }
driver

Matches 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" } } }
boss

Boolean. Whether the drive is a BOSS (Boot Optimized Storage Solution) device, a technology introduced by Dell. Use false to match any other drive.

partitions

Matches 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 with any, none, all, or count to 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.

Example 38: Using 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:

Example 39: Equivalent examples of alias
"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.

Example 40: Partitions needed for booting
"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.

Example 41: Deleting and shrinking existing devices
"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.

Note
Note: Limitation of resizing

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.

Example 42: Deleting and shrinking of existing devices matched by file system label
"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 .iso file 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:

  1. When the boot menu is displayed, press E to edit the boot parameters.

  2. Add the LIBSTORAGE_MULTIPATH_AUTOSTART parameter and set it to 1.

    GRUB boot menu edit screen with the LIBSTORAGE_MULTIPATH_AUTOSTART=1 kernel parameter appended to the linux line
    Figure 2: Activation of multipath using boot parameters
  3. Press CtrlX 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.

Warning
Warning: Unreliable multipath detection

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:

        Agama Web interface dialog asking whether to activate multipath storage
        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:

    • In an unattended installation, Agama looks for an answer to the question about multipath activation in the Agama profile.

      1. Edit the Agama profile to include the following JSON configuration:

        {
          "questions": {
            "answers": [
              {
                "class": "storage.activate_multipath",
                "answer": "yes"
              }
            ]
          }
        }
      2. 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 show command.

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

  1. Add a post entry to the scripts section of your Agama profile, with chroot set to true so 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-interactive flag 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.

  2. Merge this scripts section into your existing profile alongside your other settings, such as product and user, 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) or active (running):

    > sudo systemctl status kdump
    > sudo systemctl status kdump-commandline.service
  • Check that a crashkernel= allocation is present on the kernel command line:

    > cat /proc/cmdline

    The output contains an entry similar to crashkernel=SIZEM@OFFSET.

Warning
Warning: Do not trigger a test crash on a production system

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

Procedure 1: 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.auto parameter 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.auto parameter is given, Agama searches a set of predefined locations for a profile. It tries the file names autoinst.jsonnet, autoinst.json, and autoinst.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.

      1. 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 Send Keys menu to send the signal CtrlAltF8. To return to the graphical console, use CtrlAltF7.

        On that console, you will have the Agama CLI available.

      2. 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.

      3. Load the profile with the following command:

        # agama config load profile.json
      4. Optionally, review and adjust the loaded configuration in an editor:

        # agama config edit
      5. Validate the profile:

        # agama config validate profile.json
      6. Initiate the installation with the following command:

        # agama install
      7. Monitor the installation with the following command:

        # agama monitor
      8. Finish 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

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.auto

Tells the installer to use the profile at the given URL to start an unattended installation.

inst.auto=http://mydomain.org/profile.jsonnet
inst.auto_insecure

Ignores SSL/TLS problems, such as a self-signed certificate, when downloading the profile.

inst.info

Points 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.install

In unattended mode, Agama automatically starts the installation after reading the profile. Set this to 0 to stop after reading the profile instead, giving you a chance to review the installation options before proceeding.

inst.finish

Changes 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.script

URL 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_insecure

Ignores SSL/TLS problems, such as a self-signed certificate, when downloading the installation script.

inst.dud

Applies 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, or autoinst.xml file in the DUD's inst-sys directory. Agama then copies and processes that file automatically, in addition to any profile given via inst.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
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
Warning: Security risk

Installing unknown packages is a security risk. Malicious code could be installed on your system.

Set to 0 to 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_network

Whether 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_url

Sets 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
Warning: Affects all products

Setting this variable affects all products.

Overrides the default installation_url set in the product files. Particularly useful for pre-production testing (for example, with openQA).

inst.install_url=https://myrepo,https://myrepo2
proxy

Sets up a network proxy, in the form protocol://[user[:password]@]host[:port].

proxy=http://192.168.122.1:3128
rd.ntp

Sets 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_update

Available since the initial release of SUSE Linux 16.0. Set inst.self_update=0 to disable the installer self-update. Related options: inst.self_update_ssl=0, inst.self_update_unsigned_repo=1, inst.self_update_import_key=1, and inst.self_update_gpg=0.

10.4 Live system access

live.password / live.password_hash

Sets the root password of the live system. live.password accepts a plain text password; live.password_hash expects 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_dialog

Starts an interactive full-screen dialog during boot for entering and confirming the password. If the dialog does not render correctly in some environments, try CtrlL to refresh the screen, or use live.password_systemd instead.

live.password_dialog
live.password_dialog=1
live.password_systemd

Asks 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.remote

Available since SUSE Linux 16.1. By default, the Agama installer can be accessed remotely from other machines or mobile devices. Set inst.remote=0 to disable remote access for increased security, restricting access to the local machine only. To disable other network services, such as SSH, use the standard systemd.mask boot option instead.

10.5 Advanced and diagnostic options

fips

Standard Linux kernel parameter. Set to 1 to 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_testcase

Available since SUSE Linux 16.1. By default, the dependency solver test case is saved only on failure. Set inst.solver_testcase=1 to also save it on success, which is useful for debugging package dependency problems. Saved to /run/agama/testcase, and included in the logs created by agama logs store. If the ZYPP_FULLLOG=1 boot option is set, the solver test case is instead created automatically by libzypp (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
Note: Preview feature

This is a preview feature for testing systemd-boot support. 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 for systemd-boot support ends.

Available since SUSE Linux 16.1. Set to 1 to enable the systemd-boot boot loader as a preview feature.

systemd.unit

Standard way to change the systemd boot target. Useful for headless mode, when neither a graphical interface nor a browser needs to start locally.

systemd.unit=multi-user.target
systemd.mask

Standard way to disable a systemd unit 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.info option (see Section 10.1, “Specifying and starting an unattended installation”) acts similarly to linuxrc's info= option. However, it supports only URI schemes recognized by curl, and the info file can contain only Agama-specific options.

Network configuration

Agama translates a subset of linuxrc's ifcfg option into the ip/vlan syntax used by dracut; for most cases, prefer writing ip directly instead. For a complete list of dracut options, refer to man 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
hostname and SetHostname

Available with almost the same behavior as the equivalent linuxrc options.

  • hostname: sets the system's static host name in dracut and 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 own hostname section (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 to 0 sets NetworkManager's hostname-mode to none. 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 linuxrc directly, but passed through to YaST using the install.inf file, available to the installer as environment variables. Agama recognizes the same variable name patterns: LIBSTORAGE*, YAST*, Y2*, and ZYPP_FULLLOG, making them available to the Agama systemd services. For example, LIBSTORAGE_MULTIPATH_AUTOSTART (see Section 7.3, “Activating multipath using boot parameters”) and ZYPP_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):

  • http and https for HTTP and HTTPS.

  • ftp and ftps for FTP and FTP over TLS.

  • smb and smbs for the Server Message Block (SMB) protocol. Use smb rather than cifs.

  • file for 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:

Example 43: Relative script URL in an Agama installation profile
{
  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
Note
Note: Prefer 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.password in 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.

  1. Collect and store the logs in a compressed archive:

    # agama logs store

    The 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.

  2. 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 /tmp directory 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:

      # lsblk

      Identify 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 /mnt

      If /mnt is 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.password boot option in future installation attempts to keep this option available. See Section 10.4, “Live system access”.

  • If agama logs store fails 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, or localhost:10443. Defaults to http://localhost.

--insecure

Whether to accept invalid (for example, self-signed) certificates. Defaults to false.

--local

Some 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.

--local

Run 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.

Warning
Warning: Destructive operation

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>

interactive

Ask the user and block the installation.

non-interactive

Do 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 the inst.finish kernel 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, --pretty

Display 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:

Warning
Warning: Use upstream information with caution

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.