Introduction to SLES Minimal VM
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-initconfigures 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 therootpassword. 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
rootlogin is disabled by default.cloud-initand 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
rootpassword, 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-coredumpis 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-initon 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 = yesexcludes all files marked as documentation, such as man pages, from installation.solver.onlyRequires = truedisables 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-repartdracut 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 nocloud-initconfiguration 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-initand 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: Exception for IBM ZOn 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-firstbootis 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:
Cloudfor cloud platformskvm-and-xenfor KVM and Xen hypervisorsMS-HyperVfor Microsoft Hyper-V hypervisorsVMwarefor 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:
Start the virtual machine on your platform.
Configure the system on the first boot with JeOS Firstboot.
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=off5.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.
Select the keyboard layout.
Read and accept the license agreement. You cannot proceed without accepting it.
Select the time zone.
Enter and confirm the
rootpassword.Optionally, enroll keys for SSH access and create additional user accounts.
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.
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.
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.
Add at least one login method to the script:
To log in with a password, generate a hash of your desired
rootpassword:>openssl passwd -6Add 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
Make the script executable:
>chmod +x scriptPass the script to the virtual machine. Use the method that matches your platform.
kvm-and-xenPass 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=scriptvirt-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 atcombustion/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_rootCreate 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.isoas 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.
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.
#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.
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.
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:ALLsudo ##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:
#cloud-config runcmd: - SUSEConnect -r REGISTRATION_CODE -e EMAIL_ADDRESS
#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 --yesReplace FINGERPRINT with the output of the following command that you run on your RMT server:
>sudoopenssl 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.
#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.
#cloud-config packages: - PACKAGE runcmd: - systemctl enable SERVICE.service - systemctl start --no-block SERVICE.service
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.
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-datafile:>mkisofs \ -output seed.iso \ -volid cidata -rational-rock -joliet \ user-dataWeb server: Copy the configuration file into a directory served by a Web server, for example,
/srv/www/htdocs/cloud-init/, served athttp://www.example.com/cloud-init/.
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_OPTIONReplace 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=off8 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.
>sudoSUSEConnect-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:
>sudozypper 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.
Add the desired locale and install the required translation packages:
>sudozypperaddlocale de_DESet the new locale:
>localectlset-locale LANG=de_DE.UTF-8You 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:
>sudozypperremove -u jeos-firstboot
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.
9 Legal Notice #
Copyright© 2006– 2026 SUSE LLC and contributors. All rights reserved.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or (at your option) version 1.3; with the Invariant Section being this copyright notice and license. A copy of the license version 1.2 is included in the section entitled “GNU Free Documentation License”.
For SUSE trademarks, see https://www.suse.com/company/legal/. All other third-party trademarks are the property of their respective owners. Trademark symbols (®, ™ etc.) denote trademarks of SUSE and its affiliates. Asterisks (*) denote third-party trademarks.
All information found in this book has been compiled with utmost attention to detail. However, this does not guarantee complete accuracy. Neither SUSE LLC, its affiliates, the authors, nor the translators shall be held liable for possible errors or the consequences thereof.