The wikis are now using the new authentication system.
If you did not migrate your account yet, visit https://idp-portal-info.suse.com/

Portal:MicroOS/Ignition

Jump to: navigation, search

First Boot Configuration

To make your system accessible after booting our prebuild disk images you need to provide a configuration file on first boot. At least a password for root is required. Depending on the variation of openSUSE MicroOS these first boot configuration systems are supported:

  • Ignition
    has its origins in Fedora CoreOS and is fully supported by openSUSE MicroOS. Best choice for beginners. Find a Quick Start Documentation below.
  • Combustion
    is part of openSUSE's MicroOS project and is more powerful and flexible than Ignition and requires bash programming skills. Learn more about it from the Combustion Quick Start Documentation.
  • Cloud-Init
    is used only for the OpenStack Cloud variant of openSUSE MicroOS. Learn more from the Cloud-Init Quick Start Documentation.

Ignition Quick Start

On first boot the system will try to configure itself using Ignition. The configuration is read from a file called config.ign that needs to be stored on an storage media in the directory ignition besides the main disk image containing MicroOS. This configuration storage media can be any of what your virtualization system or your hardware does support, e.g. an ISO-Image, an USB Flash drive or even a floppy disk.

Whatever media you use, the volume label needs to be ignition. On this media, you create a directory ignition containing a file with the name config.ign. The resulting directory structure needs to look like this:

<root directory>
└── ignition
    └── config.ign

Example config.ign:

{
  "ignition": { "version": "3.1.0" },
  "passwd": {
    "users": [
      {
        "name": "root",
        "passwordHash": "pemFK1OejzrTI"
      }
    ]
  }
}

Create the value for the key passwordHash by using the command line

# openssl passwd

which prompts you for a password of your choice. The password from the example above is opensuse.

USB flash drive

Especially on bare metal or the Raspberry Pi and other ARM images the best solution to provide config.ign is on a USB flash drive.

To use this feature:

  • Format your USB flash drive with any file system supported by MicroOS (e.g. FAT, EXT4, …)
  • Set the partition label to ignition (lower case; for an EXT4 formatted drive with one partition, use e2label /dev/sdX1 ignition)
  • Mount that partition
  • Create the directory structure as mentioned above and add your config.ign

Create an ISO-Image

Using a virtual machine the most generic way to provide config.ign is to create an ISO-Image. Create the directory structure from above by using this commands:

# mkdir -p disk/ignition
# touch disk/ignition/config.ign

Open disk/ignition/config.ign with the editor of your choice and copy & paste the code from the example above.

Create the ISO-Image using mkisofs:

# mkisofs -o ignition.iso -V ignition disk

Now add ignition.iso to your VM and you are ready to go.

Create a Config File using fcct

Ignition configurations are formatted as JSON, which is quick and easy for a machine to read. However, these files are not easy for humans to read or write. The solution is a two-step configuration process that is friendly for both humans and machines:

  1. Produce a YAML-formatted Fedora CoreOS Configuration (FCC) file.
  2. Run the Fedora CoreOS Configuration Transpiler (fcct) to convert the YAML file into a JSON Ignition file.

During the transpilation process, fcct verifies the syntax of the YAML file, which can catch errors before you use it to launch MicroOS.

Get the latest version of fcct from the Kubic Devel repo:

Using Tumbleweed:

# zypper ar -f https://download.opensuse.org/repositories/devel:/kubic:/ignition/openSUSE_Tumbleweed/ devel_kubic_ignition

Using Leap:

# zypper ar -f 'https://download.opensuse.org/repositories/devel:/kubic:/ignition/openSUSE_Leap_$releasever/' devel_kubic_ignition

Using SLE 15:

# zypper ar -f https://download.opensuse.org/repositories/devel:/kubic:/ignition/SLE_15/ devel_kubic_ignition

then (for all distributions)

# zypper in ignition-config-transpiler

Invocation

# fcct -p -o config.ign config.fcc

Where config.fcc is the YAML input file and config.ign the JSON output file. -p makes the output prettier by adding line breaks and indentation.

Advanced Usage

To learn more about Ignition and its capabilities please continue with the official documentation or check out the examples below for some of the common use cases.

FCC/YAML Examples

Add a password and a SSH key for the root user

variant: fcos
version: 1.0.0
passwd:
  users:
    - name: root
      password_hash: "hash, created with e.g. `openssl passwd -6`"
      ssh_authorized_keys:
        - ssh-rsa long...key user@host

Create new users

