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:
- Prepare a system for unattended installation.
- Use kernel boot parameters to trigger automation.
- 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:
- Download the netboot image.
Download or sync the PXE-compatible netboot image from a server hosting the SUSE installation ISO.
- 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.
- 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.