Linux on Power

Enterprise Linux on Power

Enterprise Linux on Power delivers the foundation for your open source hybrid cloud infrastructure with industry-leading cloud-native deployment options.


#Power
#TechXchangeConferenceLab
#Power
 View Only

Automate SLES 16 installation with Jsonnet and Agama

By PRIYA A posted 3 hours ago

  

SUSE Linux Enterprise Server 16 (SLES 16) introduces several innovations in how systems are installed and managed. One major shift is the emergence of Agama, SUSE’s next-generation, web-based, and API-driven installer. Alongside traditional AutoYaST, Agama brings support for modern, programmable templating formats, such as Jsonnet, which enable powerful and flexible automation of installation processes.

The following table highlights the key differences between AutoYaST and Agama at a high level:

Feature AutoYaST Agama

Purpose

Traditional automated installation tool for SUSE

Next-generation installer, designed for cloud, automation, and modular workflows

Language/Format used

XML-based configuration files

YAML or JSON configuration (through API)

Extensible?

Rigid and not easily pluggable

Highly modular, built with extensibility

API-driven

No (file-based only)

Yes provides REST API for control and orchestration

Maintenance

Mature, stable

Under active development and will replace parts of AutoYaST in future

Unlike XML-based AutoYaST, Jsonnet allows for:

  • Reusable code blocks
  • Conditional logic and loops
  • Environment-specific profiles (such as staging versus production)
  • Lightweight and readable configuration syntax

In this blog, we’ll walk through a complete automated installation setup using Jsonnet with SLES 16, breaking down the configuration section by section and showing you how to:

  1. Prepare a system for unattended installation.
  2. Use kernel boot parameters to trigger automation.
  3. Build a .jsonnet file for installation.

Step 1. Prepare a system for unattended installation

You need to make sure that the following resources are in place:

  • Access to the SUSE ISO file from an internal repository or from https://www.suse.com/download/sles/
  • A system management console (for example, Hardware Management Console (HMC) for IBM PowerPC)
  • Static IP or DHCP configuration
  • Optionally, Preboot Execution Environment (PXE) boot support for network installation

Also, assuming the system has a considerable RAM size of 40 GB, vCPUs: 15 processors, and network any VLAN or direct adapter support.

Step 2. Use kernel boot parameters to trigger automation

Unattended installations usually follow this sequence:

  1. Download the netboot image.

    Download or sync the PXE-compatible netboot image from a server hosting the SUSE installation ISO.

  2. Create a Jsonnet profile.

    Create a .jsonnet file that defines how the system should be configured. A .jsonnet file provides advantages, such as reusable blocks, parameterization, and better readability over static JSON/YAML files.

  3. Configure GRUB.

    Modify the kernel parameters during boot using the following command:

    linux install=http://<your-server>/SLES-16/repo/ autoyast=http://<your-server>/profiles/sles16-install.jsonnet

    This instructs the installer to fetch the automation configuration file from your profile host.

Step 3. Build a .jsonnet file for installation

Make sure that the following configuration and set up are complete to build the .jsonnet file.

Bootloader configuration

bootloader: { stopOnBootMenu: false }

This prevents halting at GRUB menu, so that the system boots directly.

User and root setup

user: {
fullName: "abc", userName: "abc", password: "abc123", hashedPassword: false, autologin: false
},
root: {
hashedPassword: false,
password: "Sles16_StaysStronger123"
}

For security reasons, prefer using hashed credentials. Create a hashed password using the openssl command.

openssl passwd -6 'Sles16_StaysStronger123'

Example output:

$6$yDdMw4vcnz$NMPQkSCKD9UdSMAYk0U1/7CE69Tr5Ab5FMoJNmeytU8D5xxY9aYlE0E5 kFecAGVknbiYI7eGk2Dhr7nkwE6Zc0

Use this hashed password in the following code section:

user: {
fullName: "abc", userName: "abc", password: "abc123", hashedPassword: false, autologin: false
},
root: { hashedPassword: true, password:
"$6$yDdMw4vcnz$NMPQkSCKD9UdSMAYk0U1/7CE69Tr5Ab5FMoJNmeytU8D5xxY9aYlE0E5 kFecAGVknbiYI7eGk2Dhr7nkwE6Zc0"
}

Software patterns setup

software: { patterns: [] }

Specify base, kvm_server, and so on, as needed. An empty list yields minimal installation.

Product identifier

product: { id: "SLES" }

This setting ensures that the SUSE base product is used during installation.

Storage configuration

storage: { drives: [
{
search: "/dev/disk/by-id/dm-uuid-mpath-3612334343435", partitions: [
{ search: "*", delete: true },
{ filesystem: { path: "/" }, size: { min: "10 GiB" } },
{ filesystem: { path: "swap" }, size: { min: "1 GiB", max: "4 GiB" } }
           ]
        }
    ]
}

This snippet targets a multipath disk, clears old partitions, and creates a new root/swap layout.

Network configuration

network: { connections: [
{
id: "Wired Connection", method4: "manual", gateway4: "xx.xx.xx.x", method6: "disabled",
addresses: ["xx.xx.xx.xx/20"], nameservers: ["xxx.xx.xxx.xx"], ignoreAutoDns: false,
status: "up", autoconnect: true
    }
  ]
}

In this snippet, IPv4 static setup is done, IPv6 is disabled, and interface is autoconnected.

Localization settings

localization: {
language: "en_US.UTF-8", keyboard: "us",
timezone: "Europe/Berlin"
}

In this section, language, keyboard, and timezone preferences are set.

Pre- and post-installation scripts

scripts: { 
  pre: [
    {
       name: "activate-multipath", 
       content: |||
       #!/usr/bin/bash
        systemctl start multipathd.socket multipathd.service
    |||   
  }
],
post: [
  {
     name: "permit-root-login", 
     content: |||
         #!/bin/bash SSH_FILE="/usr/etc/ssh/sshd_config"
         BACKUP_FILE="/usr/etc/ssh/sshd_config.bak.$(date +%F_%T)" 
         cp "$SSH_FILE" "$BACKUP_FILE"
         if grep -q "^PermitRootLogin" "$SSH_FILE"; then
             sed -i "s/^PermitRootLogin.*/PermitRootLogin yes/" "$SSH_FILE"
        else
              echo "PermitRootLogin yes" >> "$SSH_FILE"
         fi
      |||
    }
  ]
}

The pre-installation script starts the multipathd daemon and the post-installation script enables the root SSH login.

Tips to troubleshoot common pitfalls during installation

  • Installer hangs at boot menu? Ensure that the stopOnBootMenu value is set to false.
  • Networking not coming up? Double-check IP/netmask and make sure VLANs are supported.
  • SSH login not working? Review the post-installation script and Secure Shell (SSH) configuration path.
  • Partitioning fails? Validate the by-id disk path or multipath configuration.

Conclusion

Agama with Jsonnet offers a modern, programmable, and cloud-friendly path to installing SLES 16 — especially suited for large-scale, repeatable deployments. By breaking free from rigid static templates, admins can generate, maintain, and evolve installation profiles using the .jsonnet file’s logic and reuse capabilities.

Whether you’re provisioning one server or a thousand, Jsonnet + Agama is a future-ready combo that can bring true DevOps-style automation to OS installations.

0 comments
3 views

Permalink