mkosi
mkosi stands for Make Operating System Image, and is a tool for generating an OS tree or image that can be booted.
Installation
Install mkosi or mkosi-gitAUR. Depending on what distribution you want to use in your OS tree/image, install the following packages:
| Distribution | Package | 
|---|---|
| Arch | arch-install-scripts | 
| Debian | debootstrap, debian-archive-keyring, apt | 
| Ubuntu | debootstrap, ubuntu-keyring, apt | 
| Fedora | dnf | 
| OpenSUSE | zypper-gitAUR | 
| CentOS | dnf-legacy-utilsAUR | 
Basic usage
You can create an image by just running it without any arguments:
# mkosi
You can specify option as arguments or by editing files in the current folder.
Create and boot a Debian image
The following example will create a bootable image with the latest Debian version and packages openssh-client and vim installed. This command requires mkosi's optional dependencies mtools and systemd-ukify. Depending on the image, can also be built by an unprivileged (non-root) user:
$ mkosi --distribution debian --release bookworm --format disk --bootable --checksum --root-password password --package linux-image-generic,systemd,systemd-boot,systemd-sysv,udev,dbus --package openssh-client,vim --output image.raw
systemd-nspawn can boot the resulting image:
# systemd-nspawn --boot --image image.raw
It can also be virtualized with QEMU/KVM or with systemd-vmspawn(1):
$ mkosi --output image.raw --qemu-smp 2 qemu
You can also write this image to a USB drive and use it to boot your computer.
Using configuration files
The same Debian image can be created using a configuration file, mkosi.conf, and then run mkosi without any arguments:
mkosi.conf
[Distribution]
Distribution=debian
Release=bookworm
[Output]
Format=disk
Output=image.raw
[Content]
Bootable=yes
Packages=linux-image-generic,systemd,systemd-boot,systemd-sysv,udev,dbus
         openssh-client
         vim
RootPassword=password
[Validation]
Checksum=yes
See bootable[dead link 2024-10-12 ⓘ] for more distro booting examples.
Downloaded package files and temporary build files are stored in the home cache directory or in /var/cache/mkosi and /var/tmp.
Configuration settings
Settings can be specified as command-line arguments or, for example, in a file called mkosi.conf in the current directory.
The most important settings are:
| Command line | Configuration file | Description | 
|---|---|---|
| --distribution | [Distribution] Distribution= | Name of the distribution to install. Supported are: fedora, debian, ubuntu, arch, opensuse, mageia, centos, openmandriva, rocky, alma | 
| --release | [Distribution] Release= | Version of the distribution: a numeric string or a distribution version name ( bookworm, …) | 
| --format | [Output] Format= | Format of the image to create. For example: 
 | 
| --output | [Output] Output= | Name of the image file or directory | 
| --output-directory | [Output] OutputDirectory= | Location of the image file or directory (and other generated artifacts) | 
| --bootable | [Content] Bootable= | Enable or disable generation of a bootable image: yes, no | 
| --package | [Content] Packages= | List of packages to be installed into the image: (multi) line and/or comma separated list | 
| --root-password | [Content] RootPassword= | Initial root password | 
Usage as initramfs generator
Mkosi provides a kernel-install plugin to build an initramfs, similarly to mkinitcpio or dracut.
In order to use it, install cpio and edit the kernel-install configuration file:
/etc/kernel/install.conf
initrd_generator=mkosi-initrd