|Index|Introduction to SLES Minimal VM
SUSE Linux Enterprise Server 16.0

Introduction to SLES Minimal VM

Publication Date: 17 Sep 2026

SLES Minimal VM images allow you to run SUSE Linux Enterprise Server in a virtual or cloud environment without having to perform a full installation. Learn which Minimal VM image to choose, the ways to deploy them and how to configure them on first boot.

Prerequisites:

  • General familiarity with SUSE Linux Enterprise Server

1 What is SLES Minimal VM?

SLES Minimal VM is a set of ready-to-run virtual machine images that let you deploy SUSE Linux Enterprise Server without running an installer. Each image includes a lightweight system, serving as a foundation for building systems for use in a data center, creating virtual application images and building appliances. Because the images contain fewer packages, they require less patching and expose fewer potential security vulnerabilities.

1.1 Deployment options

SLES Minimal VM is available as preconfigured and ready-to-run virtual machine images. It is also possible to create customized Minimal VM images using the supplied KIWI NG configuration files, called templates. They are provided by the kiwi-templates-Minimal package. For more information about how to use KIWI templates, see KIWI NG Documentation.

1.2 Default configuration

The following settings are active as soon as a Minimal VM image boots. They describe the state of the system as shipped. For how Minimal VM differs from an installed SUSE Linux Enterprise Server system, see Section 2, “Differences between SLES Minimal VM and SUSE Linux Enterprise Server.

First-boot provisioning

On the cloud image, cloud-init configures the system on first boot from a configuration you supply. If no configuration is provided, or if you are deploying other image flavors, the JeOS Firstboot wizard runs on first boot and allows you to configure basic settings, such as system locales and the root password. Alternatively, you can also use Combustion for a fully automated system configuration.

Access and remote authentication

SSH on TCP port 22 is enabled as the default externally accessible port. Remote password-based root login is disabled by default.

  • cloud-init and Combustion can be used to create a user account and install SSH public keys supplied in the configuration.

  • When using JeOS Firstboot, the wizard prompts you to set a local root password, create a standard user account and enroll SSH public keys for remote access.

Networking

The default network configuration uses DHCP, managed by NetworkManager.

Security and firewall

The Minimal VM sets SELinux to enforcing mode by default. The status of the host-based firewall depends on the image you deploy:

  • On the cloud image, no firewall service is installed or enabled.

  • On the non-cloud images, the firewalld package is installed and the service is enabled and running by default.

Kernel

SLES Minimal VM images use the kernel-default-base as the default kernel, which contains only a subset of kernel modules. This results in a smaller image size.

System recovery

On the non-cloud images, the system automatically creates a Btrfs snapshot including the initial configuration. This means that you can easily revert all subsequent changes, if necessary.

Core dumps

Unlike in previous versions, systemd-coredump is enabled by default in SLES Minimal VM 16.0 to collect application core dumps for troubleshooting.

System registration

The Minimal VM images contain no preconfigured software repositories. Register the system to access online repositories. Registration requires a paid subscription.

2 Differences between SLES Minimal VM and SUSE Linux Enterprise Server

The following differences affect how you deploy and operate the system:

No installation step

There is no installer to run. The images are ready to boot, and basic settings are configured on first boot using the JeOS Firstboot tool, Combustion or cloud-init on the cloud image.

Reduced kernel

To keep the image small, Minimal VM uses kernel-default-base as the default kernel. This kernel does not contain drivers for bare metal. If your scenario requires additional drivers, install the kernel-default package to get the full functionality. This is the kernel used by a regular installation.

Zypper configuration

Part of the size reduction comes from two options in the Zypper configuration:

  • rpm.install.excludedocs = yes excludes all files marked as documentation, such as man pages, from installation.

  • solver.onlyRequires = true disables installation of supplementing and recommended packages.

Base packages

The images are built from KIWI NG templates that list the packages to include. Keep in mind that packages listed in a template can pull in dependencies during the build, so an image usually contains more packages than the template names.

Predefined disk layout

Unlike SUSE Linux Enterprise Server, which calculates an adjustable disk layout proposal during installation, SLES Minimal VM uses a predefined virtual image partitioning scheme:

  • 2 MB BIOS boot

  • 512 MB EFI system

  • 24 GB root file system in non-cloud flavors

  • A dynamically sized root file system in cloud flavors

To add space, either extend the existing disk from the virtual host or add a secondary disk to the virtual machine. If you extend the existing disk, the kiwi-repart dracut module automatically resizes the root partition and its file system to fill the available space during the next boot. If you add a secondary disk, you must partition and format it manually.

3 Choosing the right deployment image

The image you choose determines the hypervisor you can run it on and how the system is configured on first boot. The initial configuration mechanism depends on your target environment.

