Deploying SUSE Linux Micro Using Raw Disk Images on IBM Z zFCP Disks
- WHAT?
SUSE Linux Micro provides raw images (also referred to as pre-built images) that can be deployed directly to your device storage.
- WHY?
This article provides you with step-by-step instructions on deploying SUSE Linux Micro on an IBM Z machine.
- EFFORT
It takes approximately 20 minutes to read the article.
- GOAL
SUSE Linux Micro is successfully deployed on your system.
- REQUIREMENTS
A disk with running Linux.
A disk where you deploy the raw image and where SUSE Linux Micro will run.
A disk that serves as a configuration medium.
1 About pre-built images #
Pre-built images are ready-to-use representations of a running operating system. They are not installed in a traditional way using an installer, but copied to the hard disk of the target host. The topic covers basic information about these pre-built images.
The pre-built images are intended to be configured on the first boot by using tools delivered in the images. The boot loader detects the first boot as described in Section 1.1, “First boot detection”.
1.1 First boot detection #
The deployment configuration runs on the first boot only. To distinguish
between the first and subsequent boots, the file
/etc/machine-id is created after the
first boot finishes. If the file is not present in the file system, the system assumes that
this is a first boot and triggers the configuration process. After completing the first boot, the
/etc/machine-id file is
created.
/etc/machine-id file is always created
Even though the configuration may not be successful because of improper
or missing configuration files, the
/etc/machine-id file is
created.
1.1.1 Force system reconfiguration on a subsequent boot #
If you need to reconfigure your system after the first boot happened, you can force the reconfiguration on the subsequent boot. Here you have two options.
You can pass the
ignition.firstbootorcombustion.firstbootattribute to the kernel command line.You can delete the file
/etc/machine-idand reboot the system.
2 Deployment of SUSE Linux Micro #
The deployment procedure of SUSE Linux Micro comprises three phases. Do not skip any of the phases and follow the order as stated below.
Ensure that all disks are available and active. For details, refer to Section 3.1, “Preparing the zFCP/SCSI disks”.
Preparing a configuration device—to configure the network, add users and register the system, prepare the configuration according to the instructions provided in Section 4, “Preparing the configuration disk”.
Downloading the SUSE Linux Micro image and deploying it on the disk. For details, refer to Section 5, “Deploying the raw disk image on the disk”.
3 Preparing the machine #
3.1 Preparing the zFCP/SCSI disks #
To prepare the machine to deploy on zFCP/SCSI disks, proceed as described below:
Find all disks by running the command:
#lszdev zfcpTYPE ID ON PERS NAMES zfcp-host 0.0.fa00 yes yes zfcp-host 0.0.fc00 yes yes zfcp-lun 0.0.fa00:0x500507630b181216:0x4021400a00000000 yes no sda sg0 zfcp-lun 0.0.fc00:0x500507630b101216:0x4021400b00000000 yes no sdb sg1In the output, there should be a LUN device—a device of the type
zfcp-lun. If the command does not output any device, enable the disk first:#chzdev -e fa00If you do not know the disk name, contact your system administrator.
Verify that the LUN device exists:
#lszdev zfcpTYPE ID ON PERS NAMES zfcp-host 0.0.fa00 yes yes zfcp-host 0.0.fc00 yes yes zfcp-lun 0.0.fa00:0x500507630b181216:0x4021400a00000000 yes no sda sg0 zfcp-lun 0.0.fc00:0x500507630b101216:0x4021400b00000000 yes no sdb sg1Note the information about LUN devices. The
/dev/sdadevice is used further for the deployment of SUSE Linux Micro.Even though formatting the disk where SUSE Linux Micro will be deployed is unnecessary, check if the disk is empty and does not contain any partitions. If there are any partitions, remove them with the following command. Beware, the command will erase data on the provided device!
#parted DEVICE_NAME rm 1
4 Preparing the configuration disk #
A virtual disk may be more suitable for production deployments, while a physical disk is better suited for development.
During the installation process, you can pass a complex configuration to define users, directories, or to provide SSH keys. To do so, create a configuration device that stores a complete configuration. The following example procedure describes how to create such a device:
Identify the disk:
#lsdasd Bus-ID Status Name Device Type BlkSz Size Blocks ================================================================================ 0.0.0100 active dasda 94:0 ECKD 4096 30720MB 7864380 0.0.0101 active dasdc 94:8 ECKD 4096 20480MB 5243040 0.0.0102 active dasdb 94:4 ECKD 4096 5120MB 1310760In the output above, the
Bus-IDvalue of the disk to be used as a configuration device is 0.0.0102. Use the value ofBus-IDor the disk size to identify the disk, as the device name (/dev/dasdX) can change after each reboot.Format the disk. Keep in mind that formatting removes all data on that disk.
#dasdfmt -b 4096 -y -p /dev/dasdbCreate a partition:
#parted /dev/dasdb mkpart ext4 0% 100%Format the partition:
#mkfs.ext4 /dev/dasdbLabel the partition as
ignition:#e2label /dev/dasdb1 ignitionVerify the file system:
#blkidMount the partition:
#mount /dev/dasdb1 /mntPrepare the directory structure for Ignition and/or Combustion. For Ignition:
#mkdir -p /mnt/ignitionFor Combustion:
#mkdir -p /mnt/combustionCopy your public SSH key to
/mnt/combustionasssh_key.pub.Prepare the configuration as described further.
4.1 Configuring SUSE Linux Micro deployment with Combustion #
Combustion is a dracut module that enables you to configure your system on the first boot. You can use Combustion, for example, to change the default partitions, set user passwords, create files, or install packages.
4.1.1 How does Combustion work? #
Combustion is invoked after the ignition.firstboot
argument is passed to the kernel command line. Combustion reads a
provided file named script, executes included
commands, and thus performs changes to the file system. If
script includes the network flag, Combustion tries
to configure the network. After /sysroot is mounted,
Combustion tries to activate all mount points in
/etc/fstab and then calls
transactional-update to apply other changes, for
example, setting root password or installing packages.
The configuration file script must reside in the
combustion subdirectory on the configuration media labeled
combustion. The directory structure must look as follows:
<root directory>
└── combustion
└── script
└── other files
Combustion can be used along with Ignition. If you intend to do
so, label your configuration medium ignition and
include the ignition directory with the
config.ign to your directory structure as shown
below:
<root directory>
└── combustion
└── script
└── other files
└── ignition
└── config.ignIn this scenario, Ignition runs before Combustion.
4.1.2 Combustion configuration examples #
4.1.2.1 The script configuration file #
The script configuration file is a set of commands
that are parsed and executed by Combustion in a transactional-update shell. This
article provides examples of configuration tasks performed by
Combustion.
To create the Combustion script, you can use the Fuel Ignition Web application. There you can select appropriate parameters and the application generates a Combustion script that you can download.
As the script file is interpreted by the shell,
always start the file with the interpreter declaration on its first
line. For example, in case of Bash:
#!/bin/bash
To log in to your system, include at least the root password.
However, it is recommended to establish the authentication using SSH
keys. If you need to use a root password, make sure to configure a
secure password. For a randomly generated password, use at least 10
characters. If you create your password manually, use even more than 10
characters and combine uppercase and lowercase letters and numbers.
4.1.2.1.1 Default partitioning #
Each image has the following subvolumes:
/home /root /opt /srv /usr/local /var
The /etc directory is mounted as overlayFS, where the
upper directory is mounted to /var/lib/overlay/1/etc/.
You can recognize the subvolumes mounted by default by the option
x-initrd.mount in /etc/fstab. Other
subvolumes or partitions must be configured either by Ignition or
Combustion.
If you want to add a new user or modify any of the files on a subvolume that is not mounted by default, you need to declare such subvolume first so that it is mounted as well.
4.1.2.1.2 Network configuration #
To configure and use the network connection during the first boot, add
the following statement to script:
# combustion: network
Using this statement passes the rd.neednet=1
argument to dracut. The network configuration defaults to using DHCP.
If a different network configuration is needed, proceed as described in
Section 4.1.2.1.3, “Performing modifications in the initramfs”.
If you do not use the statement, the system remains configured without any network connection.
4.1.2.1.3 Performing modifications in the initramfs #
You may need to perform changes to the initramfs environment, for
example, to write a custom network configuration for NetworkManager into
/etc/NetworkManager/system-connections/. To do so,
use the prepare statement.
For example, to create a connection with a static IP address and configure DNS:
#!/bin/bash
# combustion: network prepare
set -euxo pipefail
nm_config() {
umask 077 # Required for NM config
mkdir -p /etc/NetworkManager/system-connections/
cat >/etc/NetworkManager/system-connections/static.nmconnection <<-EOF
[connection]
id=static
type=ethernet
autoconnect=true
[ipv4]
method=manual
dns=192.168.100.1
address1=192.168.100.42/24,192.168.100.1
EOF
}
if [ "${1-}" = "--prepare" ]; then
nm_config # Configure NM in the initrd
exit 0
fi
# Redirect output to the console
exec > >(exec tee -a /dev/tty0) 2>&1
nm_config # Configure NM in the system
curl example.com
# Close outputs and wait for tee to finish
exec 1>&- 2>&-; wait;
# Leave a marker
echo "Configured with combustion" > /etc/issue.d/combustion4.1.2.1.4 Waiting for the task to complete #
Some processes may be run in background, for example, the tee process
that redirects output to the terminal. To ensure that all running processes are completed before the
script
execution finishes, add the following line:
exec 1>&- 2>&-; wait;
4.1.2.1.5 Partitioning #
SUSE Linux Micro raw images are delivered with a default partitioning
scheme. You might want to
use a different partitioning. The following set of example snippets
moves the /home to a different partition.
When changing partitioning, do not place the following directories on a different partition
than the root file system: /boot, /usr,
/etc, /dev.
The following script performs changes that are not included in
snapshots. If the script fails and the snapshot is discarded, certain
changes remain visible and cannot be reverted, for example, the
changes to the /dev/vdb device.
The following snippet creates a GPT partitioning schema with a single
partition on the /dev/vdb device:
sfdisk /dev/vdb <<EOF sleep 1 label: gpt type=linux EOF partition=/dev/vdb1
As the sfdisk command may take longer time to complete, postpone
label by using the
sleep command after sfdisk.
The partition is formatted to Btrfs:
wipefs --all ${partition}
mkfs.btrfs ${partition}
Possible content of /home is moved to the new
/home folder location by the following snippet:
mount /home
mount ${partition} /mnt
rsync -aAXP /home/ /mnt/
umount /home /mnt
The snippet below removes an old entry in
/etc/fstab and creates a new entry:
awk -i inplace '$2 != "/home"' /etc/fstab
echo "$(blkid -o export ${partition} | grep ^UUID=) /home btrfs defaults 0 0" >>/etc/fstab4.1.2.1.6 Creating new users #
As some services, such as Cockpit, require login using a non-root user, define at least one unprivileged user here. Alternatively, you can create such a user from a running system as described in Section 6.2, “Adding users”.
To add a new user account, first create a hash string that represents
the user's password. Use the openssl passwd -6
command.
After you obtain the password hash, add the following lines to the
script:
mount /home useradd -m EXAMPLE_USER echo 'EXAMPLE_USER:PASSWORD_HASH' | chpasswd -e
4.1.2.1.7 Setting a password for root #
Before you set the root password, generate a hash of the
password, for example, by using the openssl passwd
-6. To set the password, add the following line to the
script:
echo 'root:PASSWORD_HASH' | chpasswd -e
4.1.2.1.8 Adding SSH keys #
The following snippet creates a directory to store the root's SSH
key and then copies the public SSH key located on the configuration
device to the authorized_keys file.
mkdir -pm700 /root/.ssh/ cat id_rsa_new.pub >> /root/.ssh/authorized_keys
The SSH service must be enabled in case you need to use remote login via SSH. For details, refer to Section 4.1.2.1.9, “Enabling services”.
4.1.2.1.9 Enabling services #
To enable system services, for example, the SSH service, add the
following line to script:
systemctl enable sshd.service
4.1.2.1.10 Installing packages #
As certain packages may require additional subscription, you may need to register your system beforehand. An available network connection may also be needed to install additional packages.
During the first boot configuration, you can install additional
packages to your system. For example, you can install the
vim editor by adding:
zypper --non-interactive install vim-small
Bear in mind that you will not be able to use
zypper after the configuration is complete and you
boot to the configured system. To perform changes later, you must use
the transactional-update command to create a
changed snapshot.
4.1.2.2 A complete example of the script file #
The following script provides complete settings that
may serve you as a guide on how to write your own Combustion
configuration. The example does not require any further Ignition
configuration.
#!/bin/bash
# combustion: network prepare
set -euxo pipefail
## The OSA subchannels to enable
ZNET_SUBCHANNELS=0.0.1000,0.0.1001,0.0.1002
## Network information to configure
IPADDRESS="10.144.64.155/24" ## Formet is ipaddress/cidr
GATEWAY="10.144.64.254"
NAMESERVERS="10.144.53.53;10.144.53.54" ## A semicolon-separated list of name servers
## Hostname information
NODE_HOSTNAME="micro6"
## Add password for root user
## Use either 'openssl passwd -6' or 'mkpasswd --method=sha-512' to encrypt the password.
ROOT_USER_PASSWORD='PASSWORD_HASH'
SSH_ROOT_PUBLIC_KEY=ssh_key.pub
## Add a regular user, because root login may be disallowed in some services.
CREATE_NORMAL_USER=user ## Replace the "user" with a desired username here.
NORMAL_USER_PASSWORD='PASSWORD_HASH'
SSH_USER_PUBLIC_KEY=ssh_key.pub
## Register to SUSE Customer Center and install additional packages
REG_EMAIL='tux@suse.com' ## Email address for product registration
SLMICRO_REGCODE='REGISTRATIONCODE' ## A registration code required to install additional packages
ADDITIONAL_PACKAGES='' ## A space separated list of additional packages to install
nm_config() {
umask 077 # Required for Network Manager configuration
mkdir -p /etc/NetworkManager/system-connections/
cat >'/etc/NetworkManager/system-connections/Wired connection 1.nmconnection' <<EOF
[connection]
id=static
type=ethernet
autoconnect=true
[ipv4]
method=manual
address1=$IPADDRESS
gateway=$GATEWAY
dns=$NAMESERVERS
EOF
}
if [ "${1-}" = "--prepare" ]; then
# Configure Network Manager in the initrd
nm_config
# Enable OSA network devices
chzdev qeth $ZNET_SUBCHANNELS -ep
chzdev qeth $ZNET_SUBCHANNELS -e
exit 0
fi
## Post output on stdout
exec > >(exec tee -a /dev/ttyS0) 2>&1
## Set hostname
echo $NODE_HOSTNAME > /etc/hostname
## Set root password
echo root:$ROOT_USER_PASSWORD | chpasswd -e
## Add ssh public key as authorized key for the root user
mkdir -pm700 /root/.ssh/
cat $SSH_ROOT_PUBLIC_KEY >> /root/.ssh/authorized_keys
## Mount /var and /home so user can be created smoothly
if [ "$CREATE_NORMAL_USER" ]
then
mount /var && mount /home
fi
## User creation
if [ "$CREATE_NORMAL_USER" ]
then
echo "User creation is requested, creating user."
useradd -m $CREATE_NORMAL_USER -s /bin/bash -g users
echo $CREATE_NORMAL_USER:$NORMAL_USER_PASSWORD | chpasswd -e
echo $CREATE_NORMAL_USER "ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/adminusers
mkdir -pm700 /home/$CREATE_NORMAL_USER/.ssh/
chown -R $CREATE_NORMAL_USER:users /home/$CREATE_NORMAL_USER/.ssh/
cat $SSH_USER_PUBLIC_KEY >> /home/$CREATE_NORMAL_USER/.ssh/authorized_keys
echo "Requested user has been created, requested password has been set."
else
echo "No user will be created"
fi
# Configure NM in the system
nm_config
# Enable OSA network device
chzdev qeth $ZNET_SUBCHANNELS -ep
chzdev qeth $ZNET_SUBCHANNELS -e
## Enable services
echo "Enabling services."
systemctl enable cockpit.socket
systemctl enable sshd
## Unmount var and home
if [ "$CREATE_NORMAL_USER" ]
then
umount /var && umount /home
fi
# Close outputs and wait for tee to finish
exec 1>&- 2>&-; wait;
echo "Configured with Combustion at $(date)" > /etc/issue.d/combustion4.2.1 How does Ignition work? #
When the system is booted for the first time, Ignition is loaded as
part of an initramfs and searches for a
configuration file within a specific directory (on a USB flash disk, or
you can provide a URL). All changes are performed before the kernel
switches from the temporary file system to the real root file system
(before the switch_root command is issued).
Ignition uses a configuration file in the JSON format named
config.ign. You can either write the configuration
manually or use the Fuel Ignition Web application at
https://ignite.opensuse.org to generate it.
Fuel Ignition does not cover the complete Ignition vocabulary yet, and the resulting JSON file may need additional manual tweaking.
4.2.1.1 config.ign #
The configuration file
config.ign must reside in the
ignition subdirectory on the configuration media, for example, a USB
stick labeled ignition. The directory structure must look as follows:
<root directory>
└── ignition
└── config.ignTo create a disk image with the Ignition configuration, you can use the Fuel Ignition Web application at https://ignite.opensuse.org.
The config.ign contains multiple data types:
objects, strings, integers, booleans and lists of objects. For a
complete specification, refer to
Ignition
specification v3.3.0.
The version attribute is mandatory and in case of
SUSE Linux Micro, its value must be set either to
3.4.0 or to any lower version. Otherwise, Ignition
will fail.
To log in to your system as root, you must at least
include a password for root. However, it is recommended to
establish access via SSH keys. To configure a password, make sure to
use a secure one. If you use a randomly generated password, use at
least 10 characters. If you create your password manually, use even
more than 10 characters and combine uppercase and lowercase letters and
numbers.
4.2.2 Ignition configuration examples #
This section provides several examples of the Ignition configuration in the built-in JSON format.
version attribute is mandatory
Each config.ign must include version 3.4.0 or
lower that is then converted to the corresponding Ignition
specification.
4.2.2.1 Default partitioning #
Each image has the following subvolumes:
/home /root /opt /srv /usr/local /var
The /etc directory is mounted as overlayFS, where the
upper directory is mounted to /var/lib/overlay/1/etc/.
You can recognize the subvolumes mounted by default by the option
x-initrd.mount in /etc/fstab. Other
subvolumes or partitions must be configured either by Ignition or
Combustion.
If you want to add a new user or modify any of the files on a subvolume that is not mounted by default, you need to declare such subvolume first so that it is mounted as well.
4.2.2.2 Storage configuration #
The storage attribute is used to configure
partitions, RAID, define file systems, create files, etc. To define
partitions, use the disks attribute. The
filesystems attribute is used to format partitions. The
files attribute can be used to create files in the
file system.
The example below configures four partitions, including a dedicated swap partition, and creates a file system on each partition.
{
"ignition": {
"version": "3.0.0"
},
"storage": {
"disks": [
{
"device": "/dev/vda",
"partitions": [
{
"label": "root",
"number": 1,
"sizeMiB": 30720
},
{
"label": "boot",
"number": 2,
"sizeMiB": 8720
},
{
"label": "swap",
"number": 3,
"sizeMiB": 4096
},
{
"label": "home",
"number": 4,
"sizeMiB": 30720
}
],
"wipeTable": true
}
]
"filesystems": [
{
"device": "/dev/disk/by-partlabel/root",
"format": "btrfs",
"label": "root"
},
{
"device": "/dev/disk/by-partlabel/swap",
"format": "swap",
"label": "swap"
}
{
"device": "/dev/disk/by-partlabel/boot",
"format": "btrfs",
"label": "boot"
}
{
"device": "/dev/disk/by-partlabel/home",
"format": "ext4",
"label": "home"
}
]
}
}Each of the mentioned attributes is described in the following sections.
4.2.2.2.1 The disks attribute #
The disks attribute is a list of devices that
enables you to define partitions on these devices. The
disks attribute must contain at least one
device, other attributes are optional. Keep in mind that at least the
root and boot partitions (swap if configured) need to be formatted to bear a file
system.
The following example uses a single virtual device and divides the disk into four partitions:
...
"storage": {
"disks": [
{
"device": "/dev/vda",
"partitions": [
{
"label": "root", 1
"number": 1, 2
"sizeMiB": 30720 3
},
{
"label": "boot",
"number": 2,
"startMiB": 30720, 4
"sizeMiB": 8720
},
{
"label": "swap",
"number": 3,
"sizeMiB": 4096
},
{
"label": "home",
"number": 4,
"sizeMiB": 30720
}
],
"wipeTable": true
}
]
...The partition identification. Depending on the partition file system, it can have up to 16 characters for EXT-type file systems and 256 characters in the case of Btrfs. | |
The position of the partition in the partition table. If set to 0, the next free position is used. | |
The size of the partition in MiB. | |
Identifies the starting point of the particular partition. |
4.2.2.2.2 The raid attribute #
The raid is a list of RAID arrays. The following
attributes of raid are mandatory:
- level
a level of the particular RAID array (linear, raid0, raid1, raid2, raid3, raid4, raid5, raid6)
- devices
a list of devices in the array referenced by their absolute paths
- name
a name that will be used for the md device
For example:
{
"ignition": {
"version": "3.0.0"
},
"storage": {
"raid": [
{
"devices": [
"/dev/sda",
"/dev/sdb"
],
"level": "raid1",
"name": "system"
}
]
}
}4.2.2.2.3 The filesystems attribute #
The filesystems attribute does not modify mount units. If you add a new partition or remove an
existing partition, you must manually adjust the mount units.
When changing partitioning, do not place the following directories on a different partition
than the root file system: /boot, /usr,
/etc, /dev.
filesystems must contain the following attributes:
- device
the absolute path to the device, typically
/dev/sdain case of physical disk- format
the file system format (btrfs, ext4, ext3, xfs, vfat or swap)
NoteIn case of SUSE Linux Micro, the
rootfile system must be formatted to Btrfs.
The following example demonstrates using the
filesystems attribute. The
/opt directory will be mounted to the
/dev/sda1 partition, which is formatted to Btrfs.
The device will not be erased.
For example:
{
"ignition": {
"version": "3.0.0"
},
"storage": {
"filesystems": [
{
"device": "/dev/sda1",
"format": "btrfs",
"path": "/opt",
"wipeFilesystem": false
}
]
}
}
Normally, a regular user's home directory is located in the
/home/USER_NAME
directory. Since /home is not mounted by default
in the initrd, the mount has to be explicitly defined for the user
creation to succeed:
{
"ignition": {
"version": "3.1.0"
},
"passwd": {
"users": [
{
"name": "root",
"passwordHash": "PASSWORD_HASH",
"sshAuthorizedKeys": [
"ssh-rsa SSH_KEY_HASH"
]
}
]
},
"storage": {
"filesystems": [
{
"device": "/dev/sda3",
"format": "btrfs",
"mountOptions": [
"subvol=/@/home"
],
"path": "/home",
"wipeFilesystem": false
}
]
}
}4.2.2.2.4 The files attribute #
You can use the files attribute to create any
files on your machine. Bear in mind that to create files
outside the default partitioning schema, you need to define the
directories by using the filesystems attribute.
In the following example, a host name is created by using the
files attribute. The file
/etc/hostname will be created with the
sl-micro1 host name:
Keep in mind that JSON accepts file modes in decimal numbers, for
example, 420.
JSON:
{
"ignition": {
"version": "3.0.0"
},
"storage": {
"files": [
{
"overwrite": true,
"path": "/etc/hostname",
"contents": {
"source": "data:,sl-micro1"
},
"mode": 420
}
]
}
}4.2.2.2.5 The directories attribute #
The directories attribute is a list of directories
that will be created in the file system. The
directories attribute must contain at least one
path attribute.
For example:
{
"ignition": {
"version": "3.0.0"
},
"storage": {
"directories": [
{
"path": "/home/tux",
"user": {
"name": "tux"
}
}
]
}
}4.2.2.3 Users administration #
The passwd attribute is used to add users. As some services, such as Cockpit, require login using a non-root user, define at
least one unprivileged user here. Alternatively, you can create such a user from a running
system as described in Section 6.2, “Adding users”.
To log in to your system, create root and a regular user and set their
passwords. You need to hash the passwords, for example, by
using the openssl command:
openssl passwd -6
The command creates a hash of the password you chose. Use this hash as
the value of the password_hash attribute.
For example:
{
"ignition": {
"version": "3.0.0"
},
"passwd": {
"users": [
{
"name": "root",
"passwordHash": "PASSWORD_HASH",
"sshAuthorizedKeys": [
"ssh-rsa SSH_KEY_HASH USER@HOST"
]
}
]
}
}
The users attribute must contain at least one
name attribute.
ssh_authorized_keys is a list of ssh keys for the
user.
4.2.2.4 Enabling systemd services #
You can enable systemd services by specifying them in the
systemd attribute.
For example:
{
"ignition": {
"version": "3.0.0"
},
"systemd": {
"units": [
{
"enabled": true,
"name": "sshd.service"
}
]
}
}4.2.2.5 Converting YAML formatted files into JSON #
JSON is a universal file format for storing structured data. Applications, for example, Ignition, use it to store and retrieve their configuration. Because JSON's syntax is complex and hard to read for human beings, you can write the configuration in a more friendly format called YAML and then convert it into JSON.
4.2.2.5.1 Converting YAML files into JSON format #
The tool that converts Ignition-specific vocabularies in YAML files
into JSON format is butane. It also verifies the
syntax of the YAML file to catch potential errors in the structure. For
the latest version of butane, add the following
repository:
>sudozypper ar -f \ https://download.opensuse.org/repositories/devel:/kubic:/ignition/openSUSE_Tumbleweed/ \ devel_kubic_ignition
Replace openSUSE_Tumbleweed with one of the following
(depending on your distribution):
'openSUSE_Leap_$releasever'15.5
Now you can install the butane tool:
>sudozypper ref && zypper in butane
After the installation is complete, you can invoke
butane by running:
> butane -p -o config.ign config.fccconfig.fccis the path to the YAML configuration file.config.ignis the path to the output JSON configuration file.The
-pcommand option adds line breaks to the output file and thus makes it more readable.
5 Deploying the raw disk image on the disk #
To deploy SUSE Linux Micro on your machine, proceed as follows:
Download the raw disk image using
wgetorcurl. For example:>curl -L0kOExtract the image:
>unpack xz -d BUILD_IDENTIFICATION.raw.xzCopy the raw disk image to the disk:
dd if=IMAGE_NAME.raw status=progress of=/dev/sda bs=4096
To check the proper setup with the following command:
#lsblkThe command should return two partitions on
/dev/sdaShut down the running Linux:
#init 0Open the x3270 terminal and define the device to load the system from. Use the LUN number of the
/dev/sdadevice, but split it to 8-digit chunks. For example, the command for LUN 0.0.fa00:0x500507630b181216:0x4021400a00000000 looks as follows:#SET LOADDEV PORTNAME 50050763 0b181216 LUN 4021400a 00000000Start SUSE Linux Micro:
#ipl FA00
6 Post-deployment steps #
6.1 Registering SUSE Linux Micro from CLI #
If your system was not registered during the deployment process
by using the Combustion script, you can
register from the running system.
To register SUSE Linux Micro with SUSE Customer Center, proceed as follows:
Run
transactional-update registeras follows:#transactional-update register -r REGISTRATION_CODE -e EMAIL_ADDRESSTo register with a local registration server, additionally provide the URL to the server:
#transactional-update register -r REGISTRATION_CODE -e EMAIL_ADDRESS \ --url "https://suse_register.example.com/"Replace REGISTRATION_CODE with the registration code you received with your copy of SUSE Linux Micro. Replace EMAIL_ADDRESS with the e-mail address associated with the SUSE account you or your organization uses to manage subscriptions.
Reboot your system to switch to the latest snapshot.
SUSE Linux Micro is now registered.
For information that goes beyond the scope of this section, refer to the
inline documentation with SUSEConnect --help.
6.2 Adding users #
Since SUSE Linux Micro requires having an unprivileged user to log in via SSH or to access Cockpit by default, we recommend to create such an account.
This step is optional if you have defined an unprivileged user in the Combustion.
Run the
useraddcommand as follows:#useradd -m USER_NAMESet a password for that account:
#passwd USER_NAMEIf needed, add the user to the
wheelgroup:#usermod -aG wheel USER_NAME
7 Legal Notice #
Copyright© 2006–2025 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.