Normally, regular user's home directory is located in /home/<username>. Since /home is not mounted by default in the initrd, the mount has to be explicitly defined for user creation to succeed. See Mounts Example for details.

variant: fcos
version: 1.1.0
storage:
  filesystems:
    - path: /home
      device: "Path to the root device such as /dev/sda3, /dev/mmcblk0p2 or /dev/disk/by-label/ROOT"
      format: btrfs
      wipe_filesystem: false
      mount_options:
       - "subvol=/@/home"
passwd:
  users:
   - name: root
     password_hash: "hash, created with e.g. `openssl passwd -6`"
     ssh_authorized_keys:
       - ssh-rsa long...key user@host

Mounts

Default mounted subvolumes are:

  • /
  • /var
  • /etc
  • /root

To access to other subvolumes or partitions such as /home or /opt, explicitly define define them in your Ignition configuration file.

variant: fcos
version: 1.0.0
storage:
  filesystems:
    - path: /opt
      device: "/dev/sdXY"
      format: btrfs
      wipe_filesystem: false

Create files

Like in the example before, if you want to create files outside of the default initrd mount directories you will also have to add storage -> filesystem for the corresponding device in addition to the snippet below.

variant: fcos
version: 1.0.0
storage:
  files:
    - path: /var/test.txt
      mode: 0644
      overwrite: true
      contents:
        inline: "testcontents"

Change hostname

According to the example before, we can set the hostname by creating the /etc/hostname file.

variant: fcos
version: 1.0.0
storage:
  files:
    - path: /etc/hostname
      filesystem: root
      mode: 0644
      overwrite: true
      contents:
        inline: "kubic-1"

Enable services

Ignition can also enable systemd services

variant: fcos
version: 1.0.0
systemd:
  units:
    - name: sshd.service
      enabled: true

More Examples

Find some more FCC examples on the Fedora Core OS documentation website.

JSON Examples

Add a password and a SSH key for the root user

{
	"ignition": { "version": "3.1.0" },
	"passwd": {
		"users": [
			{
				"name": "root",
				"passwordHash": "hash, created with e.g. `openssl passwd -6`",
				"sshAuthorizedKeys": [
					"ssh-rsa long...key user@host"
				]
			}
		]
	}
}

Create new users

By default the user's home directory will be located in /home/<username>. As /home is not mounted in the initrd by default the mount has to be defined explicitly. Check out the Mounts Example for details.

{
	"ignition": { "version": "3.1.0" },
	"storage": {
		"filesystems": [
			{
				"path": "/home",
				"device": "Path to the root device such as /dev/sda3, /dev/mmcblk0p2 or /dev/disk/by-label/ROOT",
				"format": "btrfs",
				"wipeFilesystem": false,
				"mountOptions": [
					"subvol=/@/home"
				]
			}
		]
	},
	"passwd": {
		"users": [
			{
				"name": "username",
				"passwordHash": "hash, created with e.g. `openssl passwd -6`",
				"sshAuthorizedKeys": [
					"ssh-rsa long...key user@host"
				]
			}
		]
	}
}

Mounts

In an openSUSE MicroOS based image the subvolumes mounted by default are:

  • /
  • /var
  • /etc
  • /root

If access to other subvolumes or partitions such as /home or /opt is required, you need to define them in Ignition's configuration file explicitly.

{
	"ignition": { "version": "3.1.0" },
	"storage": {
		"filesystems": [
			{
				"path": "/opt",
				"device": "/dev/sdXY",
 				"format": "btrfs",
				"wipeFilesystem": false,
			}
		]
	}
}

Create files

Like in the example before, if you want to create files outside of the default initrd mount directories you will also have to add storage -> filesystem for the corresponding device in addition to the snippet below.

{
	"ignition": { "version": "3.0.0" },
	"storage": {
		"files": [
			{
				"path": "/var/test.txt",
				"mode": 420,
				"contents": {
					"source": "data:,testcontents"
				},
				"overwrite": true
			}
		]
	}
}

Change hostname

According to the example before, we can set the hostname by creating the /etc/hostname file.

{
	"ignition": { "version": "3.0.0" },
	"storage": {
		"files": [{
			"filesystem": "root",
			"path": "/etc/hostname",
			"mode": 420,
			"overwrite": true,
			"contents": { "source": "data:,kubic-1" }
		}]
	}
}

Enable services

Ignition can also enable systemd services

 {
 	"ignition": { "version": "3.0.0" },
 	"systemd": {
 		"units": [{
 			"name": "sshd.service",
 			"enabled": true
 		}]
 	}
 }

More Examples

Find some more examples on the Ignition documentation website.