Cloud platforms

On cloud platforms, the image is configured automatically on first boot by cloud-init. You provide your configuration instructions through the configuration file. If no cloud-init configuration is supplied, the deployment falls back to the interactive JeOS Firstboot wizard.

Virtualization platforms

Virtualization platforms (KVM, VMware, Microsoft Hyper-V) do not include cloud-init and offer two configuration paths for the first boot:

  • Interactive (default): The JeOS Firstboot wizard prompts you to set timezone, passwords, create a standard user and more.

    Note
    Note: Exception for IBM Z

    On s390x flavors targeting z/VM (such as DASD and FCP), the JeOS Firstboot wizard is not supported due to terminal limitations. On these images, systemd-firstboot is used instead.

  • Automated: If you require an unattended, automated deployment, you can use Combustion to bypass the JeOS Firstboot wizard.

4 Obtaining Minimal VM images

Download the images from the official Download page. Images have the platform in the name, based on their purpose:

  • Cloud for cloud platforms

  • kvm-and-xen for KVM and Xen hypervisors

  • MS-HyperV for Microsoft Hyper-V hypervisors

  • VMware for VMware hypervisors

5 Interactive setup with JeOS Firstboot

By default, if you boot the virtual machine without providing an automated configuration method (such as Combustion or cloud-init), the system launches JeOS Firstboot. To deploy the image interactively, manually complete this text-based wizard on the system console. Deploying involves two tasks:

  1. Start the virtual machine on your platform.

  2. Configure the system on the first boot with JeOS Firstboot.

Note
Note: Exception for IBM Z

On s390x flavors targeting z/VM (such as DASD and FCP), the JeOS Firstboot wizard is not supported due to terminal limitations. On these images, systemd-firstboot is used instead.

Because starting a virtual machine varies wildly by platform, the exact procedure depends on your hypervisor. For Hyper-V and VMware images, use their management tools to create the virtual machine.

5.1 Starting a KVM virtual machine

For kvm-and-xen images, you can start the virtual machine directly by using QEMU or virt-install.

QEMU:

> qemu-system-x86_64 \
    -enable-kvm \
    -cpu host \
    -m 1G \
    -smp 1 \
    -drive if=virtio,format=qcow2,file=IMAGE.qcow2 \
    -nographic \
    -netdev user,id=net0,hostfwd=tcp::2222-:22 \
    -device virtio-net-pci,netdev=net0

virt-install:

> virt-install \
    --name VM_NAME \
    --memory 1024 \
    --vcpus 1 \
    --import \
    --disk IMAGE.qcow2,bus=virtio \
    --osinfo detect=on,require=off

5.2 Configuring a system with JeOS Firstboot

JeOS Firstboot is a text-based wizard that runs on the first boot and collects the basic settings. It appears on the console of the virtual machine, whichever platform you started it on.

  1. Select the keyboard layout.

  2. Read and accept the license agreement. You cannot proceed without accepting it.

  3. Select the time zone.

  4. Enter and confirm the root password.

  5. Optionally, enroll keys for SSH access and create additional user accounts.

  6. After the first boot, register the system. For more information, see Section 8, “Post-deployment configuration”. If you are only testing the image, you can skip registration.

Tip
Tip: Reconfiguring settings with jeos-config

If you need to change these settings after the initial deployment, you can use jeos-config. Running this command as root opens an interactive text-based tool where you can adjust your initial choices.

6 Automated setup using Combustion

SLES Minimal VM comes with the Combustion configuration tool, which configures the system on first boot from a script that you supply. This can be particularly useful when you need to deploy multiple virtual machines with an identical initial configuration. When Combustion runs successfully, JeOS Firstboot does not start. Because Minimal VM does not configure a default root password, the script must include a login method, either a root password or an SSH public key for remote access.

  1. Create a configuration file named script.

    For more information about how to create the script, see https://documentation.suse.com/sle-micro/html/Micro-deployment-raw-images-virtual-machines/index.html#configuring-combustion-script.

  2. Add at least one login method to the script:

    • To log in with a password, generate a hash of your desired root password:

      > openssl passwd -6

      Add the following line to the script, replacing HASH with the value you just generated:

      echo 'root:HASH' | chpasswd -e
    • To set up SSH key authentication, add the following lines to the script:

      mkdir -pm 700 /root/.ssh
      echo 'SSH_PUBLIC_KEY' >> /root/.ssh/authorized_keys
  3. Make the script executable:

    > chmod +x script
  4. Pass the script to the virtual machine. Use the method that matches your platform.

    kvm-and-xen

    Pass the script file directly with fw_cfg.

    QEMU:

    > qemu-system-x86_64 \
        -enable-kvm \
        -cpu host \
        -m 1G \
        -smp 1 \
        -drive if=virtio,format=qcow2,file=IMAGE.qcow2 \
        -nographic \
        -netdev user,id=net0,hostfwd=tcp::2222-:22 \
        -device virtio-net-pci,netdev=net0 \
        -fw_cfg name=opt/org.opensuse.combustion/script,file=script

    virt-install:

    > virt-install \
        --name VM_NAME \
        --memory 1024 \
        --vcpus 1 \
        --import \
        --disk IMAGE.qcow2,bus=virtio \
        --osinfo detect=on,require=off \
        --sysinfo type=fwcfg,entry0.name="opt/org.opensuse.combustion/script",entry0.file="ABSOLUTE_PATH_TO_SCRIPT"
    Microsoft Hyper-V, VMware and other platforms

    Provide the script on a storage device with the file system label combustion, holding the script at combustion/script.

    To build such a device as an ISO image:

    > mkdir -p iso_root/combustion
    > mv script iso_root/combustion/
    > mkisofs -output combustion.iso -volid combustion -rational-rock iso_root

    Create the virtual machine using your downloaded Minimal VM image as the primary virtual hard disk. Before booting the virtual machine for the first time, attach combustion.iso as a virtual disc drive.

