mkosi

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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 build install the following packages:

Distribution Package
Arch arch-install-scripts
Debian debootstrap, debian-archive-keyring
Ubuntu debootstrap, ubuntu-keyring
Fedora dnfAUR
OpenSUSE zypper-gitAUR
CentOS dnf-legacy-utilsAUR

Basic usage

You can create an image by calling mkosi as root

# mkosi

You can specify option as arguments or by editing files in the current folder.

Example: Create and boot a Debian-Image

The following command will create a bootable image with the latest Debian version and the package openssh-client installed:

$ mkosi -d debian -t gpt_ext4 -b --checksum --password password --package openssh-client,vim -o image.raw

you can boot it with systemd-nspawn:

# systemd-nspawn -b -i image.raw

or boot it virtualized with QEMU and

$ qemu-system-x86_64 -m 512 -smp 2 -bios /usr/share/ovmf/x64/OVMF_CODE.fd -drive format=raw,file=image.raw

You can also write this image to a USB drive and use it to boot your computer.

2. Example: Using Config-files

The same image can be created by creating a configuration file:

mkosi.default
[Distribution]
Distribution=debian
Release=stretch

[Output]
Format=gpt_ext4
Bootable=yes
Output=image.raw

[Packages]
Packages=
         openssh-client
         vim

[Validation]
Password=password

Tip: If you create a folder mkosi.cache in current working directory, mkosi will save all downloaded packages there, so you can recreate images faster.

Configurations

Basic options can be specified as command-line arguments or in a file called mkosi.default in your current directory. Most important options:

Argument Option in mkosi.default Description
-d
[Distribution]
Distribution=
The name of the distribution to install, e.g arch.
-r
[Distribution]
Release=
The version of the distribution: jessie, 21, …
-t
[Output]
Format=
Format of the image to create:
  • gpt_ext4: Image file with GPT partition table and ext4 file system
  • gpt_btrfs: Image file with GPT partition table and btrfs file system
  • gpt_squashfs: Image file with GPT partition table and squashfs file system
  • directory: A plain directory
  • subvolume: A btrfs subvolume
  • tar: A tar-ball of a plain directory
-b
[Output]
Bootable=yes
Make the image bootable
--root-size
[Output]
RootSize=
Size of the root file system
-p
[Packages]
Packages=
List of packages to be installed into the image
-o
[Output]
Output=
File/directory-Name
--password
[Validation]
Password=password
Set the initial root password

See also