Installing MicroOS on a Raspberry Pi

Some services in my selhosting setup are more or less stateless, run in a container via podman and quadlet and are set to autoupdate. So the only thing i have to update manually is the host system. I don't really like to rely on autoupdate scripts, since i use a rolling release distro as the host system and they could brake stuff(even though OpenSUSE Tumbleweed has been super stable so far *knock on wood*). So when i heard that there is an immutable, transactional and auto updating version of said distro, i wanted to try that out. So i took a Raspberry Pi i had laying around and put MicroOS on it.

In this post i will outline the process of setting it up and getting it running. Even though i will use a Raspberry Pi as the device to run MicroOS here, most of the steps should work on other hardware, VPSs, etc as well.

Requirements

First the obvious ones. You need a Raspberry Pi, i went with a Raspberry Pi 4. Then you'll need an sd card to flash the operating system on.

Then you also need a usb drive. On the first boot of a new MicroOS installation it will look for a volume/partition named `ignition`. There you can put special scripts, which will be used to do an initial setup and configuration of the system and that is what the usb drive is for.

Flashing MicroOS

This is the same process as with any other operating system. So i headed to the MicroOS Website[1] and downloaded the correct image for my Raspberry Pi 4(<4 = armv7, >=4 = aarch64). I went with the "container host" version of the image, because i wanted to have podman already installed. Then i flashed the image with the following command:

xzcat openSUSE-MicroOS.aarch64-ContainerHost-RaspberryPi.raw.xz | sudo dd bs=4M of=/dev/sdb iflag=fullblock oflag=direct status=progress; sync

Creating the setup scripts

To get MicroOS to configure itself on first boot we need the scripts to do so. There is a web application which helps with creating those[2]. It's pretty straight forward. The things i did were:

To the bottom of the page one can download and view the `config.ign` and combustion `script` that get generated from the inputs above. Next to these two files i also downloaded the json file which can be used to revisit the configurator.

Preparing the usb drive

As mentioned above the usb drive needs a partition named "ignition". I formatted an old drive with gnome disks and added the needed partition. Then i created two folders in this partition, one called "ignition" and another one called "combustion". The files from the configurator then had to be copied over into those folders. The `config.ign` file into the "ignition" folder and the combustion `script` into the combustion folder. On the usb drive the layout then looked as follows:

ignition partition
├── combustion
│   └── script
└── ignition
    └── config.ign

Booting for the first time

The last step of the setup is simple. Put the sd card into the Raspberry Pi and plug the usb drive into one of the usb ports. I also plugged in an ethernet cable, so that it could pull the additional packages i wanted to have installed. Then i powered it on.

The initial boot took a bit longer than i expected, but after a few minutes i had a configured system running.

---

[1] MicroOS downloads
[2] Ignition and Combustion config generator

---

Back to the main page

This page is best viewed on gemini.