By default, Combustion produces no output while it runs. The indication that it worked is that JeOS Firstboot does not start and you can log in as root using the method you configured in the script.

7 Deploying an image with cloud-init

The cloud Minimal VM image uses cloud-init to configure the system on first boot from a user-data file. Deploying with cloud-init has two parts: writing the configuration and making it available to the virtual machine through a data source.

If no data source is provided, the system defaults to JeOS Firstboot on initial boot.

Note
Note: Scope of the cloud-init section

This section applies to the cloud image on a local hypervisor, where cloud-init uses the NoCloud data source.

On OpenStack and other cloud platforms, supply your user-data through the interface of the platform. For the data sources that cloud-init supports, see https://docs.cloud-init.io/en/latest/reference/datasources.html#datasources-supported.

7.1 How to write the user-data file

To deploy the image with cloud-init, you must first create the user-data file. The first line of the file must be #cloud-config.

To view the default SUSE configuration for cloud-init, check the /etc/cloud/cloud.cfg file provided by the cloud-init-config-suse package.

By default, cloud-init does not set a root password. Instead, it creates a user account called sles that acts as the default user and has sudo rights. Use the following example to create passwords for both users.

Example 1: Add passwords
#cloud-config
chpasswd:
  list: |
    root:$6$HdJCmMKHZT2NLcwv$4cRJ4yGGmDpPIvt0pqSa3KeEOKMKT8vR4DrYX23LlYrvM6suF79CzWomCFyreiT645fWVaFXMtyUM5zFOJMa9/
    sles:$6$HdJCmMKHZT2NLcwv$4cRJ4yGGmDpPIvt0pqSa3KeEOKMKT8vR4DrYX23LlYrvM6suF79CzWomCFyreiT645fWVaFXMtyUM5zFOJMa9/
  expire: False

To create the SHA-512 hashes used in the example, run the command: openssl passwd -6.

Warning
Warning: User passwords

To prevent potential security risks, avoid using passwords in production environments. When using hashed passwords, you are exposed to dictionary attacks. For better security, use SSH authentication instead.

However, local logins, for example, in a recovery scenario, still require a password. This is why setting a root password, as shown in the previous example, might still be necessary even when you use SSH keys for regular access.

When creating users, keep in mind that logging in with a password is disabled by default (lock_passwd: true), and that the newly created users do not have sudo rights.

The following examples show configurations for creating different users.

Example 2: New user with password and sudo
#cloud-config
users:
  - default
  - name: USER
    shell: /bin/bash
    groups: users
    # lock_passwd: Disable password login. Defaults to true
    lock_passwd: false
    passwd: HASH
    sudo: ALL=(ALL) NOPASSWD:ALL
Example 3: New user with SSH keys and sudo
#cloud-config
users:
  - name: USER
    shell: /bin/bash
    groups: users
    ssh_import_id: None
    lock_passwd: true
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh_authorized_keys:
      - SSH_PUBLIC_KEY_1
      - SSH_PUBLIC_KEY_2

To connect and register with the SUSE Multi-Linux Manager, RMT or SUSEConnect, use runcmd to run the desired commands, for example:

Example 4: SUSEConnect configuration
#cloud-config
runcmd:
  - SUSEConnect -r REGISTRATION_CODE -e EMAIL_ADDRESS
Example 5: RMT configuration
#cloud-config
runcmd:
 - curl --output rmt-client-setup http://RMT_SERVER/tools/rmt-client-setup
 - sh rmt-client-setup --host RMT_SERVER
     --regcert http://RMT_SERVER/rmt.crt
     --fingerprint FINGERPRINT --yes

