diff options
Diffstat (limited to 'upstream/fedora-rawhide/man1/mkosi.1')
-rw-r--r-- | upstream/fedora-rawhide/man1/mkosi.1 | 1852 |
1 files changed, 0 insertions, 1852 deletions
diff --git a/upstream/fedora-rawhide/man1/mkosi.1 b/upstream/fedora-rawhide/man1/mkosi.1 deleted file mode 100644 index e32d7ccb..00000000 --- a/upstream/fedora-rawhide/man1/mkosi.1 +++ /dev/null @@ -1,1852 +0,0 @@ -.\" Automatically generated by Pandoc 2.14.0.3 -.\" -.TH "mkosi" "1" "2016-" "" "" -.hy -.SH NAME -.PP -mkosi \[em] Build Bespoke OS Images -.SH SYNOPSIS -.PP -\f[C]mkosi [options\&...] build\f[R] -.PP -\f[C]mkosi [options\&...] clean\f[R] -.PP -\f[C]mkosi [options\&...] summary\f[R] -.PP -\f[C]mkosi [options\&...] shell [command line\&...]\f[R] -.PP -\f[C]mkosi [options\&...] boot [nspawn settings\&...]\f[R] -.PP -\f[C]mkosi [options\&...] qemu\f[R] -.PP -\f[C]mkosi [options\&...] ssh\f[R] -.PP -\f[C]mkosi [options\&...] serve\f[R] -.PP -\f[C]mkosi [options\&...] bump\f[R] -.PP -\f[C]mkosi [options\&...] genkey\f[R] -.PP -\f[C]mkosi [options\&...] help\f[R] -.SH DESCRIPTION -.PP -\f[C]mkosi\f[R] is a tool for easily building customized OS images. -It\[cq]s a fancy wrapper around \f[C]dnf --installroot\f[R], -\f[C]debootstrap\f[R], \f[C]pacstrap\f[R] and \f[C]zypper\f[R] that may -generate disk images with a number of bells and whistles. -.SS Command Line Verbs -.PP -The following command line verbs are known: -.TP -\f[B]\f[CB]build\f[B]\f[R] -This builds the image, based on the settings passed in on the command -line or read from a \f[C]mkosi.default\f[R] file. -This verb is the default if no verb is explicitly specified. -This command must be executed as \f[C]root\f[R]. -Any arguments passed after \f[C]build\f[R] are passed as arguments to -the build script (if there is one). -.TP -\f[B]\f[CB]clean\f[B]\f[R] -Remove build artifacts generated on a previous build. -If combined with \f[C]-f\f[R], also removes incremental build cache -images. -If \f[C]-f\f[R] is specified twice, also removes any package cache. -.TP -\f[B]\f[CB]summary\f[B]\f[R] -Outputs a human-readable summary of all options used for building an -image. -This will parse the command line and \f[C]mkosi.default\f[R] file as it -would do on \f[C]build\f[R], but only output what it is configured for -and not actually build anything.\[ga] -.TP -\f[B]\f[CB]shell\f[B]\f[R] -This builds the image if it is not built yet, and then invokes -\f[C]systemd-nspawn\f[R] to acquire an interactive shell prompt in it. -If this verb is used an optional command line may be specified which is -then invoked in place of the shell in the container. -Combine this with \f[C]-f\f[R] in order to rebuild the image -unconditionally before acquiring the shell, see below. -This command must be executed as \f[C]root\f[R]. -.TP -\f[B]\f[CB]boot\f[B]\f[R] -Similar to \f[C]shell\f[R] but boots the image up using -\f[C]systemd-nspawn\f[R]. -If this verb is used an optional command line may be specified which is -passed as \[lq]kernel command line\[rq] to the init system in the image. -.TP -\f[B]\f[CB]qemu\f[B]\f[R] -Similar to \f[C]boot\f[R] but uses \f[C]qemu\f[R] to boot up the image, -i.e.\ instead of container virtualization VM virtualization is used. -This verb is only supported on images that contain a boot loader, -i.e.\ those built with \f[C]Bootable=yes\f[R] (see below). -This command must be executed as \f[C]root\f[R] unless the image already -exists and \f[C]-f\f[R] is not specified. -.TP -\f[B]\f[CB]ssh\f[B]\f[R] -When the image is built with the \f[C]Ssh=yes\f[R] option, this command -connects to a booted (\f[C]boot\f[R], \f[C]qemu\f[R] verbs) container/VM -via SSH. -Make sure to run \f[C]mkosi ssh\f[R] with the same config as -\f[C]mkosi build\f[R] was run with so that it has the necessary -information available to connect to the running container/VM via SSH. -.TP -\f[B]\f[CB]serve\f[B]\f[R] -This builds the image if it is not built yet, and then serves the output -directory (i.e.\ usually \f[C]mkosi.output/\f[R], see below) via a small -embedded HTTP server, listening on port 8081. -Combine with \f[C]-f\f[R] in order to rebuild the image unconditionally -before serving it. -This command is useful for testing network based acquisition of OS -images, for example via \f[C]machinectl pull-raw \&...\f[R] and -\f[C]machinectl pull-tar \&...\f[R]. -.TP -\f[B]\f[CB]bump\f[B]\f[R] -Determines the current image version string (as configured with -\f[C]ImageVersion=\f[R]/\f[C]--image-version=\f[R]), increases its last -dot-separated component by one and writes the resulting version string -to \f[C]mkosi.version\f[R]. -This is useful for implementing a simple versioning scheme: each time -this verb is called the version is bumped in preparation for the -subsequent build. -Note that \f[C]--auto-bump\f[R]/\f[C]-B\f[R] may be used to -automatically bump the version after each successful build. -.TP -\f[B]\f[CB]genkey\f[B]\f[R] -Generate a pair of SecureBoot keys for usage with the -\f[C]SecureBootKey=\f[R]/\f[C]--secure-boot-key=\f[R] and -\f[C]SecureBootCertificate=\f[R]/\f[C]--secure-boot-certificate=\f[R] -options. -.TP -\f[B]\f[CB]help\f[B]\f[R] -This verb is equivalent to the \f[C]--help\f[R] switch documented below: -it shows a brief usage explanation. -.SS Execution flow -.PP -Execution flow for \f[C]mkosi build\f[R]. -Columns represent the execution context. -Default values/calls are shown in parentheses. -When building with \f[C]--incremental\f[R] mkosi creates a cache of the -distribution installation for both images if not already existing and -replaces the distribution installation in consecutive runs with data -from the cached one. -.IP -.nf -\f[C] - HOST . BUILD . FINAL - . IMAGE . IMAGE - . . - start . . - | . . - v . . -build script? -------exists-----> copy . - | . skeleton trees . - | . (mkosi.skeleton/) . - none . | . - | . v . - v . install . - skip . distribution, . - build image . packages and . - | . build packages, . - | . run . - | . prepare script . - | . (mkosi.prepare build) . - | . or if incremental . - | . use cached build image . - | . | . - | . v . - | . copy . - | . build sources . - | . (./) . - | . | . - | . v . - | . copy . - | . extra trees . - | . (mkosi.extra/) . - | . | . - | . v . - | . run . - | . postinstall script . - | . (mkosi.postinst build) . - | . | . - | .-------------------------\[aq] . - | | . . - | v . . - | run . . - | finalize script . . - |(mkosi.finalize build). . - | | . . - | \[aq]-------------------------. . - | . | . - | . v . - | . run . - | . build script . - | . (mkosi.build) . - | . | . - \[aq]-----------------------------------+------------------------. - . . | - . . v - . . copy - . . skeleton trees - . . (mkosi.skeleton/) - . . | - . . v - . . install - . . distribution - . . and packages, - . . run - . . prepare script - . . (mkosi.prepare final) - . . or if incremental - . . use cached final image - . . | - . . v - . . copy - . . build results - . . | - . . v - . . copy - . . extra trees - . . (mkosi.extra/) - . . | - . . v - . . run - . . postinstall script - . . (mkosi.postinst final) - . . | - . . v - . . | - . . perform cleanup - . . (remove files, packages, - . . package metadata) - . . | - .--------------------------------------------------\[aq] - | . . - v . . - run . . - finalize script . . - (mkosi.finalize final) . . - | . . - .---------\[aq] . . - | . . - v . . - end . . - . . - HOST . BUILD . FINAL - . IMAGE . IMAGE - . . -\f[R] -.fi -.SS Supported output formats -.PP -The following output formats are supported: -.IP \[bu] 2 -Raw \f[I]GPT\f[R] disk image, with ext4 as root (\f[I]gpt_ext4\f[R]) -.IP \[bu] 2 -Raw \f[I]GPT\f[R] disk image, with xfs as root (\f[I]gpt_xfs\f[R]) -.IP \[bu] 2 -Raw \f[I]GPT\f[R] disk image, with btrfs as root (\f[I]gpt_btrfs\f[R]) -.IP \[bu] 2 -Raw \f[I]GPT\f[R] disk image, with squashfs as read-only root -(\f[I]gpt_squashfs\f[R]) -.IP \[bu] 2 -Plain squashfs image, without partition table, as read-only root -(\f[I]plain_squashfs\f[R]) -.IP \[bu] 2 -Plain directory, containing the OS tree (\f[I]directory\f[R]) -.IP \[bu] 2 -btrfs subvolume, with separate subvolumes for \f[C]/var\f[R], -\f[C]/home\f[R], \f[C]/srv\f[R], \f[C]/var/tmp\f[R] -(\f[I]subvolume\f[R]) -.IP \[bu] 2 -Tar archive (\f[I]tar\f[R]) -.IP \[bu] 2 -CPIO archive (\f[I]cpio\f[R]) in the format appropriate for a kernel -initrd -.PP -When a \f[I]GPT\f[R] disk image is created, the following additional -options are available: -.IP \[bu] 2 -A swap partition may be added in -.IP \[bu] 2 -The image may be made bootable on \f[I]EFI\f[R] and \f[I]BIOS\f[R] -systems -.IP \[bu] 2 -Separate partitions for \f[C]/srv\f[R] and \f[C]/home\f[R] may be added -in -.IP \[bu] 2 -The root, \f[C]/srv\f[R] and \f[C]/home\f[R] partitions may optionally -be encrypted with LUKS. -.IP \[bu] 2 -A dm-verity partition may be added in that adds runtime integrity data -for the root partition -.SS Configuration Settings -.PP -The following settings can be set through configuration files (the -syntax with \f[C]SomeSetting=value\f[R]) and on the command line (the -syntax with \f[C]--some-setting=value\f[R]). -For some command line parameters, a single-letter shortcut is also -allowed. -In the configuration files, the setting must be in the appropriate -section, so the settings are grouped by section below. -.PP -Command line options that take no argument are shown without \[lq]=\[rq] -in their long version. -In the config files, they should be specified with a boolean argument: -either \[lq]1\[rq], \[lq]yes\[rq], or \[lq]true\[rq] to enable, or -\[lq]0\[rq], \[lq]no\[rq], \[lq]false\[rq] to disable. -.SS [Distribution] Section -.TP -\f[B]\f[CB]Distribution=\f[B]\f[R], \f[B]\f[CB]--distribution=\f[B]\f[R], \f[B]\f[CB]-d\f[B]\f[R] -The distribution to install in the image. -Takes one of the following arguments: \f[C]fedora\f[R], -\f[C]debian\f[R], \f[C]ubuntu\f[R], \f[C]arch\f[R], \f[C]opensuse\f[R], -\f[C]mageia\f[R], \f[C]centos\f[R], \f[C]centos_epel\f[R], -\f[C]clear\f[R], \f[C]photon\f[R], \f[C]openmandriva\f[R], -\f[C]rocky\f[R], \f[C]rocky_epel\f[R], \f[C]alma\f[R], -\f[C]alma_epel\f[R]. -If not specified, defaults to the distribution of the host. -.TP -\f[B]\f[CB]Release=\f[B]\f[R], \f[B]\f[CB]--release=\f[B]\f[R], \f[B]\f[CB]-r\f[B]\f[R] -The release of the distribution to install in the image. -The precise syntax of the argument this takes depends on the -distribution used, and is either a numeric string (in case of Fedora -Linux, CentOS, \&..., e.g.\ \f[C]29\f[R]), or a distribution version -name (in case of Debian, Ubuntu, \&..., e.g.\ \f[C]artful\f[R]). -If neither this option, nor \f[C]Distribution=\f[R] is specified, -defaults to the distribution version of the host. -If the distribution is specified, defaults to a recent version of it. -.TP -\f[B]\f[CB]Mirror=\f[B]\f[R], \f[B]\f[CB]--mirror=\f[B]\f[R], \f[B]\f[CB]-m\f[B]\f[R] -The mirror to use for downloading the distribution packages. -Expects a mirror URL as argument. -.TP -\f[B]\f[CB]Repositories=\f[B]\f[R], \f[B]\f[CB]--repositories=\f[B]\f[R] -Additional package repositories to use during installation. -Expects one or more URLs as argument, separated by commas. -This option may be used multiple times, in which case the list of -repositories to use is combined. -Use \[lq]!*\[rq] to remove all repositories from to the list or use -e.g.\ \[lq]!repo-url\[rq] to remove just one specific repository. -For Arch Linux, additional repositories must be passed in the form -\f[C]<name>::<url>\f[R] (e.g.\ \f[C]myrepo::https://myrepo.net\f[R]). -.TP -\f[B]\f[CB]UseHostRepositories=\f[B]\f[R], \f[B]\f[CB]--use-host-repositories\f[B]\f[R] -This option is only applicable for RPM-based distributions: -\f[I]CentOS\f[R], \f[I]Fedora Linux\f[R], \f[I]Mageia\f[R], -\f[I]Photon\f[R], \f[I]Rocky Linux\f[R], \f[I]Alma Linux\f[R] and -\f[I]OpenMandriva\f[R]. -Allows use of the host\[cq]s existing RPM repositories. -By default, a hardcoded set of default RPM repositories is generated and -used. -Use \f[C]--repositories=\f[R] to identify a custom set of repositories -to be enabled and used for the build. -.TP -\f[B]\f[CB]RepositoryDirectory\f[B]\f[R], \f[B]\f[CB]--repository-directory\f[B]\f[R] -This option can (for now) only be used with RPM-based istributions and -Arch Linux. -It identifies a directory containing extra repository definitions that -will be used when installing packages. -The files are passed directly to the corresponding package manager and -should be written in the format expected by the package manager of the -image\[cq]s distro. -.TP -\f[B]\f[CB]Architecture=\f[B]\f[R], \f[B]\f[CB]--architecture=\f[B]\f[R] -The architecture to build the image for. -Note that this currently only works for architectures compatible with -the host\[cq]s architecture. -.SS [Output] Section -.TP -\f[B]\f[CB]Format=\f[B]\f[R], \f[B]\f[CB]--format=\f[B]\f[R], \f[B]\f[CB]-t\f[B]\f[R] -The image format type to generate. -One of \f[C]directory\f[R] (for generating OS images inside a local -directory), \f[C]subvolume\f[R] (similar, but as a btrfs subvolume), -\f[C]tar\f[R] (similar, but a tarball of the image is generated), -\f[C]cpio\f[R] (similar, but a cpio archive is generated), -\f[C]gpt_ext4\f[R] (a block device image with an ext4 file system inside -a GPT partition table), \f[C]gpt_xfs\f[R] (similar, but with an xfs file -system), \f[C]gpt_btrfs\f[R] (similar, but with an btrfs file system), -\f[C]gpt_squashfs\f[R] (similar, but with a squashfs file system), -\f[C]plain_squashfs\f[R] (a plain squashfs file system without a -partition table). -.TP -\f[B]\f[CB]ManifestFormat=\f[B]\f[R], \f[B]\f[CB]--manifest-format=\f[B]\f[R] -The manifest format type or types to generate. -A comma-delimited list consisting of \f[C]json\f[R] (the standard JSON -output format that describes the packages installed), -\f[C]changelog\f[R] (a human-readable text format designed for diffing). -Defaults to \f[C]json\f[R]. -.TP -\f[B]\f[CB]Output=\f[B]\f[R], \f[B]\f[CB]--output=\f[B]\f[R], \f[B]\f[CB]-o\f[B]\f[R] -Path for the output image file to generate. -Takes a relative or absolute path where the generated image will be -placed. -If neither this option nor \f[C]OutputDirectory=\f[R] is used, the image -is generated under the name \f[C]image\f[R], but its name suffixed with -an appropriate file suffix (e.g.\ \f[C]image.raw.xz\f[R] in case -\f[C]gpt_ext4\f[R] is used in combination with \f[C]xz\f[R] -compression). -If the \f[C]ImageId=\f[R] option is configured it is used instead of -\f[C]image\f[R] in the default output name. -If an image version is specified via \f[C]ImageVersion=\f[R], it is -included in the default name, e.g.\ a specified image version of -\f[C]7.8\f[R] might result in an image file name of -\f[C]image_7.8.raw.xz\f[R]. -.TP -\f[B]\f[CB]OutputSplitRoot=\f[B]\f[R], \f[B]\f[CB]--output-split-root=\f[B]\f[R], \f[B]\f[CB]OutputSplitVerify=\f[B]\f[R], \f[B]\f[CB]--output-split-verity=\f[B]\f[R], \f[B]\f[CB]OutputSplitKernel=\f[B]\f[R], \f[B]\f[CB]--output-split-kernel=\f[B]\f[R] -Paths for the split-out output image files, when -\f[C]SplitArtifacts=yes\f[R] is used. -If unspecified, the relevant split artifact files will be named like the -main image, but with \f[C].root\f[R], \f[C].verity\f[R], and -\f[C].efi\f[R] suffixes inserted (and in turn possibly suffixed by -compression suffix, if compression is enabled). -.TP -\f[B]\f[CB]OutputDirectory=\f[B]\f[R], \f[B]\f[CB]--output-dir=\f[B]\f[R], \f[B]\f[CB]-O\f[B]\f[R] -Path to a directory where to place all generated artifacts (i.e.\ the -generated image when an output path is not given, \f[C]SHA256SUMS\f[R] -file, etc.). -If this is not specified and the directory \f[C]mkosi.output/\f[R] -exists in the local directory, it is automatically used for this -purpose. -If the setting is not used and \f[C]mkosi.output/\f[R] does not exist, -all output artifacts are placed adjacent to the output image file. -.TP -\f[B]\f[CB]WorkspaceDirectory=\f[B]\f[R], \f[B]\f[CB]--workspace-dir=\f[B]\f[R] -Path to a directory where to store data required temporarily while -building the image. -This directory should have enough space to store the full OS image, -though in most modes the actually used disk space is smaller. -If not specified, and \f[C]mkosi.workspace/\f[R] exists in the local -directory, it is used for this purpose. -Otherwise, a subdirectory in the temporary storage area is used -(\f[C]$TMPDIR\f[R] if set, \f[C]/var/tmp/\f[R] otherwise). -The data in this directory is removed automatically after each build. -It\[cq]s safe to manually remove the contents of this directory should -an \f[C]mkosi\f[R] invocation be aborted abnormally (for example, due to -reboot/power failure). -If the \f[C]btrfs\f[R] output modes are selected this directory must be -backed by \f[C]btrfs\f[R] too. -.TP -\f[B]\f[CB]Force=\f[B]\f[R], \f[B]\f[CB]--force\f[B]\f[R], \f[B]\f[CB]-f\f[B]\f[R] -Replace the output file if it already exists, when building an image. -By default when building an image and an output artifact already exists -\f[C]mkosi\f[R] will refuse operation. -Specify this option once to delete all build artifacts from a previous -run before re-building the image. -If incremental builds are enabled, specifying this option twice will -ensure the intermediary cache files are removed, too, before the -re-build is initiated. -If a package cache is used (also see the \[lq]Files\[rq] section below), -specifying this option thrice will ensure the package cache is removed -too, before the re-build is initiated. -For the \f[C]clean\f[R] operation this option has a slightly different -effect: by default the verb will only remove build artifacts from a -previous run, when specified once the incremental cache files are -deleted too, and when specified twice the package cache is also removed. -.PP -.TP -\f[B]\f[CB]GPTFirstLBA=\f[B]\f[R], \f[B]\f[CB]--gpt-first-lba=\f[B]\f[R] -Override the first usable LBA (Logical Block Address) within the GPT -header. -This defaults to \f[C]2048\f[R], which is actually the desired value. -However, some tools, e.g.\ the \f[C]prl_disk_tool\f[R] utility from the -Parallels virtualization suite require this to be set to \f[C]34\f[R], -otherwise they might fail to resize the disk image and/or partitions -inside it. -.TP -\f[B]\f[CB]Bootable=\f[B]\f[R], \f[B]\f[CB]--bootable\f[B]\f[R], \f[B]\f[CB]-b\f[B]\f[R] -Generate a bootable image. -By default this will generate an image bootable on UEFI systems. -Use \f[C]BootProtocols=\f[R] to select support for a different boot -protocol. -.TP -\f[B]\f[CB]BootProtocols=\f[B]\f[R], \f[B]\f[CB]--boot-protocols=\f[B]\f[R] -Pick one or more boot protocols to support when generating a bootable -image, as enabled with \f[C]Bootable=\f[R]. -Takes a comma-separated list of \f[C]uefi\f[R] or \f[C]bios\f[R]. -May be specified more than once in which case the specified lists are -merged. -If \f[C]uefi\f[R] is specified the \f[C]sd-boot\f[R] UEFI boot loader is -used, if \f[C]bios\f[R] is specified the GNU Grub boot loader is used. -Use \[lq]!*\[rq] to remove all previously added protocols or -\[lq]!protocol\[rq] to remove one protocol. -.TP -\f[B]\f[CB]KernelCommandLine=\f[B]\f[R], \f[B]\f[CB]--kernel-command-line=\f[B]\f[R] -Use the specified kernel command line when building bootable images. -By default command line arguments get appended. -To remove all arguments from the current list pass \[lq]!*\[rq]. -To remove specific arguments add a space separated list of \[lq]!\[rq] -prefixed arguments. -For example adding \[lq]!* console=ttyS0 rw\[rq] to a -\f[C]mkosi.default\f[R] file or the command line arguments passes -\[lq]console=ttyS0 rw\[rq] to the kernel in any case. -Just adding \[lq]console=ttyS0 rw\[rq] would append these two arguments -to the kernel command line created by lower priority configuration files -or previous \f[C]KernelCommandLine=\f[R] command line arguments. -.TP -\f[B]\f[CB]SecureBoot=\f[B]\f[R], \f[B]\f[CB]--secure-boot\f[B]\f[R] -Sign the resulting kernel/initrd image for UEFI SecureBoot. -.TP -\f[B]\f[CB]SecureBootKey=\f[B]\f[R], \f[B]\f[CB]--secure-boot-key=\f[B]\f[R] -Path to the PEM file containing the secret key for signing the UEFI -kernel image, if \f[C]SecureBoot=\f[R] is used. -.TP -\f[B]\f[CB]SecureBootCertificate=\f[B]\f[R], \f[B]\f[CB]--secure-boot-certificate=\f[B]\f[R] -Path to the X.509 file containing the certificate for the signed UEFI -kernel image, if \f[C]SecureBoot=\f[R] is used. -.TP -\f[B]\f[CB]SecureBootCommonName=\f[B]\f[R], \f[B]\f[CB]--secure-boot-common-name=\f[B]\f[R] -Common name to be used when generating SecureBoot keys via mkosi\[cq]s -\f[C]genkey\f[R] command. -Defaults to \f[C]mkosi of %u\f[R], where \f[C]%u\f[R] expands to the -username of the user invoking mkosi. -.TP -\f[B]\f[CB]SecureBootValidDays=\f[B]\f[R], \f[B]\f[CB]--secure-boot-valid-days=\f[B]\f[R] -Number of days that the keys should remain valid when generating -SecureBoot keys via mkosi\[cq]s \f[C]genkey\f[R] command. -Defaults to two years (730 days). -.TP -\f[B]\f[CB]ReadOnly=\f[B]\f[R], \f[B]\f[CB]--read-only\f[B]\f[R] -Set the read-only flag on the root partition in the partition table. -Only applies to \f[C]gpt_ext4\f[R], \f[C]gpt_xfs\f[R], -\f[C]gpt_btrfs\f[R], \f[C]subvolume\f[R] output formats, and is implied -on \f[C]gpt_squashfs\f[R] and \f[C]plain_squashfs\f[R]. -The read-only flag is essentially a hint to tools using the image (see -https://systemd.io/DISCOVERABLE_PARTITIONS/). -In particular, all systemd tools like \f[C]systemd-nspawn\f[R] and -\f[C]systemd-gpt-auto-generator\f[R] will mount such partitions -read-only, but tools from other project may ignore the flag. -.TP -\f[B]\f[CB]Minimize=\f[B]\f[R], \f[B]\f[CB]--minimize\f[B]\f[R] -Attempt to make the resulting root file system as small as possible by -removing free space from the file system. -Only supported for \f[C]gpt_ext4\f[R] and \f[C]gpt_btrfs\f[R]. -For ext4 this relies on \f[C]resize2fs -M\f[R], which reduces the free -disk space but is not perfect and generally leaves some free space. -For btrfs the results are optimal and no free space is left. -.TP -\f[B]\f[CB]Encrypt=\f[B]\f[R], \f[B]\f[CB]--encrypt\f[B]\f[R] -Encrypt all partitions in the file system or just the root file system. -Takes either \f[C]all\f[R] or \f[C]data\f[R] as argument. -If \f[C]all\f[R], the root, \f[C]/home\f[R] and \f[C]/srv\f[R] file -systems will be encrypted using dm-crypt/LUKS (with its default -settings). -If \f[C]data\f[R], the root file system will be left unencrypted, but -\f[C]/home\f[R] and \f[C]/srv\f[R] will be encrypted. -The passphrase to use is read from the \f[C]mkosi.passphrase\f[R] file -in the current working directory. -Note that the UEFI System Partition (ESP) containing the boot loader and -kernel to boot is never encrypted since it needs to be accessible by the -firmware. -.TP -\f[B]\f[CB]Verity=\f[B]\f[R], \f[B]\f[CB]--verity\f[B]\f[R] -Add a \[lq]Verity\[rq] integrity partition to the image. -Takes a boolean or the special value \f[C]signed\f[R], and defaults to -disabled. -If enabled, the root partition (or \f[C]/usr/\f[R] partition, in case -\f[C]UsrOnly=\f[R] is enabled) is protected with \f[C]dm-verity\f[R] -against offline modification, the verification data is placed in an -additional GPT partition. -Implies \f[C]ReadOnly=yes\f[R]. -If this is enabled, the Verity root hash is written to an output file -with \f[C].roothash\f[R] or \f[C].usrhash\f[R] suffix. -If set to \f[C]signed\f[R], Verity is also enabled, but the resulting -root hash is then also signed (in PKCS#7 format) with the signature key -configured with \f[C]SecureBootKey=\f[R]. -Or in other words: the SecureBoot key pair is then used to both sign the -kernel, if that is enabled, and the root/\f[C]/usr/\f[R] file system. -This signature is then stored in an additional output file with the -\f[C].roothash.p7s\f[R] or \f[C].usrhash.p7s\f[R] suffix in DER format. -It is also written to an additional partition in the image. -The latter allows generating self-contained signed disk images, -implementing the Verity provisions described in the Discoverable -Partitions Specification (https://systemd.io/DISCOVERABLE_PARTITIONS). -.TP -\f[B]\f[CB]CompressFs=\f[B]\f[R], \f[B]\f[CB]--compress-fs=\f[B]\f[R] -Enable or disable internal compression in the file system. -Only applies to output formats with squashfs or btrfs. -Takes one of \f[C]zlib\f[R], \f[C]lzo\f[R], \f[C]zstd\f[R], -\f[C]lz4\f[R], \f[C]xz\f[R] or a boolean value as argument. -If the latter is used compression is enabled/disabled and the default -algorithm is used. -In case of the \f[C]squashfs\f[R] output formats compression is implied, -but this option may be used to select the algorithm. -.TP -\f[B]\f[CB]CompressOutput=\f[B]\f[R], \f[B]\f[CB]--compress-output=\f[B]\f[R] -Configure compression for the resulting image or archive. -The argument can be either a boolean or a compression algorithm -(\f[C]xz\f[R], \f[C]zstd\f[R]). -\f[C]xz\f[R] compression is used by default. -Note that when applied to block device image types this means the image -cannot be started directly but needs to be decompressed first. -This also means that the \f[C]shell\f[R], \f[C]boot\f[R], \f[C]qemu\f[R] -verbs are not available when this option is used. -Implied for \f[C]tar\f[R] and \f[C]cpio\f[R]. -.TP -\f[B]\f[CB]Compress=\f[B]\f[R], \f[B]\f[CB]--compress=\f[B]\f[R] -Enable compression. -Using this option is equivalent to either \f[C]CompressFs=\f[R] or -\f[C]CompressOutput=\f[R]; the appropriate type of compression is -selected automatically. -.TP -\f[B]\f[CB]Mksquashfs=\f[B]\f[R], \f[B]\f[CB]--mksquashfs=\f[B]\f[R] -Set the path to the \f[C]mksquashfs\f[R] executable to use. -This is useful in case the parameters for the tool shall be augmented, -as the tool may be replaced by a script invoking it with the right -parameters, this way. -.TP -\f[B]\f[CB]QCow2=\f[B]\f[R], \f[B]\f[CB]--qcow2\f[B]\f[R] -Encode the resulting image as QEMU QCOW2 image. -This only applies to \f[C]gpt_ext4\f[R], \f[C]gpt_xfs\f[R], -\f[C]gpt_btrfs\f[R], \f[C]gpt_squashfs\f[R]. -QCOW2 images can be read natively by \f[C]qemu\f[R], but not by the -Linux kernel. -This means the \f[C]shell\f[R] and \f[C]boot\f[R] verbs are not -available when this option is used, however \f[C]qemu\f[R] will work. -.TP -\f[B]\f[CB]Hostname=\f[B]\f[R], \f[B]\f[CB]--hostname=\f[B]\f[R] -Set the image\[cq]s hostname to the specified name. -.TP -\f[B]\f[CB]ImageVersion=\f[B]\f[R], \f[B]\f[CB]--image-version=\f[B]\f[R] -Configure the image version. -This accepts any string, but it is recommended to specify a series of -dot separated components. -The version may also be configured in a file \f[C]mkosi.version\f[R] in -which case it may be conveniently managed via the \f[C]bump\f[R] verb or -the \f[C]--auto-bump\f[R] switch. -When specified the image version is included in the default output file -name, i.e.\ instead of \f[C]image.raw\f[R] the default will be -\f[C]image_0.1.raw\f[R] for version \f[C]0.1\f[R] of the image, and -similar. -The version is also passed via the \f[C]$IMAGE_VERSION\f[R] to any build -scripts invoked (which may be useful to patch it into -\f[C]/etc/os-release\f[R] or similar, in particular the -\f[C]IMAGE_VERSION=\f[R] field of it). -.TP -\f[B]\f[CB]ImageId=\f[B]\f[R], \f[B]\f[CB]--image-id=\f[B]\f[R] -Configure the image identifier. -This accepts a freeform string that shall be used to identify the image -with. -If set the default output file will be named after it (possibly suffixed -with the version). -If this option is used the root, \f[C]/usr/\f[R] and Verity partitions -in the image will have their labels set to this (possibly suffixed by -the image version). -The identifier is also passed via the \f[C]$IMAGE_ID\f[R] to any build -scripts invoked (which may be useful to patch it into -\f[C]/etc/os-release\f[R] or similar, in particular the -\f[C]IMAGE_ID=\f[R] field of it). -.TP -\f[B]\f[CB]WithUnifiedKernelImages=\f[B]\f[R], \f[B]\f[CB]--without-unified-kernel-images\f[B]\f[R] -If specified, mkosi does not build unified kernel images and instead -installs kernels with a separate initrd and boot loader config to the -efi or bootloader partition. -.TP -\f[B]\f[CB]HostonlyInitrd=\f[B]\f[R], \f[B]\f[CB]--hostonly-initrd\f[B]\f[R] -If specified, mkosi will run the tool to create the initrd such that a -non-generic initrd is created that will only be able to run on the -system mkosi is run on. -Currently mkosi uses dracut for all supported distributions except Clear -Linux and this option translates to enabling dracut\[cq]s hostonly -option. -.TP -\f[B]\f[CB]UsrOnly=\f[B]\f[R], \f[B]\f[CB]--usr-only\f[B]\f[R] -If specified, \f[C]mkosi\f[R] will only add the \f[C]/usr/\f[R] -directory tree (instead of the whole root file system) to the image. -This is useful for fully stateless systems that come up pristine on -every single boot, where \f[C]/etc/\f[R] and \f[C]/var/\f[R] are -populated by \f[C]systemd-tmpfiles\f[R]/\f[C]systemd-sysusers\f[R] and -related calls, or systems that are originally shipped without a root -file system, but where \f[C]systemd-repart\f[R] adds one on the first -boot. -.TP -\f[B]\f[CB]SplitArtifacts=\f[B]\f[R], \f[B]\f[CB]--split-artifacts\f[B]\f[R] -If specified and building an image with a partition table, also write -out the root file system partition, its Verity partition (if configured) -and the generated unified kernel (if configured) into separate output -files. -This is useful in A/B update scenarios where an existing disk image -shall be augmented with a new version of a root or \f[C]/usr\f[R] -partition along with its Verity partition and unified kernel. -.TP -\f[B]\f[CB]NoChown=\f[B]\f[R], \f[B]\f[CB]--no-chown\f[B]\f[R] -By default, if \f[C]mkosi\f[R] is run inside a \f[C]sudo\f[R] -environment all generated artifacts have their UNIX user/group ownership -changed to the user which invoked \f[C]sudo\f[R]. -With this option this may be turned off and all generated files are -owned by \f[C]root\f[R]. -.TP -\f[B]\f[CB]TarStripSELinuxContext=\f[B]\f[R], \f[B]\f[CB]--tar-strip-selinux-context\f[B]\f[R] -If running on a SELinux-enabled system (Fedora Linux, CentOS, Rocky -Linux, Alma Linux), files inside the container are tagged with SELinux -context extended attributes (\f[C]xattrs\f[R]), which may interfere with -host SELinux rules in building or further container import stages. -This option strips SELinux context attributes from the resulting tar -archive. -.TP -\f[B]\f[CB]MachineID=\f[B]\f[R], \f[B]\f[CB]--machine-id\f[B]\f[R] -Set the machine\[cq]s ID to the specified value. -If unused, a random ID will be used while building the image and the -final image will be shipped without a machine ID. -.SS [Content] Section -.TP -\f[B]\f[CB]BasePackages=\f[B]\f[R], \f[B]\f[CB]--base-packages\f[B]\f[R] -Takes a boolean or the special value \f[C]conditional\f[R]. -If true, automatically install packages to ensure basic functionality, -as appropriate for the given image type. -For example, \f[C]systemd\f[R] is always included, -\f[C]systemd-udev\f[R] and \f[C]dracut\f[R] if the image is bootable, -and so on. -If false, only packages specified with \f[C]Packages=\f[R] will be -installed. -If \f[C]conditional\f[R], the list of packages to install will be -extended with boolean dependencies (c.f. -https://rpm.org/user_doc/boolean_dependencies.html), to install specific -packages when \f[I]other\f[R] packages are in the list. -For example, \f[C]systemd-udev\f[R] may be automatically included if the -image is bootable and \f[C]systemd\f[R] is installed. -With this, various \[lq]base\[rq] packages still need to be specified if -they should be included, but the corresponding \[lq]extension\[rq] -packages will be added automatically when appropriate. -This feature depends on support in the package manager, so it is not -implemented for all distributions. -.TP -\f[B]\f[CB]Packages=\f[B]\f[R], \f[B]\f[CB]--package=\f[B]\f[R], \f[B]\f[CB]-p\f[B]\f[R] -Install the specified distribution packages (i.e.\ RPM, DEB, \&...) in -the image. -Takes a comma separated list of package specifications. -This option may be used multiple times in which case the specified -package lists are combined. -Packages specified this way will be installed both in the development -and the final image. -Use \f[C]BuildPackages=\f[R] to specify packages that shall only be used -for the image generated in the build image, but that shall not appear in -the final image. -The types and syntax of \[lq]package specifications\[rq] that are -allowed depend on the package installer (e.g.\ \f[C]dnf\f[R] or -\f[C]yum\f[R] for \f[C]rpm\f[R]-based distros or \f[C]apt\f[R] for -\f[C]deb\f[R]-based distros), but may include package names, package -names with version and/or architecture, package name globs, paths to -packages in the file system, package groups, and virtual provides, -including file paths. -To remove a package e.g.\ added by a \f[C]mkosi.default\f[R] -configuration file prepend the package name with \f[C]!\f[R]. -For example -p \[lq]!apache2\[rq] would remove the apache2 package. -To replace the apache2 package by the httpd package just add -p -\[lq]!apache2,httpd\[rq] to the command line arguments. -To remove all packages use \[lq]!*\[rq]. -Example: when using an distro that uses \f[C]dnf\f[R], -\f[C]Packages=meson libfdisk-devel.i686 git-* prebuilt/rpms/systemd-249-rc1.local.rpm /usr/bin/ld \[at]development-tools python3dist(mypy)\f[R] -would install the \f[C]meson\f[R] package (in the latest version), the -32-bit version of the \f[C]libfdisk-devel\f[R] package, all available -packages that start with the \f[C]git-\f[R] prefix, a \f[C]systemd\f[R] -rpm from the local file system, one of the packages that provides -\f[C]/usr/bin/ld\f[R], the packages in the \[lq]Development Tools\[rq] -group, and the package that contains the \f[C]mypy\f[R] python module. -.TP -\f[B]\f[CB]WithDocs=\f[B]\f[R], \f[B]\f[CB]--with-docs\f[B]\f[R] -Include documentation in the image built. -By default if the underlying distribution package manager supports it -documentation is not included in the image built. -The \f[C]$WITH_DOCS\f[R] environment variable passed to the -\f[C]mkosi.build\f[R] script indicates whether this option was used or -not. -.TP -\f[B]\f[CB]WithTests=\f[B]\f[R], \f[B]\f[CB]--without-tests\f[B]\f[R], \f[B]\f[CB]-T\f[B]\f[R] -If set to false (or when the command-line option is used), the -\f[C]$WITH_TESTS\f[R] environment variable is set to \f[C]0\f[R] when -the \f[C]mkosi.build\f[R] script is invoked. -This is supposed to be used by the build script to bypass any unit or -integration tests that are normally run during the source build process. -Note that this option has no effect unless the \f[C]mkosi.build\f[R] -build script honors it. -.TP -\f[B]\f[CB]Cache=\f[B]\f[R], \f[B]\f[CB]--cache=\f[B]\f[R] -Takes a path to a directory to use as package cache for the distribution -package manager used. -If this option is not used, but a \f[C]mkosi.cache/\f[R] directory is -found in the local directory it is automatically used for this purpose. -The directory configured this way is mounted into both the development -and the final image while the package manager is running. -.TP -\f[B]\f[CB]SkeletonTree=\f[B]\f[R], \f[B]\f[CB]--skeleton-tree=\f[B]\f[R] -Takes a path to a directory to copy into the OS tree before invoking the -package manager. -Use this to insert files and directories into the OS tree before the -package manager installs any packages. -If this option is not used, but the \f[C]mkosi.skeleton/\f[R] directory -is found in the local directory it is automatically used for this -purpose (also see the \[lq]Files\[rq] section below). -Instead of a directory, a tar file may be provided. -In this case it is unpacked into the OS tree before the package manager -is invoked. -This mode of operation allows setting permissions and file ownership -explicitly, in particular for projects stored in a version control -system such as \f[C]git\f[R] which retain full file ownership and access -mode metadata for committed files. -If the tar file \f[C]mkosi.skeleton.tar\f[R] is found in the local -directory it will be automatically used for this purpose. -.TP -\f[B]\f[CB]ExtraTree=\f[B]\f[R], \f[B]\f[CB]--extra-tree=\f[B]\f[R] -Takes a path to a directory to copy on top of the OS tree the package -manager generated. -Use this to override any default configuration files shipped with the -distribution. -If this option is not used, but the \f[C]mkosi.extra/\f[R] directory is -found in the local directory it is automatically used for this purpose -(also see the \[lq]Files\[rq] section below). -As with the skeleton tree logic above, instead of a directory, a tar -file may be provided too. -\f[C]mkosi.skeleton.tar\f[R] will be automatically used if found in the -local directory. -.TP -\f[B]\f[CB]CleanPackageMetadata=\f[B]\f[R], \f[B]\f[CB]--clean-package-metadata=\f[B]\f[R] -Enable/disable removal of package manager databases, caches, and logs at -the end of installation. -Can be specified as true, false, or \[lq]\f[C]auto\f[R]\[rq] (the -default). -With \[lq]\f[C]auto\f[R]\[rq], files will be removed if the respective -package manager executable is \f[I]not\f[R] present at the end of the -installation. -.TP -\f[B]\f[CB]RemoveFiles=\f[B]\f[R], \f[B]\f[CB]--remove-files=\f[B]\f[R] -Takes a comma-separated list of globs. -Files in the image matching the globs will be purged at the end. -.TP -\f[B]\f[CB]RemovePackages=\f[B]\f[R], \f[B]\f[CB]--remove-package=\f[B]\f[R] -Takes a comma-separated list of package specifications for removal, in -the same format as \f[C]Packages=\f[R]. -The removal will be performed as one of the last steps. -This step is skipped if \f[C]CleanPackageMetadata=no\f[R] is used. -This option is currently only implemented for distributions using -\f[C]dnf\f[R]. -.TP -\f[B]\f[CB]Environment=\f[B]\f[R], \f[B]\f[CB]--environment=\f[B]\f[R] -Adds variables to the environment that the -build/prepare/postinstall/finalize scripts are executed with. -Takes a space-separated list of variable assignments or just variable -names. -In the latter case, the values of those variables will be passed through -from the environment in which \f[C]mkosi\f[R] was invoked. -This option may be specified more than once, in which case all listed -variables will be set. -If the same variable is set twice, the later setting overrides the -earlier one. -.TP -\f[B]\f[CB]BuildSources=\f[B]\f[R], \f[B]\f[CB]--build-sources=\f[B]\f[R] -Takes a path to a source tree to copy into the development image, if the -build script is used. -This only applies if a build script is used, and defaults to the local -directory. -Use \f[C]SourceFileTransfer=\f[R] to configure how the files are -transferred from the host to the container image. -.TP -\f[B]\f[CB]BuildDirectory=\f[B]\f[R], \f[B]\f[CB]--build-dir=\f[B]\f[R] -Takes a path of a directory to use as build directory for build systems -that support out-of-tree builds (such as Meson). -The directory used this way is shared between repeated builds, and -allows the build system to reuse artifacts (such as object files, -executable, \&...) generated on previous invocations. -This directory is mounted into the development image when the build -script is invoked. -The build script can find the path to this directory in the -\f[C]$BUILDDIR\f[R] environment variable. -If this option is not specified, but a directory -\f[C]mkosi.builddir/\f[R] exists in the local directory it is -automatically used for this purpose (also see the \[lq]Files\[rq] -section below). -.TP -\f[B]\f[CB]IncludeDirectory=\f[B]\f[R], \f[B]\f[CB]--include-directory=\f[B]\f[R] -Takes a path of a directory to use as the include directory. -This directory is mounted at \f[C]/usr/include\f[R] when building the -build image and running the build script. -This means all include files installed to \f[C]/usr/include\f[R] will be -stored in this directory. -This is useful to make include files available on the host system for -use by language servers to provide code completion. -If this option is not specified, but a directory -\f[C]mkosi.includedir/\f[R] exists in the local directory, it is -automatically used for this purpose (also see the \[lq]Files\[rq] -section below). -.TP -\f[B]\f[CB]InstallDirectory=\f[B]\f[R], \f[B]\f[CB]--install-directory=\f[B]\f[R] -Takes a path of a directory to use as the install directory. -The directory used this way is shared between builds and allows the -build system to not have to reinstall files that were already installed -by a previous build and didn\[cq]t change. -The build script can find the path to this directory in the -\f[C]$DESTDIR\f[R] environment variable. -If this option is not specified, but a directory -\f[C]mkosi.installdir\f[R] exists in the local directory, it is -automatically used for this purpose (also see the \[lq]Files\[rq] -section below). -.TP -\f[B]\f[CB]BuildPackages=\f[B]\f[R], \f[B]\f[CB]--build-package=\f[B]\f[R] -Similar to \f[C]Packages=\f[R], but configures packages to install only -in the first phase of the build, into the development image. -This option should be used to list packages containing header files, -compilers, build systems, linkers and other build tools the -\f[C]mkosi.build\f[R] script requires to operate. -Note that packages listed here are only included in the image created -during the first phase of the build, and are absent in the final image. -Use \f[C]Packages=\f[R] to list packages that shall be included in both. -Packages are appended to the list. -Packages prefixed with \[lq]!\[rq] are removed from the list. -\[lq]!*\[rq] removes all packages from the list. -.TP -\f[B]\f[CB]Password=\f[B]\f[R], \f[B]\f[CB]--password=\f[B]\f[R] -Set the password of the \f[C]root\f[R] user. -By default the \f[C]root\f[R] account is locked. -If this option is not used, but a file \f[C]mkosi.rootpw\f[R] exists in -the local directory, the root password is automatically read from it. -.TP -\f[B]\f[CB]PasswordIsHashed=\f[B]\f[R], \f[B]\f[CB]--password-is-hashed\f[B]\f[R] -Indicate that the password supplied for the \f[C]root\f[R] user has -already been hashed, so that the string supplied with -\f[C]Password=\f[R] or \f[C]mkosi.rootpw\f[R] will be written to -\f[C]/etc/shadow\f[R] literally. -.TP -\f[B]\f[CB]Autologin=\f[B]\f[R], \f[B]\f[CB]--autologin\f[B]\f[R] -Enable autologin for the \f[C]root\f[R] user on \f[C]/dev/pts/0\f[R] -(nspawn), \f[C]/dev/tty1\f[R] (QEMU) and \f[C]/dev/ttyS0\f[R] (QEMU with -\f[C]QemuHeadless=yes\f[R]) by patching \f[C]/etc/pam.d/login\f[R]. -.TP -\f[B]\f[CB]SkipFinalPhase=\f[B]\f[R], \f[B]\f[CB]--skip-final-phase=\f[B]\f[R] -Causes the (second) final image build stage to be skipped. -This is useful in combination with a build script, for when you care -about the artifacts that were created locally in \f[C]$BUILDDIR\f[R], -but ultimately plan to discard the final image. -.TP -\f[B]\f[CB]BuildScript=\f[B]\f[R], \f[B]\f[CB]--build-script=\f[B]\f[R] -Takes a path to an executable that is used as build script for this -image. -If this option is used the build process will be two-phased instead of -single-phased. -The specified script is copied onto the development image and executed -inside an \f[C]systemd-nspawn\f[R] container environment. -If this option is not used, but the \f[C]mkosi.build\f[R] file found in -the local directory it is automatically used for this purpose (also see -the \[lq]Files\[rq] section below). -Specify an empty value to disable automatic detection. -.TP -\f[B]\f[CB]PrepareScript=\f[B]\f[R], \f[B]\f[CB]--prepare-script=\f[B]\f[R] -Takes a path to an executable that is invoked inside the image right -after installing the software packages. -It is the last step before the image is cached (if incremental mode is -enabled). -This script is invoked inside a \f[C]systemd-nspawn\f[R] container -environment, and thus does not have access to host resources. -If this option is not used, but an executable script -\f[C]mkosi.prepare\f[R] is found in the local directory, it is -automatically used for this purpose. -Specify an empty value to disable automatic detection. -.TP -\f[B]\f[CB]PostInstallationScript=\f[B]\f[R], \f[B]\f[CB]--postinst-script=\f[B]\f[R] -Takes a path to an executable that is invoked inside the final image -right after copying in the build artifacts generated in the first phase -of the build. -This script is invoked inside a \f[C]systemd-nspawn\f[R] container -environment, and thus does not have access to host resources. -If this option is not used, but an executable \f[C]mkosi.postinst\f[R] -is found in the local directory, it is automatically used for this -purpose. -Specify an empty value to disable automatic detection. -.TP -\f[B]\f[CB]FinalizeScript=\f[B]\f[R], \f[B]\f[CB]--finalize-script=\f[B]\f[R] -Takes a path to an executable that is invoked outside the final image -right after copying in the build artifacts generated in the first phase -of the build, and after having executed the \f[C]mkosi.postinst\f[R] -script (see \f[C]PostInstallationScript=\f[R]). -This script is invoked directly in the host environment, and hence has -full access to the host\[cq]s resources. -If this option is not used, but an executable \f[C]mkosi.finalize\f[R] -is found in the local directory, it is automatically used for this -purpose. -Specify an empty value to disable automatic detection. -.TP -\f[B]\f[CB]SourceFileTransfer=\f[B]\f[R], \f[B]\f[CB]--source-file-transfer=\f[B]\f[R] -Configures how the source file tree (as configured with -\f[C]BuildSources=\f[R]) is transferred into the container image during -the first phase of the build. -Takes one of \f[C]copy-all\f[R] (to copy all files from the source -tree), \f[C]copy-git-cached\f[R] (to copy only those files -\f[C]git ls-files --cached\f[R] lists), \f[C]copy-git-others\f[R] (to -copy only those files \f[C]git ls-files --others\f[R] lists), -\f[C]mount\f[R] to bind mount the source tree directly. -Defaults to \f[C]copy-git-cached\f[R] if a \f[C]git\f[R] source tree is -detected, otherwise \f[C]copy-all\f[R]. -When you specify \f[C]copy-git-more\f[R], it is the same as -\f[C]copy-git-cached\f[R], except it also includes the \f[C].git/\f[R] -directory. -.TP -\f[B]\f[CB]SourceFileTransferFinal=\f[B]\f[R], \f[B]\f[CB]--source-file-transfer-final=\f[B]\f[R] -Same as \f[C]SourceFileTransfer=\f[R], but for the final image instead -of the build image. -Takes the same values as \f[C]SourceFileFransfer=\f[R] except -\f[C]mount\f[R]. -By default, sources are not copied into the final image. -.TP -\f[B]\f[CB]SourceResolveSymlinks=\f[B]\f[R], \f[B]\f[CB]--source-resolve-symlinks\f[B]\f[R] -If given, any symbolic links in the source file tree are resolved and -the file contents are copied to the build image. -If not given, they are left as symbolic links. -This only applies if \f[C]SourceFileTransfer=\f[R] is -\f[C]copy-all\f[R]. -Defaults to leaving them as symbolic links. -.TP -\f[B]\f[CB]SourceResolveSymlinksFinal=\f[B]\f[R], \f[B]\f[CB]--source-resolve-symlinks-final\f[B]\f[R] -Same as \f[C]SourceResolveSymlinks=\f[R], but for the final image -instead of the build image. -.TP -\f[B]\f[CB]WithNetwork=\f[B]\f[R], \f[B]\f[CB]--with-network\f[B]\f[R] -When true, enables network connectivity while the build script -\f[C]mkosi.build\f[R] is invoked. -By default, the build script runs with networking turned off. -The \f[C]$WITH_NETWORK\f[R] environment variable is passed to the -\f[C]mkosi.build\f[R] build script indicating whether the build is done -with or without network. -If specified as \f[C]never\f[R], the package manager is instructed not -to contact the network for updating package data. -This provides a minimal level of reproducibility, as long as the package -data cache is already fully populated. -.TP -\f[B]\f[CB]Settings=\f[B]\f[R], \f[B]\f[CB]--settings=\f[B]\f[R] -Specifies a \f[C].nspawn\f[R] settings file for \f[C]systemd-nspawn\f[R] -to use in the \f[C]boot\f[R] and \f[C]shell\f[R] verbs, and to place -next to the generated image file. -This is useful to configure the \f[C]systemd-nspawn\f[R] environment -when the image is run. -If this setting is not used but an \f[C]mkosi.nspawn\f[R] file found in -the local directory it is automatically used for this purpose. -.SS [Partitions] Section -.TP -\f[B]\f[CB]BaseImage=\f[B]\f[R], \f[B]\f[CB]--base-image=\f[B]\f[R] -Use the specified directory or file system image as the base image, and -create the output image that consists only of changes from this base. -The base image is attached as the lower file system in an overlayfs -structure, and the output filesystem becomes the upper layer, initially -empty. -Thus files that are not modified compared to the base image are not -present in the output image. -This option may be used to create systemd \[lq]system extensions\[rq] or -portable services. -See https://systemd.io/PORTABLE_SERVICES/#extension-images for more -information. -.TP -\f[B]\f[CB]RootSize=\f[B]\f[R], \f[B]\f[CB]--root-size=\f[B]\f[R] -Takes a size in bytes for the root file system. -The specified numeric value may be suffixed with \f[C]K\f[R], -\f[C]M\f[R], \f[C]G\f[R] to indicate kilo-, mega- and gigabytes (all to -the base of 1024). -This applies to output formats \f[C]gpt_ext4\f[R], \f[C]gpt_xfs\f[R], -\f[C]gpt_btrfs\f[R]. -Defaults to 3G. -.TP -\f[B]\f[CB]ESPSize=\f[B]\f[R], \f[B]\f[CB]--esp-size=\f[B]\f[R] -Similar to \f[C]RootSize=\f[R], configures the size of the UEFI System -Partition (ESP). -This is only relevant if the \f[C]Bootable=\f[R] option is used to -generate a bootable image. -Defaults to 256 MB. -.TP -\f[B]\f[CB]SwapSize=\f[B]\f[R], \f[B]\f[CB]--swap-size=\f[B]\f[R] -Similar to \f[C]RootSize=\f[R], configures the size of a swap partition -on the image. -If omitted, no swap partition is created. -.TP -\f[B]\f[CB]HomeSize=\f[B]\f[R], \f[B]\f[CB]--home-size=\f[B]\f[R] -Similar to \f[C]RootSize=\f[R], configures the size of the -\f[C]/home\f[R] partition. -If omitted, no separate \f[C]/home\f[R] partition is created. -.TP -\f[B]\f[CB]SrvSize=\f[B]\f[R], \f[B]\f[CB]--srv-size=\f[B]\f[R] -Similar to \f[C]RootSize=\f[R], configures the size of the -\f[C]/srv\f[R] partition. -If omitted, no separate \f[C]/srv\f[R] partition is created. -.SS [Validation] Section -.TP -\f[B]\f[CB]Checksum=\f[B]\f[R], \f[B]\f[CB]--checksum\f[B]\f[R] -Generate a \f[C]SHA256SUMS\f[R] file of all generated artifacts after -the build is complete. -.TP -\f[B]\f[CB]Sign=\f[B]\f[R], \f[B]\f[CB]--sign\f[B]\f[R] -Sign the generated \f[C]SHA256SUMS\f[R] using \f[C]gpg\f[R] after -completion. -.TP -\f[B]\f[CB]Key=\f[B]\f[R], \f[B]\f[CB]--key=\f[B]\f[R] -Select the \f[C]gpg\f[R] key to use for signing \f[C]SHA256SUMS\f[R]. -This key must be already present in the \f[C]gpg\f[R] keyring. -.TP -\f[B]\f[CB]BMap=\f[B]\f[R], \f[B]\f[CB]--bmap\f[B]\f[R] -Generate a \f[C]bmap\f[R] file for usage with \f[C]bmaptool\f[R] from -the generated image file. -.SS [Host] Section -.TP -\f[B]\f[CB]ExtraSearchPaths=\f[B]\f[R], \f[B]\f[CB]--extra-search-paths=\f[B]\f[R] -List of colon-separated paths to look for tools in, before using the -regular \f[C]$PATH\f[R] search path. -.TP -\f[B]\f[CB]QemuHeadless=\f[B]\f[R], \f[B]\f[CB]--qemu-headless=\f[B]\f[R] -When used with the \f[C]build\f[R] verb, this option adds -\f[C]console=ttyS0\f[R] to the image\[cq]s kernel command line and sets -the terminal type of the serial console in the image to the terminal -type of the host (more specifically, the value of the \f[C]$TERM\f[R] -environment variable passed to mkosi). -This makes sure that all terminal features such as colors and shortcuts -still work as expected when connecting to the qemu VM over the serial -console (for example via \f[C]-nographic\f[R]). -When used with the \f[C]qemu\f[R] verb, this option adds the -\f[C]-nographic\f[R] option to \f[C]qemu\f[R]\[cq]s command line so qemu -starts a headless vm and connects to its serial console from the current -terminal instead of launching the VM in a separate window. -.TP -\f[B]\f[CB]QemuSmp=\f[B]\f[R], \f[B]\f[CB]--qemu-smp=\f[B]\f[R] -When used with the \f[C]qemu\f[R] verb, this options sets -\f[C]qemu\f[R]\[cq]s \f[C]-smp\f[R] argument which controls the number -of guest\[cq]s CPUs. -Defaults to \f[C]2\f[R]. -.TP -\f[B]\f[CB]QemuMem=\f[B]\f[R], \f[B]\f[CB]--qemu-mem=\f[B]\f[R] -When used with the \f[C]qemu\f[R] verb, this options sets -\f[C]qemu\f[R]\[cq]s \f[C]-m\f[R] argument which controls the amount of -guest\[cq]s RAM. -Defaults to \f[C]1G\f[R]. -.TP -\f[B]\f[CB]QemuKvm=\f[B]\f[R], \f[B]\f[CB]--qemu-kvm=\f[B]\f[R] -When used with the \f[C]qemu\f[R] verb, this option specifies whether -QEMU should use KVM acceleration. -Defaults to yes if the host machine supports KVM acceleration, no -otherwise. -.TP -\f[B]\f[CB]NspawnKeepUnit=\f[B]\f[R], \f[B]\f[CB]--nspawn-keep-unit\f[B]\f[R] -When used, this option instructs underlying calls of systemd-nspawn to -use the current unit scope, instead of creating a dedicated transcient -scope unit for the containers. -This option should be used when mkosi is run by a service unit. -.TP -\f[B]\f[CB]Netdev=\f[B]\f[R], \f[B]\f[CB]--netdev\f[B]\f[R] -When used with the boot or qemu verbs, this option creates a virtual -ethernet link between the host and the container/VM. -The host interface is automatically picked up by systemd-networkd as -documented in systemd-nspawn\[cq]s man page: -https://www.freedesktop.org/software/systemd/man/systemd-nspawn.html#-n -.TP -\f[B]\f[CB]Ephemeral=\f[B]\f[R], \f[B]\f[CB]--ephemeral\f[B]\f[R] -When used with the \f[C]shell\f[R], \f[C]boot\f[R], or \f[C]qemu\f[R] -verbs, this option runs the specified verb on a temporary snapshot of -the output image that is removed immediately when the container -terminates. -Taking the temporary snapshot is more efficient on file systems that -support subvolume snapshots or `reflinks' natively (\[lq]btrfs\[rq] or -new \[lq]xfs\[rq]) than on more traditional file systems that do not -(\[lq]ext4\[rq]). -.TP -\f[B]\f[CB]Ssh=\f[B]\f[R], \f[B]\f[CB]--ssh\f[B]\f[R] -If specified, installs and enables \f[C]sshd\f[R] in the final image and -generates a SSH keypair and adds the public key to root\[cq]s -\f[C]authorized_keys\f[R] in the final image. -The private key is stored in mkosi\[cq]s output directory. -When building with this option and running the image using -\f[C]mkosi boot\f[R] or \f[C]mkosi qemu\f[R], the \f[C]mkosi ssh\f[R] -command can be used to connect to the container/VM via SSH. -.TP -\f[B]\f[CB]SshKey=\f[B]\f[R], \f[B]\f[CB]--ssh-key=\f[B]\f[R] -If specified, use the given private key when connecting to the guest -machine via \f[C]mkosi ssh\f[R]. -This requires the public key counterpart to be present in the same -location, suffixed with \f[C].pub\f[R] (as done by -\f[C]ssh-keygen\f[R]). -If this option is not present, \f[C]mkosi\f[R] generates a new key pair -automatically. -.TP -\f[B]\f[CB]SshAgent=\f[B]\f[R], \f[B]\f[CB]--ssh-agent=\f[B]\f[R] -If specified as a path, use the given socket to connect to the ssh agent -when building an image and when connecting via \f[C]mkosi ssh\f[R] -instead of hard-coding a key. -If specified as \f[C]true\f[R], \f[C]$SSH_AUTH_SOCK\f[R] will be parsed -instead (hint: use \f[C]sudo\f[R] with \f[C]-E\f[R]). -The keys listed by \f[C]ssh-add -L\f[R] will be installed as authorized -keys in the built image. -The \f[C]ssh\f[R] invocation done by \f[C]mkosi ssh\f[R] will inherit -\f[C]$SSH_AUTH_SOCK\f[R] for authentication purposes. -.TP -\f[B]\f[CB]SshPort=\f[B]\f[R], \f[B]\f[CB]--ssh-port=\f[B]\f[R] -In the image, sshd will be configured to listen on this port. -\f[C]mkosi ssh\f[R] will connect to this port. -.TP -\f[B]\f[CB]SshTimeout=\f[B]\f[R], \f[B]\f[CB]--ssh-timeout=\f[B]\f[R] -When used with the \f[C]ssh\f[R] verb, \f[C]mkosi\f[R] will attempt to -retry the SSH connection up to given timeout (in seconds) in case it -fails. -This option is useful mainly in scripted environments where the -\f[C]qemu\f[R] and \f[C]ssh\f[R] verbs are used in a quick succession -and the virtual device might not get enough time to configure itself. -.SS Commandline-only Options -.PP -Those settings cannot be configured in the configuration files. -.TP -\f[B]\f[CB]--directory=\f[B]\f[R], \f[B]\f[CB]-C\f[B]\f[R] -Takes a path to a directory. -\f[C]mkosi\f[R] switches to this directory before doing anything. -Note that the various \f[C]mkosi.*\f[R] files are searched for only -after changing to this directory, hence using this option is an -effective way to build a project located in a specific directory. -.TP -\f[B]\f[CB]--default=\f[B]\f[R] -Loads additional settings from the specified settings file. -Most command line options may also be configured in a settings file. -See the table below to see which command line options match which -settings file option. -If this option is not used, but a file \f[C]mkosi.default\f[R] is found -in the local directory it is automatically used for this purpose. -If a setting is configured both on the command line and in the settings -file, the command line generally wins, except for options taking lists -in which case both lists are combined. -.TP -\f[B]\f[CB]--all\f[B]\f[R], \f[B]\f[CB]-a\f[B]\f[R] -Iterate through all files \f[C]mkosi.*\f[R] in the -\f[C]mkosi.files/\f[R] subdirectory, and build each as if -\f[C]--default=mkosi.files/mkosi.\&...\f[R] was invoked. -This is a quick way to build a large number of images in one go. -Any additional specified command line arguments override the relevant -options in all files processed this way. -.TP -\f[B]\f[CB]--all-directory=\f[B]\f[R] -If specified, overrides the directory the \f[C]--all\f[R] logic -described above looks for settings files in. -If unspecified, defaults to \f[C]mkosi.files/\f[R] in the current -working directory. -.TP -\f[B]\f[CB]--incremental\f[B]\f[R], \f[B]\f[CB]-i\f[B]\f[R] -Enable incremental build mode. -This only applies if the two-phase \f[C]mkosi.build\f[R] build script -logic is used. -In this mode, a copy of the OS image is created immediately after all OS -packages are unpacked but before the \f[C]mkosi.build\f[R] script is -invoked in the development container. -Similarly, a copy of the final image is created immediately before the -build artifacts from the \f[C]mkosi.build\f[R] script are copied in. -On subsequent invocations of \f[C]mkosi\f[R] with the \f[C]-i\f[R] -switch these cached images may be used to skip the OS package unpacking, -thus drastically speeding up repetitive build times. -Note that when this is used and a pair of cached incremental images -exists they are not automatically regenerated, even if options such as -\f[C]Packages=\f[R] are modified. -In order to force rebuilding of these cached images, combine -\f[C]-i\f[R] with \f[C]-ff\f[R] to ensure cached images are first -removed and then re-created. -.TP -\f[B]\f[CB]--debug=\f[B]\f[R] -Enable additional debugging output. -Takes a comma-separated list of arguments specifying the area of -interest. -Pass any invalid value (e.g.\ empty) to list currently accepted values. -.TP -\f[B]\f[CB]--version\f[B]\f[R] -Show package version. -.TP -\f[B]\f[CB]--help\f[B]\f[R], \f[B]\f[CB]-h\f[B]\f[R] -Show brief usage information. -.TP -\f[B]\f[CB]--auto-bump\f[B]\f[R], \f[B]\f[CB]-B\f[B]\f[R] -If specified, after each successful build the the version is bumped in a -fashion equivalent to the \f[C]bump\f[R] verb, in preparation for the -next build. -This is useful for simple, linear version management: each build in a -series will have a version number one higher then the previous one. -.SS Supported distributions -.PP -Images may be created containing installations of the following -operating systems: -.IP \[bu] 2 -\f[I]Fedora Linux\f[R] -.IP \[bu] 2 -\f[I]Debian\f[R] -.IP \[bu] 2 -\f[I]Ubuntu\f[R] -.IP \[bu] 2 -\f[I]Arch Linux\f[R] -.IP \[bu] 2 -\f[I]openSUSE\f[R] -.IP \[bu] 2 -\f[I]Mageia\f[R] -.IP \[bu] 2 -\f[I]CentOS\f[R] -.IP \[bu] 2 -\f[I]Clear Linux\f[R] -.IP \[bu] 2 -\f[I]Photon\f[R] -.IP \[bu] 2 -\f[I]OpenMandriva\f[R] -.IP \[bu] 2 -\f[I]Rocky Linux\f[R] -.IP \[bu] 2 -\f[I]Alma Linux\f[R] -.IP \[bu] 2 -\f[I]Gentoo\f[R] -.PP -In theory, any distribution may be used on the host for building images -containing any other distribution, as long as the necessary tools are -available. -Specifically, any distribution that packages \f[C]debootstrap\f[R] may -be used to build \f[I]Debian\f[R] or \f[I]Ubuntu\f[R] images. -Any distribution that packages \f[C]dnf\f[R] may be used to build -\f[I]Fedora Linux\f[R], \f[I]Mageia\f[R] or \f[I]OpenMandriva\f[R] -images. -Any distro that packages \f[C]pacstrap\f[R] may be used to build -\f[I]Arch Linux\f[R] images. -Any distribution that packages \f[C]zypper\f[R] may be used to build -\f[I]openSUSE\f[R] images. -Any distribution that packages \f[C]yum\f[R] (or the newer replacement -\f[C]dnf\f[R]) may be used to build \f[I]CentOS\f[R], \f[I]Rocky -Linux\f[R], or \f[I]Alma Linux\f[R] images. -Any distribution that packages \f[C]emerge\f[R] may be used to build -\f[I]Gentoo\f[R] images. -.PP -Currently, \f[I]Fedora Linux\f[R] packages all relevant tools as of -Fedora 28. -.SS Compatibility -.PP -Legacy concepts are avoided: generated images use \f[I]GPT\f[R] disk -labels (and no \f[I]MBR\f[R] labels), and only systemd-based images may -be generated. -.PP -All generated \f[I]GPT\f[R] disk images may be booted in a local -container directly with: -.IP -.nf -\f[C] -systemd-nspawn -bi image.raw -\f[R] -.fi -.PP -Additionally, bootable \f[I]GPT\f[R] disk images (as created with the -\f[C]--bootable\f[R] flag) work when booted directly by \f[I]EFI\f[R] -and \f[I]BIOS\f[R] systems, for example in \f[I]KVM\f[R] via: -.IP -.nf -\f[C] -qemu-kvm -m 512 -smp 2 -bios /usr/share/edk2/ovmf/OVMF_CODE.fd -drive format=raw,file=image.raw -\f[R] -.fi -.PP -\f[I]EFI\f[R] bootable \f[I]GPT\f[R] images are larger than plain -\f[I]GPT\f[R] images, as they additionally carry an \f[I]EFI\f[R] system -partition containing a boot loader, as well as a kernel, kernel modules, -udev and more. -.PP -All directory or btrfs subvolume images may be booted directly with: -.IP -.nf -\f[C] -systemd-nspawn -bD image -\f[R] -.fi -.SH Files -.PP -To make it easy to build images for development versions of your -projects, mkosi can read configuration data from the local directory, -under the assumption that it is invoked from a \f[I]source\f[R] tree. -Specifically, the following files are used if they exist in the local -directory: -.IP \[bu] 2 -The \f[B]\f[CB]mkosi.default\f[B]\f[R] file provides the default -configuration for the image building process. -For example, it may specify the distribution to use (\f[C]fedora\f[R], -\f[C]ubuntu\f[R], \f[C]debian\f[R], \f[C]arch\f[R], \f[C]opensuse\f[R], -\f[C]mageia\f[R], \f[C]openmandriva\f[R], \f[C]gentoo\f[R]) for the -image, or additional distribution packages to install. -Note that all options encoded in this configuration file may also be set -on the command line, and this file is hence little more than a way to -make sure invoking \f[C]mkosi\f[R] without further parameters in your -\f[I]source\f[R] tree is enough to get the right image of your choice -set up. -.RS 2 -.PP -Additionally, if a \f[I]\f[CI]mkosi.default.d/\f[I]\f[R] directory -exists, each file in it is loaded in the same manner adding/overriding -the values specified in \f[C]mkosi.default\f[R]. -If \f[C]mkosi.default.d/\f[R] contains a directory named after the -distribution being built, each file in that directory is also processed. -.PP -The file format is inspired by Windows \f[C].ini\f[R] files and supports -multi-line assignments: any line with initial whitespace is considered a -continuation line of the line before. -Command-line arguments, as shown in the help description, have to be -included in a configuration block (e.g.\ \[lq]\f[C][Content]\f[R]\[rq]) -corresponding to the argument group (e.g.\ \[lq]\f[C]Content\f[R]\[rq]), -and the argument gets converted as follows: -\[lq]\f[C]--with-network\f[R]\[rq] becomes -\[lq]\f[C]WithNetwork=yes\f[R]\[rq]. -For further details see the table above. -.RE -.IP \[bu] 2 -The \f[B]\f[CB]mkosi.skeleton/\f[B]\f[R] directory or -\f[B]\f[CB]mkosi.skeleton.tar\f[B]\f[R] archive may be used to insert -files into the image. -The files are copied \f[I]before\f[R] the distribution packages are -installed into the image. -This allows creation of files that need to be provided early, for -example to configure the package manager or set systemd presets. -.RS 2 -.PP -When using the directory, file ownership is not preserved: all files -copied will be owned by root. -To preserve ownership, use a tar archive. -.RE -.IP \[bu] 2 -The \f[B]\f[CB]mkosi.extra/\f[B]\f[R] directory or -\f[B]\f[CB]mkosi.extra.tar\f[B]\f[R] archive may be used to insert -additional files into the image, on top of what the distribution -includes in its packages. -They are similar to \f[C]mkosi.skeleton/\f[R] and -\f[C]mkosi.skeleton.tar\f[R], but the files are copied into the -directory tree of the image \f[I]after\f[R] the OS was installed. -.RS 2 -.PP -When using the directory, file ownership is not preserved: all files -copied will be owned by root. -To preserve ownership, use a tar archive. -.RE -.IP \[bu] 2 -\f[B]\f[CB]mkosi.build\f[B]\f[R] may be an executable script. -If it exists, the image will be built twice: the first iteration will be -the \f[I]development\f[R] image, the second iteration will be the -\f[I]final\f[R] image. -The \f[I]development\f[R] image is used to build the project in the -current working directory (the \f[I]source\f[R] tree). -For that the whole directory is copied into the image, along with the -\f[C]mkosi.build\f[R] script. -The script is then invoked inside the image (via -\f[C]systemd-nspawn\f[R]), with \f[C]$SRCDIR\f[R] pointing to the -\f[I]source\f[R] tree. -\f[C]$DESTDIR\f[R] points to a directory where the script should place -any files generated it would like to end up in the \f[I]final\f[R] -image. -Note that \f[C]make\f[R]/\f[C]automake\f[R]/\f[C]meson\f[R] based build -systems generally honor \f[C]$DESTDIR\f[R], thus making it very natural -to build \f[I]source\f[R] trees from the build script. -After the \f[I]development\f[R] image was built and the build script ran -inside of it, it is removed again. -After that the \f[I]final\f[R] image is built, without any -\f[I]source\f[R] tree or build script copied in. -However, this time the contents of \f[C]$DESTDIR\f[R] are added into the -image. -.RS 2 -.PP -When the source tree is copied into the \f[I]build\f[R] image, all files -are copied, except for \f[C]mkosi.builddir/\f[R], \f[C]mkosi.cache/\f[R] -and \f[C]mkosi.output/\f[R]. -That said, \f[C].gitignore\f[R] is respected if the source tree is a -\f[C]git\f[R] checkout. -If multiple different images shall be built from the same source tree it -is essential to exclude their output files from this copy operation, as -otherwise a version of an image built earlier might be included in a -later build, which is usually not intended. -An alternative to excluding these built images via \f[C].gitignore\f[R] -entries is to use the \f[C]mkosi.output/\f[R] directory, which is an -easy way to exclude all build artifacts. -.PP -The \f[C]$MKOSI_DEFAULT\f[R] environment variable will be set inside of -this script so that you know which \f[C]mkosi.default\f[R] (if any) was -passed in. -.RE -.IP \[bu] 2 -The \f[B]\f[CB]mkosi.prepare\f[B]\f[R] script is invoked directly after -the software packages are installed, from within the image context, if -it exists. -It is once called for the \f[I]development\f[R] image (if this is -enabled, see above) with the \[lq]build\[rq] command line parameter, -right before copying the extra tree. -It is called a second time for the \f[I]final\f[R] image with the -\[lq]final\[rq] command line parameter. -This script has network access and may be used to install packages from -other sources than the distro\[cq]s package manager -(e.g.\ \f[C]pip\f[R], \f[C]npm\f[R], \&...), after all software packages -are installed but before the image is cached (if incremental mode is -enabled). -This script is executed within \f[C]$SRCDIR\f[R]. -In contrast to a general purpose installation, it is safe to install -packages to the system (\f[C]pip install\f[R], -\f[C]npm install -g\f[R]) instead of in \f[C]$SRCDIR\f[R] itself -because the build image is only used for a single project and can easily -be thrown away and rebuilt so there\[cq]s no risk of conflicting -dependencies and no risk of polluting the host system. -.IP \[bu] 2 -The \f[B]\f[CB]mkosi.postinst\f[B]\f[R] script is invoked as the -penultimate step of preparing an image, from within the image context, -if it exists. -It is called first for the \f[I]development\f[R] image (if this is -enabled, see above) with the \[lq]build\[rq] command line parameter, -right before invoking the build script. -It is called a second time for the \f[I]final\f[R] image with the -\[lq]final\[rq] command line parameter, right before the image is -considered complete. -This script may be used to alter the images without any restrictions, -after all software packages and built sources have been installed. -Note that this script is executed directly in the image context with the -final root directory in place, without any -\f[C]$SRCDIR\f[R]/\f[C]$DESTDIR\f[R] setup. -.IP \[bu] 2 -The \f[B]\f[CB]mkosi.finalize\f[B]\f[R] script, if it exists, is invoked -as last step of preparing an image, from the host system. -It is once called for the \f[I]development\f[R] image (if this is -enabled, see above) with the \[lq]build\[rq] command line parameter, as -the last step before invoking the build script, after the -\f[C]mkosi.postinst\f[R] script is invoked. -It is called the second time with the \[lq]final\[rq] command line -parameter as the last step before the image is considered complete. -The environment variable \f[C]$BUILDROOT\f[R] points to the root -directory of the installation image. -Additional verbs may be added in the future, the script should be -prepared for that. -This script may be used to alter the images without any restrictions, -after all software packages and built sources have been installed. -This script is more flexible than \f[C]mkosi.postinst\f[R] in two -regards: it has access to the host file system so it\[cq]s easier to -copy in additional files or to modify the image based on external -configuration, and the script is run in the host, so it can be used even -without emulation even if the image has a foreign architecture. -.IP \[bu] 2 -The \f[B]\f[CB]mkosi.mksquashfs-tool\f[B]\f[R] script, if it exists, -will be called wherever \f[C]mksquashfs\f[R] would be called. -.IP \[bu] 2 -The \f[B]\f[CB]mkosi.nspawn\f[B]\f[R] nspawn settings file will be -copied into the same place as the output image file, if it exists. -This is useful since nspawn looks for settings files next to image files -it boots, for additional container runtime settings. -.IP \[bu] 2 -The \f[B]\f[CB]mkosi.cache/\f[B]\f[R] directory, if it exists, is -automatically used as package download cache, in order to speed repeated -runs of the tool. -.IP \[bu] 2 -The \f[B]\f[CB]mkosi.builddir/\f[B]\f[R] directory, if it exists, is -automatically used as out-of-tree build directory, if the build commands -in the \f[C]mkosi.build\f[R] script support it. -Specifically, this directory will be mounted into the build container, -and the \f[C]$BUILDDIR\f[R] environment variable will be set to it when -the build script is invoked. -The build script may then use this directory as build directory, for -automake-style or ninja-style out-of-tree builds. -This speeds up builds considerably, in particular when \f[C]mkosi\f[R] -is used in incremental mode (\f[C]-i\f[R]): not only the disk images, -but also the build tree is reused between subsequent invocations. -Note that if this directory does not exist the \f[C]$BUILDDIR\f[R] -environment variable is not set, and it is up to build script to decide -whether to do in in-tree or an out-of-tree build, and which build -directory to use. -.IP \[bu] 2 -The \f[B]\f[CB]mkosi.includedir/\f[B]\f[R] directory, if it exists, is -automatically used as an out-of-tree include directory for header files. -Specifically, it will be mounted in the build container at -\f[C]/usr/include/\f[R] when building the build image and when running -the build script. -After building the (cached) build image, this directory will contain all -the files installed to \f[C]/usr/include\f[R]. -Language servers or other tools can use these files to provide a better -editing experience for developers working on a project. -.IP \[bu] 2 -The \f[B]\f[CB]mkosi.installdir/\f[B]\f[R] directory, if it exists, is -automatically used as the install directory. -Specifically, this directory will be mounted into the container at -\f[C]/root/dest\f[R] when running the build script. -After running the build script, the contents of this directory are -installed into the final image. -This is useful to cache the install step of the build. -If used, subsequent builds will only have to reinstall files that have -changed since the previous build. -.IP \[bu] 2 -The \f[B]\f[CB]mkosi.rootpw\f[B]\f[R] file can be used to provide the -password or hashed password (if \f[C]--password-is-hashed\f[R] is set) -for the root user of the image. -The password may optionally be followed by a newline character which is -implicitly removed. -The file must have an access mode of 0600 or less. -If this file does not exist, the distribution\[cq]s default root -password is set (which usually means access to the root user is -blocked). -.IP \[bu] 2 -The \f[B]\f[CB]mkosi.passphrase\f[B]\f[R] file provides the passphrase -to use when LUKS encryption is selected. -It should contain the passphrase literally, and not end in a newline -character (i.e.\ in the same format as cryptsetup and -\f[C]/etc/crypttab\f[R] expect the passphrase files). -The file must have an access mode of 0600 or less. -If this file does not exist and encryption is requested, the user is -queried instead. -.IP \[bu] 2 -The \f[B]\f[CB]mkosi.secure-boot.crt\f[B]\f[R] and -\f[B]\f[CB]mkosi.secure-boot.key\f[B]\f[R] files contain an X.509 -certificate and PEM private key to use when UEFI SecureBoot support is -enabled. -All EFI binaries included in the image\[cq]s ESP are signed with this -key, as a late step in the build process. -.IP \[bu] 2 -The \f[B]\f[CB]mkosi.output/\f[B]\f[R] directory will be used for all -build artifacts, if the image output path is not configured (i.e.\ no -\f[C]--output=\f[R] setting specified), or configured to a filename -(i.e.\ a path containing no \f[C]/\f[R] character). -This includes the image itself, the root hash file in case Verity is -used, the checksum and its signature if that\[cq]s enabled, and the -nspawn settings file if there is any. -Note that this directory is not used if the image output path contains -at least one slash, and has no effect in that case. -This setting is particularly useful if multiple different images shall -be built from the same working directory, as otherwise the build result -of a preceding run might be copied into a build image as part of the -source tree (see above). -.IP \[bu] 2 -The \f[B]\f[CB]mkosi.reposdir/\f[B]\f[R] directory, if it exists, is -automatically used as the repository directory for extra repository -files. -See the \f[C]RepositoryDirectory\f[R] option for more information. -.PP -All these files are optional. -.PP -Note that the location of all these files may also be configured during -invocation via command line switches, and as settings in -\f[C]mkosi.default\f[R], in case the default settings are not acceptable -for a project. -.SH BUILD PHASES -.PP -If no build script \f[C]mkosi.build\f[R] (see above) is used the build -consists of a single phase only: the final image is generated as the -combination of \f[C]mkosi.skeleton/\f[R] (see above), the unpacked -distribution packages and \f[C]mkosi.extra/\f[R]. -.PP -If a build script \f[C]mkosi.build\f[R] is used the build consists of -two phases: in the the first \f[C]development\f[R] phase an image that -includes necessary build tools (i.e.\ the combination of -\f[C]Packages=\f[R] and \f[C]BuildPackages=\f[R] is installed) is -generated (i.e.\ the combination of \f[C]mkosi.skeleton/\f[R] and -unpacked distribution packages). -Into this image the source tree is copied and \f[C]mkosi.build\f[R] -executed. -The artifacts the \f[C]mkosi.build\f[R] generates are saved. -Then, the second \f[C]final\f[R] phase starts: an image that excludes -the build tools (i.e.\ only \f[C]Packages=\f[R] is installed, -\f[C]BuildPackages=\f[R] is not) is generated. -This time the build artifacts saved from the first phase are copied in, -and \f[C]mkosi.extra\f[R] copied on top, thus generating the final -image. -.PP -The two-phased approach ensures that source tree is executed in a clean -and comprehensive environment, while at the same the final image remains -minimal and contains only those packages necessary at runtime, but -avoiding those necessary at build-time. -.PP -Note that only the package cache \f[C]mkosi.cache/\f[R] is shared -between the two phases. -The distribution package manager is executed exactly once in each phase, -always starting from a directory tree that is populated with -\f[C]mkosi.skeleton\f[R] but nothing else. -.SH CACHING -.PP -\f[C]mkosi\f[R] supports three different caches for speeding up -repetitive re-building of images. -Specifically: -.IP "1." 3 -The package cache of the distribution package manager may be cached -between builds. -This is configured with the \f[C]--cache=\f[R] option or the -\f[C]mkosi.cache/\f[R] directory. -This form of caching relies on the distribution\[cq]s package manager, -and caches distribution packages (RPM, DEB, \&...) after they are -downloaded, but before they are unpacked. -.IP "2." 3 -If an \f[C]mkosi.build\f[R] script is used, by enabling incremental -build mode with \f[C]--incremental\f[R], a cached copy of the -development and final images can be made immediately before the build -sources are copied in (for the development image) or the artifacts -generated by \f[C]mkosi.build\f[R] are copied in (in case of the final -image). -This form of caching allows bypassing the time-consuming package -unpacking step of the distribution package managers, but is only -effective if the list of packages to use remains stable, but the build -sources and its scripts change regularly. -Note that this cache requires manual flushing: whenever the package list -is modified the cached images need to be explicitly removed before the -next re-build, using the \f[C]-f\f[R] switch. -.IP "3." 3 -Finally, between multiple builds the build artifact directory may be -shared, using the \f[C]mkosi.builddir/\f[R] directory. -This directory allows build systems such as Meson to reuse already -compiled sources from a previous built, thus speeding up the build -process of the \f[C]mkosi.build\f[R] build script. -.PP -The package cache (i.e.\ the first item above) is unconditionally -useful. -The latter two caches only apply to uses of \f[C]mkosi\f[R] with a -source tree and build script. -When all three are enabled together turn-around times for complete image -builds are minimal, as only changed source files need to be recompiled: -an OS image rebuilt will be almost as quick to build the source tree -only. -.SH ENVIRONMENT VARIABLES -.PP -The build script \f[C]mkosi.build\f[R] receives the following -environment variables: -.IP \[bu] 2 -\f[C]$SRCDIR\f[R] contains the path to the sources to build. -.IP \[bu] 2 -\f[C]$DESTDIR\f[R] is a directory into which any artifacts generated by -the build script shall be placed. -.IP \[bu] 2 -\f[C]$BUILDDIR\f[R] is only defined if \f[C]mkosi.builddir\f[R] and -points to the build directory to use. -This is useful for all build systems that support out-of-tree builds to -reuse already built artifacts from previous runs. -.IP \[bu] 2 -\f[C]$WITH_DOCS\f[R] is either \f[C]0\f[R] or \f[C]1\f[R] depending on -whether a build without or with installed documentation was requested -(\f[C]WithDocs=yes\f[R]). -The build script should suppress installation of any package -documentation to \f[C]$DESTDIR\f[R] in case \f[C]$WITH_DOCS\f[R] is set -to \f[C]0\f[R]. -.IP \[bu] 2 -\f[C]$WITH_TESTS\f[R] is either \f[C]0\f[R]or \f[C]1\f[R] depending on -whether a build without or with running the test suite was requested -(\f[C]WithTests=no\f[R]). -The build script should avoid running any unit or integration tests in -case \f[C]$WITH_TESTS\f[R] is \f[C]0\f[R]. -.IP \[bu] 2 -\f[C]$WITH_NETWORK\f[R] is either \f[C]0\f[R]or \f[C]1\f[R] depending on -whether a build without or with networking is being executed -(\f[C]WithNetwork=no\f[R]). -The build script should avoid any network communication in case -\f[C]$WITH_NETWORK\f[R] is \f[C]0\f[R]. -.SH EXAMPLES -.PP -Create and run a raw \f[I]GPT\f[R] image with \f[I]ext4\f[R], as -\f[C]image.raw\f[R]: -.IP -.nf -\f[C] -# mkosi --bootable --incremental boot -\f[R] -.fi -.PP -Create and run a bootable btrfs \f[I]GPT\f[R] image, as -\f[C]foobar.raw\f[R]: -.IP -.nf -\f[C] -# mkosi --format gpt_btrfs --bootable -o foobar.raw -# mkosi --output foobar.raw boot -# mkosi --output foobar.raw qemu -\f[R] -.fi -.PP -Create and run a \f[I]Fedora Linux\f[R] image into a plain directory: -.IP -.nf -\f[C] -# mkosi --distribution fedora --format directory boot -\f[R] -.fi -.PP -Create a compressed image \f[C]image.raw.xz\f[R] and add a checksum -file, and install \f[I]SSH\f[R] into it: -.IP -.nf -\f[C] -# mkosi --distribution fedora --format gpt_squashfs --checksum --compress --package=openssh-clients -\f[R] -.fi -.PP -Inside the source directory of an \f[C]automake\f[R]-based project, -configure \f[I]mkosi\f[R] so that simply invoking \f[C]mkosi\f[R] -without any parameters builds an OS image containing a built version of -the project in its current state: -.IP -.nf -\f[C] -# cat >mkosi.default <<EOF -[Distribution] -Distribution=fedora -Release=24 - -[Output] -Format=gpt_btrfs -Bootable=yes - -[Content] -Packages=openssh-clients,httpd -BuildPackages=make,gcc,libcurl-devel -EOF -# cat >mkosi.build <<EOF -#!/bin/sh -cd $SRCDIR -\&./autogen.sh -\&./configure --prefix=/usr -make -j \[ga]nproc\[ga] -make install -EOF -# chmod +x mkosi.build -# mkosi --bootable --incremental boot -# systemd-nspawn -bi image.raw -\f[R] -.fi -.PP -To create a \f[I]Fedora Linux\f[R] image with hostname: -.IP -.nf -\f[C] -# mkosi --distribution fedora --hostname image -\f[R] -.fi -.PP -Also you could set hostname in configuration file: -.IP -.nf -\f[C] -# cat mkosi.default -\&... -[Output] -Hostname=image -\&... -\f[R] -.fi -.SH REQUIREMENTS -.PP -mkosi is packaged for various distributions: Debian, Ubuntu, Arch Linux, -Fedora Linux, OpenMandriva, Gentoo. -It is usually easiest to use the distribution package. -.PP -The current version requires systemd 233 (or actually, systemd-nspawn of -it). -.PP -When not using distribution packages make sure to install the necessary -dependencies. -For example, on \f[I]Fedora Linux\f[R] you need: -.IP -.nf -\f[C] -dnf install arch-install-scripts btrfs-progs debootstrap dosfstools edk2-ovmf e2fsprogs squashfs-tools gnupg python3 tar veritysetup xfsprogs xz zypper sbsigntools -\f[R] -.fi -.PP -On Debian/Ubuntu it might be necessary to install the -\f[C]ubuntu-keyring\f[R], \f[C]ubuntu-archive-keyring\f[R] and/or -\f[C]debian-archive-keyring\f[R] packages explicitly, in addition to -\f[C]debootstrap\f[R], depending on what kind of distribution images you -want to build. -\f[C]debootstrap\f[R] on Debian only pulls in the Debian keyring on its -own, and the version on Ubuntu only the one from Ubuntu. -.PP -Note that the minimum required Python version is 3.7. -.SH REFERENCES -.IP \[bu] 2 -Primary mkosi git repository on -GitHub (https://github.com/systemd/mkosi/) -.IP \[bu] 2 -mkosi \[em] A Tool for Generating OS -Images (http://0pointer.net/blog/mkosi-a-tool-for-generating-os-images.html) -introductory blog post by Lennart Poettering -.IP \[bu] 2 -The mkosi OS generation tool (https://lwn.net/Articles/726655/) story on -LWN -.SH SEE ALSO -.PP -\f[C]systemd-nspawn(1)\f[R], \f[C]dnf(8)\f[R], \f[C]debootstrap(8)\f[R] -.SH AUTHORS -The mkosi Authors. |