Replace FINGERPRINT with the output of the following command that you run on your RMT server:

> sudo openssl x509 -noout -fingerprint -in /etc/rmt/ssl/rmt-ca.crt

For example: 0F:1F:2F:3F:4F:5F:6F:7F:8F:9F:AF:BF:CF:DF:EF:FF.

For further information, see https://documentation.suse.com/sles-15/html/SLES-all/cha-rmt-client.html.

Example 6: SUSE Multi-Linux Manager configuration
#cloud-config
runcmd:
  - curl -SksO https://SERVER_HOSTNAME/pub/bootstrap/bootstrap.sh
  - /bin/bash bootstrap.sh

For further information, see https://documentation.suse.com/multi-linux-manager/en/docs/client-configuration/registration-bootstrap.html.

The following example shows a configuration that installs a package and starts a service during the first boot.

Example 7: Add PACKAGE and start a service
#cloud-config
packages:
  - PACKAGE
runcmd:
  - systemctl enable SERVICE.service
  - systemctl start --no-block SERVICE.service
Note
Note: Optional configuration files

You can optionally create other configuration files, called meta-data, network-config and vendor-data. For more information, see https://docs.cloud-init.io/en/latest/reference/datasources/nocloud.html.

After you write the user-data file, provide the file to the virtual machine, as described in the following section.

7.2 Providing the user-data file to the virtual machine

Choose the method that matches your tooling.

7.2.1 Deploying with QEMU

There are two ways to deliver the configuration: on a seed image attached as a CD-ROM or from a Web server.

  1. Make the configuration available to the virtual machine. Use either a seed image or a Web server:

    • Seed image: Create the seed image containing the user-data file:

      > mkisofs \
          -output seed.iso \
          -volid cidata -rational-rock -joliet \
          user-data
    • Web server: Copy the configuration file into a directory served by a Web server, for example, /srv/www/htdocs/cloud-init/, served at http://www.example.com/cloud-init/.

  2. Start the virtual machine.

    > qemu-system-x86_64 \
        -enable-kvm \
        -cpu host \
        -m 1G \
        -smp 1 \
        -drive if=virtio,format=qcow2,file=IMAGE.qcow2 \
        -nographic \
        -netdev user,id=net0,hostfwd=tcp::2222-:22 \
        -device virtio-net-pci,netdev=net0 \
        DATA_SOURCE_OPTION

    Replace DATA_SOURCE_OPTION based on the chosen method from the previous step:

    • If you use seed image data source:

      -drive file=seed.iso,media=cdrom
    • If you use Web server data source:

      -smbios 'type=1,serial=ds=nocloud-net;s=http://www.example.com/cloud-init/'

7.2.2 Deploying with virt-install

If you deploy with libvirt, virt-install can generate the data source for you:

> virt-install \
    --name VM_NAME \
    --memory 1024 \
    --vcpus 1 \
    --import \
    --disk IMAGE.qcow2,bus=virtio \
    --cloud-init user-data=./user-data \
    --osinfo detect=on,require=off

8 Post-deployment configuration

After successfully deploying and configuring your SLES Minimal VM, the system is running and ready for use. To ensure optimal security and localization, perform the following post-deployment tasks.

8.1 Registering the system

Registering your SLES Minimal VM links it to your SUSE subscription. If the system was not registered during first boot, register it manually.

> sudo SUSEConnect -r REGISTRATION_CODE -e EMAIL_ADDRESS

You can also register with RMT using the setup script. For more information, see Configuring clients with rmt-client-setup.

8.2 Installing system updates

After SLES Minimal VM is successfully installed and registered, it is highly recommended to install the latest available online updates:

> sudo zypper patch

8.3 Changing the system locale

By default, the SLES Minimal VM image includes only the en_US locale. To use a different system language, install and select your desired locale. The following example commands configure the system for the de_DE locale.

  1. Add the desired locale and install the required translation packages:

    > sudo zypper addlocale de_DE
  2. Set the new locale:

    > localectl set-locale LANG=de_DE.UTF-8

    You can list all available system locales by running localectl list-locales.

8.4 Removing setup packages

JeOS Firstboot and the packages it pulls in are only required for the initial configuration of the system. You can leave these packages on the system, or, when the system is fully configured and you do not intend to reconfigure it, you can safely remove the wizard together with the dependencies:

> sudo zypper remove -u jeos-firstboot
Note
Note: Configuration tools are removed as well

The command removes JeOS Firstboot along with dependencies, including configuration tools such as jeos-config or ssh-pairing. If you still need any of these tools, keep JeOS Firstboot installed.