]> git.ipfire.org Git - thirdparty/mkosi.git/log
thirdparty/mkosi.git
21 months agoSet ESP output minimum size based on sector size 2060/head
Daan De Meyer [Thu, 9 Nov 2023 18:30:39 +0000 (19:30 +0100)] 
Set ESP output minimum size based on sector size

Based on the sector size, a minimum size is required for FAT32 to
be bootable by OVMF. Instead of wasting space by always using 512MB,
let's set the minimum size based on the given sector size.

21 months agoAdd proper parser for sector size
Daan De Meyer [Thu, 9 Nov 2023 18:30:14 +0000 (19:30 +0100)] 
Add proper parser for sector size

21 months agoisort test_json.py
Daan De Meyer [Thu, 9 Nov 2023 18:36:07 +0000 (19:36 +0100)] 
isort test_json.py

21 months agoMerge pull request #2057 from DaanDeMeyer/esp
Daan De Meyer [Thu, 9 Nov 2023 16:01:40 +0000 (17:01 +0100)] 
Merge pull request #2057 from DaanDeMeyer/esp

Add esp output format

21 months agoAdd esp output format 2057/head
Daan De Meyer [Thu, 9 Nov 2023 11:05:36 +0000 (12:05 +0100)] 
Add esp output format

This is largely the same as the uki output format, but additionally
we wrap the uki in a disk image with just an ESP.

21 months agoAdd extension() method to OutputFormat
Daan De Meyer [Thu, 9 Nov 2023 11:52:16 +0000 (12:52 +0100)] 
Add extension() method to OutputFormat

21 months agoUse one more dict comprehension
Daan De Meyer [Thu, 9 Nov 2023 11:50:05 +0000 (12:50 +0100)] 
Use one more dict comprehension

21 months agoMove unified kernel status message into build_uki()
Daan De Meyer [Thu, 9 Nov 2023 10:58:04 +0000 (11:58 +0100)] 
Move unified kernel status message into build_uki()

This makes sure we get a status message when building uki outputs
as well.

21 months agoFix want_uki()
Daan De Meyer [Thu, 9 Nov 2023 10:31:46 +0000 (11:31 +0100)] 
Fix want_uki()

If we're building a UKI image, we always want a UKI regardless of
the other options.

21 months agoUse INVOKING_USER.home to find home in the workspace logic
Joerg Behrmann [Thu, 9 Nov 2023 13:58:51 +0000 (14:58 +0100)] 
Use INVOKING_USER.home to find home in the workspace logic

21 months agoMake default workspace directory logic more robust
Daan De Meyer [Thu, 9 Nov 2023 13:26:35 +0000 (14:26 +0100)] 
Make default workspace directory logic more robust

When running with sudo, $HOME won't be set, so let's rework the
logic to not rely on that.

21 months agodon't fail on non-controlling ttys
Paul Meyer [Tue, 7 Nov 2023 20:03:20 +0000 (21:03 +0100)] 
don't fail on non-controlling ttys

21 months agoAdd kernel-install plugin from mkosi-initrd
Daan De Meyer [Sun, 5 Nov 2023 13:00:59 +0000 (14:00 +0100)] 
Add kernel-install plugin from mkosi-initrd

Let's support kernel-install natively in mkosi. This commit moves
the kernel-install plugin from mkosi-initrd into mkosi itself with
a few adaptations:

- We look for initrd configuration in /usr/lib/mkosi-initrd and
  /etc/mkosi-initrd using "--include"
- We always include the host's kernel modules using --extra-tree
- We skip the mkosi-initrd plugin unless initrd_generator is
  explicitly set to "mkosi-initrd". This allows the mkosi package
  to be installed without also using it as the initrd generator if
  initrd_generator is not configured explicitly.

This commit also extends the default fedora image to build the mkosi
rpm if the spec sources are mounted at rpm/ using BuildSources=. We
also configure the default image to use mkosi-initrd as the initrd
generator and ukify as the uki generator, so that running kernel-install
in the booted image will build a UKI using mkosi-initrd and ukify.

21 months agoAdd missing raise
Daan De Meyer [Wed, 8 Nov 2023 14:18:31 +0000 (15:18 +0100)] 
Add missing raise

21 months agobuilding rpms from source doc improvements
Daan De Meyer [Wed, 8 Nov 2023 12:37:33 +0000 (13:37 +0100)] 
building rpms from source doc improvements

- Use env --chdir= instead of spawning a shell
- Document that scripts are executed in the same directory that
  mkosi is running in and get rid of all uses of $SRCDIR and
  $CHROOT_SRCDIR in favor of relative paths. We have to use $PWD
  when actually building the rpm as some macros expect the topdir
  to be an absolute path.

21 months agoFix LocalMirror= for Fedora
Daan De Meyer [Wed, 8 Nov 2023 12:12:24 +0000 (13:12 +0100)] 
Fix LocalMirror= for Fedora

21 months agoUse package manager specific subdirectories in the cache directory
Daan De Meyer [Wed, 8 Nov 2023 11:29:39 +0000 (12:29 +0100)] 
Use package manager specific subdirectories in the cache directory

We want to be able to set --cache-dir=/var/cache to automatically
reuse the system cache for each installed package manager, so let's
make sure we use the right subdirectories for each package manager
to make that work properly.

21 months agoAdd QemuDrives= option
Daan De Meyer [Tue, 7 Nov 2023 21:10:47 +0000 (22:10 +0100)] 
Add QemuDrives= option

This option allows specifying extra qemu drives to pass to qemu.
mkosi will create a file (optionally in the given directory) of
the given size and pass it to qemu via -drive, optionally with some
extra options.

Doing this in mkosi allows mkosi to automatically manage the lifetime
of the file backing the drive. We can create it as needed and remove it
when we exit.

Example usage:

```conf
[Host]
QemuDrives=btrfs:10G
           ext4:20G
QemuArgs=-device nvme,serial=btrfs,drive=btrfs
         -device nvme,serial=ext4,drive=ext4
```

21 months agosummary: Fix copy pasta for KernelModulesInitrdExclude
Joakim Nohlgård [Mon, 6 Nov 2023 15:02:00 +0000 (16:02 +0100)] 
summary: Fix copy pasta for KernelModulesInitrdExclude

21 months agoAdd BuildSourcesEphemeral= to the rpms from source doc.
Daan De Meyer [Tue, 7 Nov 2023 08:43:13 +0000 (09:43 +0100)] 
Add BuildSourcesEphemeral= to the rpms from source doc.

rpmbuild with --build-in-place is a top offender when it comes to
writing files to the source directory, so let's suggest enabling
BuildSourcesEphemeral= in the building rpms from source doc.

21 months agoPass file descriptor to /dev/kvm to qemu on newer versions
Daan De Meyer [Sat, 21 Oct 2023 14:19:20 +0000 (16:19 +0200)] 
Pass file descriptor to /dev/kvm to qemu on newer versions

Newer versions of qemu support passing the kvm device to use as a
file descriptor. Let's make use of this if the qemu version is
recent enough.

At the same time, also do some general cleanup of the KVM logic.

21 months agoMerge pull request #2046 from DaanDeMeyer/ephemeral
Daan De Meyer [Tue, 7 Nov 2023 08:39:52 +0000 (09:39 +0100)] 
Merge pull request #2046 from DaanDeMeyer/ephemeral

Add BuildSourcesEphemeral=

21 months agoAdd BuildSourcesEphemeral= 2046/head
Daan De Meyer [Mon, 6 Nov 2023 20:35:09 +0000 (21:35 +0100)] 
Add BuildSourcesEphemeral=

Unfortunately there are use cases where it's useful to persist
changes to the source directory. A prime example is projects with
Makefile that do not provide a properly functioning `make install`.
The only way to use those with mkosi build scripts is to do an
in-tree build in the build script and then mounting the source
directory into the VM or container when booting it. For this to work
we need changes to the source directory to be persisted. To support
this use case, let's gate the ephemeral source directories behind an
option that's disabled by default (for backwards compatibitity reasons).

21 months agoDon't show the same "Generating disk image" message 3x times
Daan De Meyer [Tue, 7 Nov 2023 07:34:56 +0000 (08:34 +0100)] 
Don't show the same "Generating disk image" message 3x times

Let's show a custom message each time we call systemd-repart. Let's
also not call it a third time if split artifacts were not requested.

21 months agoStop logging about cleaning up overlayfs
Daan De Meyer [Tue, 7 Nov 2023 07:25:20 +0000 (08:25 +0100)] 
Stop logging about cleaning up overlayfs

These steps aren't exactly useful for users, so let's not log about
them.

21 months agoAdd --debug-workspace
Daan De Meyer [Mon, 6 Nov 2023 19:47:17 +0000 (20:47 +0100)] 
Add --debug-workspace

Fixes #2036

21 months agoFix KernelModulesInclude=
Daan De Meyer [Mon, 6 Nov 2023 19:54:31 +0000 (20:54 +0100)] 
Fix KernelModulesInclude=

We have to store the relative path, not the full path for the check
to work correctly.

21 months agoDocument that we automatically handle roothash= for verity partitions
Daan De Meyer [Mon, 6 Nov 2023 19:15:25 +0000 (20:15 +0100)] 
Document that we automatically handle roothash= for verity partitions

21 months agoUpdate NEWS
Daan De Meyer [Tue, 7 Nov 2023 07:47:25 +0000 (08:47 +0100)] 
Update NEWS

21 months agoMerge pull request #2041 from DaanDeMeyer/fixes
Jörg Behrmann [Mon, 6 Nov 2023 16:51:49 +0000 (17:51 +0100)] 
Merge pull request #2041 from DaanDeMeyer/fixes

Various fixes and improvements

21 months agoMake source directories ephemeral when running scripts 2041/head
Daan De Meyer [Mon, 6 Nov 2023 13:04:26 +0000 (14:04 +0100)] 
Make source directories ephemeral when running scripts

Various tools like to write to the source directory, which we want
to avoid. Let's make source directories ephemeral when running scripts
so tools can write to it as much as they want but we can throw away all
those changes when we're done running scripts.

Specifically, this makes running rpmbuild as documented in
docs/building-rpm-from-source.md a lot nicer as the source directory won't be
polluted with all manner of temporary files anymore.

21 months agoStop using workspace directories in source directories
Daan De Meyer [Mon, 6 Nov 2023 12:58:56 +0000 (13:58 +0100)] 
Stop using workspace directories in source directories

Preparation for making source directories volatile while running
scripts. Overlapping overlayfs directories cause massive mayhem so
to keep our sanity, let's make sure the workspace directory is never
a subdirectory of any source directories.

XDG doesn't provide an equivalent of /var/tmp but when running in /home
we really want the workspace to be located in /home as well so we can use
reflinks if /home is a separate partition so we opt to use XDG_CACHE_HOME
or $HOME/.cache instead.

21 months agoCreate volatile overlay if no upperdir is specified
Daan De Meyer [Mon, 6 Nov 2023 11:13:10 +0000 (12:13 +0100)] 
Create volatile overlay if no upperdir is specified

21 months agoUse same chroot scripts for all postinst/finalize scripts
Daan De Meyer [Mon, 6 Nov 2023 11:05:25 +0000 (12:05 +0100)] 
Use same chroot scripts for all postinst/finalize scripts

21 months agoMerge mount_volatile_overlay() into mount_build_overlay()
Daan De Meyer [Mon, 6 Nov 2023 10:29:34 +0000 (11:29 +0100)] 
Merge mount_volatile_overlay() into mount_build_overlay()

Let's reduce the number of mounts by merging the volatile build
overlay logic into the build overlay logic.

21 months agoFix mount_overlay() with multiple lowerdirs
Daan De Meyer [Mon, 6 Nov 2023 10:28:16 +0000 (11:28 +0100)] 
Fix mount_overlay() with multiple lowerdirs

Multiple lower directories are specified by delimiting with colons,
not by specifying the lowerdir= option multiple times. Also, the
lowerdirs are stacked right to left so make sure we reverse the given
list.

21 months agoFix RuntimeTrees=
Daan De Meyer [Mon, 6 Nov 2023 14:40:19 +0000 (15:40 +0100)] 
Fix RuntimeTrees=

We previously made the target path non-optional but this doesn't actually
work for RuntimeTrees=, where we need optional paths. So instead, let's
introduce ConfigTree to abstract the tree concept and have a class where
we can define methods on to make working with trees easier.

21 months agoAdd nano to default images
Daan De Meyer [Sun, 5 Nov 2023 12:55:46 +0000 (13:55 +0100)] 
Add nano to default images

21 months agoUse rpm to install rpms in building rpms from source doc
Daan De Meyer [Sun, 5 Nov 2023 12:15:50 +0000 (13:15 +0100)] 
Use rpm to install rpms in building rpms from source doc

Let's get rid of an unnecessary indirection and just use rpm directly
to install the rpms we built in the previous step as all the dependencies
will be installed already and as such we don't need dnf.

21 months agoUse right dnf5 options for plugin stuff
Daan De Meyer [Sun, 5 Nov 2023 12:14:47 +0000 (13:14 +0100)] 
Use right dnf5 options for plugin stuff

Let's use the non-compat dnf5 options for plugins.

21 months agoAdd rpm script to run rpm on the build root
Daan De Meyer [Sun, 5 Nov 2023 12:14:14 +0000 (13:14 +0100)] 
Add rpm script to run rpm on the build root

We provide a dnf script, so we should also provide an rpm script.

21 months agoVarious fixes for building-rpms-from-source.md
Daan De Meyer [Sun, 5 Nov 2023 11:13:51 +0000 (12:13 +0100)] 
Various fixes for building-rpms-from-source.md

- Fix quotes in rpms from source doc

These statements should not be surrounded by quotes as we don't want
them to expand to the empty string if unset.

- Use fewer subshells
- Don't use line continuations for pipes

21 months agoSkip symlink when prefixing everything in staging directory
Daan De Meyer [Fri, 3 Nov 2023 19:53:26 +0000 (20:53 +0100)] 
Skip symlink when prefixing everything in staging directory

The symlink shouldn't be prefixed so make sure we skip it.

21 months agoconfig: right strip newlines from contents read via path_read_text
Joerg Behrmann [Thu, 2 Nov 2023 21:19:49 +0000 (22:19 +0100)] 
config: right strip newlines from contents read via path_read_text

This so far only affects mkosi.version and mkosi.rootpw.

Fixes: 2031
21 months agoAdd journalctl and coredumpctl verbs
Sam Leonard [Mon, 30 Oct 2023 17:11:35 +0000 (17:11 +0000)] 
Add journalctl and coredumpctl verbs

21 months agoVarious followups for merged PRs
Daan De Meyer [Thu, 2 Nov 2023 11:01:03 +0000 (12:01 +0100)] 
Various followups for merged PRs

21 months agoRestore subdirectory use for $BUILDDIR
Zbigniew Jędrzejewski-Szmek [Mon, 30 Oct 2023 17:20:41 +0000 (18:20 +0100)] 
Restore subdirectory use for $BUILDDIR

Sharing of a directory for the (package) cache seems fine. The package manager
shall use subdirectories and/or unique file names, so there should be no
accidental conflict, and using the same cache directory allows the cache to be
reused when possible. OTOH, sharing of the directory for the build directory is
unlikely to be useful (since at least the configuration will usually be
different, so the build would generally mean rebuilding anything anyway), but
also the build system might not do cache invalidation strongly enough, leading
to inadvertetent sharing of build artifacts. Let's avoid the issue completely
but not sharing the build directory between different distributions releases or
architectures.

This partially reverts b17810b4b571d0acbb307a6f7cd5c6456a45e4d3.

21 months agoAdd doc on building rpms from source with mkosi
Daan De Meyer [Sat, 28 Oct 2023 17:18:00 +0000 (19:18 +0200)] 
Add doc on building rpms from source with mkosi

I use this all over the place so let's document it in one place so
I can easily find it when needed and so others can make use of it
as well.

21 months agoMerge pull request #2023 from keszybz/mkosi-chroot-no-args
Daan De Meyer [Thu, 2 Nov 2023 10:37:54 +0000 (11:37 +0100)] 
Merge pull request #2023 from keszybz/mkosi-chroot-no-args

mkosi-chroot: just run shell if no arguments are specified

21 months agoAllow overriding dnf selection with $MKOSI_DNF
Zbigniew Jędrzejewski-Szmek [Fri, 27 Oct 2023 12:09:45 +0000 (14:09 +0200)] 
Allow overriding dnf selection with $MKOSI_DNF

dnf5 is nice, but it has some issues, for example installation of rhel9
currently fails with some error about signature. Using dnf instead works around
the problem. Allow the user to override the selection using an environment
variable (or Environment=).

(We have the tools directory, but it doesn't help here because we want to use
'dnf' instead of 'dnf5' and not a different version of 'dnf5'.)

21 months agospawn: inherit parent $PATH by default
Malte Poll [Mon, 30 Oct 2023 14:24:54 +0000 (15:24 +0100)] 
spawn: inherit parent $PATH by default

Spawn should be able to find binaries in $PATH by default.

Co-authored-by: Paul Meyer <49727155+katexochen@users.noreply.github.com>
21 months agoFix incremental caching
Daan De Meyer [Wed, 1 Nov 2023 11:49:52 +0000 (12:49 +0100)] 
Fix incremental caching

- Make sure the distribution, release and architecture are also part
of the cache manifest
- Remove the output name from the cache key and use the distribution,
release, architecture and optionally image name instead.
- Use MkosiEncoder to serialize the cache manifest.

21 months agoqemu: allow checking device availability with actually used flags
Joerg Behrmann [Wed, 1 Nov 2023 14:16:14 +0000 (15:16 +0100)] 
qemu: allow checking device availability with actually used flags

Also use an actual os.open instead of os.access, because os.access might fail
with certain flags in cases where os.open will not.

This works around the case where kernel modules after an upgrade cannot be
loaded anymore because it is no longer available for the running kernel.

21 months agoAdd mkosi-as-caller helper 2023/head
Zbigniew Jędrzejewski-Szmek [Sun, 29 Oct 2023 17:22:45 +0000 (18:22 +0100)] 
Add mkosi-as-caller helper

This helper can be used to replace the following pattern which is similar to
something used in the systemd codebase:

SU="setpriv --reuid=${MKOSI_UID:-0} --regid=${MKOSI_GID:-0} --clear-groups"
$SU meson setup "$BUILDDIR/build" "$SRCDIR"
$SU meson compile -C "$BUILDDIR/build"
meson install -C "$BUILDDIR/build" --no-rebuild

With the helper this becomes:

mkosi-as-caller meson setup "$BUILDDIR/build" "$SRCDIR"
mkosi-as-caller meson compile -C "$BUILDDIR/build"
meson install -C "$BUILDDIR/build" --no-rebuild

21 months agoFix venv name in ci.yml
Sam Leonard [Tue, 31 Oct 2023 10:15:23 +0000 (10:15 +0000)] 
Fix venv name in ci.yml

21 months agossh: add RuntimeDirectory=sshd
Luca Boccassi [Mon, 30 Oct 2023 11:49:20 +0000 (11:49 +0000)] 
ssh: add RuntimeDirectory=sshd

[  209.582912] sshd[888]: fatal: Missing privilege separation directory: /run/sshd

21 months agofedora: allow cross builds with dnf5
Paul Meyer [Fri, 27 Oct 2023 12:36:48 +0000 (14:36 +0200)] 
fedora: allow cross builds with dnf5

The `--forcearch` flag is global an can be used in dnf5 from v5.1.6 up.

Co-authored-by: Malte Poll <mp@edgeless.systems>
21 months agoman: drop suggestion to use mkosi-chroot for the whole script
Zbigniew Jędrzejewski-Szmek [Sun, 29 Oct 2023 17:25:44 +0000 (18:25 +0100)] 
man: drop suggestion to use mkosi-chroot for the whole script

21 months agoPut uid before gid
Zbigniew Jędrzejewski-Szmek [Sun, 29 Oct 2023 16:14:28 +0000 (17:14 +0100)] 
Put uid before gid

21 months agoRework the interface of finalize_host_scripts() to take a dictionary
Zbigniew Jędrzejewski-Szmek [Sun, 29 Oct 2023 15:49:05 +0000 (16:49 +0100)] 
Rework the interface of finalize_host_scripts() to take a dictionary

We would create <chroot> in the calling function, then pass it to
finalize_host_scripts(), which would rename it during installation to "mkosi-chroot".
This is too much magic: when looking for 'mkosi-chroot' in the code, the name appears
in one place, and the definition in a completely different place. It's also hard to
extend with other commands in the future. Let's use the proper name from the
beginning and switch to a dictionary, so we can add other helpers in the future.

21 months agoReformat with statements to not use backslashes
Zbigniew Jędrzejewski-Szmek [Sun, 29 Oct 2023 15:27:52 +0000 (16:27 +0100)] 
Reformat with statements to not use backslashes

Backslashes were required in old python versions, but thankfully they are not
anymore. Even though we used the continuation backslashes, we already had
parenthesis everywhere, so let's just drop the backslashes, and also use a
trailing comma per the usual style.

(https://github.com/python/cpython/issues/56991 says that this happened in
Python 3.10, but it also works with Python 3.9.18 here. I guess the CI will
provide the definite confirmation.)

21 months agomkosi-chroot: just run shell if no arguments are specified
Zbigniew Jędrzejewski-Szmek [Sun, 29 Oct 2023 13:26:45 +0000 (14:26 +0100)] 
mkosi-chroot: just run shell if no arguments are specified

chroot(1) is documented to run "$SHELL -i" as the default command. Let's do
something similar and call "sh -i". When a user is using '--debug-shell' and one
of the scripts fails, the mkosi-chroot can be used to chroot into the image.
I think this is what users expect, based on the 'chroot' in the name.

(I don't think using $SHELL makes sense. It could either be set to 'sh', or to
something from the outside, which might not even be installed in the chroot. We
call 'sh' ourselves, so we know it must be there, so let's just call that
uncoditionally.)

21 months agoDon't mount our own passwd when building images
Daan De Meyer [Sat, 28 Oct 2023 19:38:37 +0000 (21:38 +0200)] 
Don't mount our own passwd when building images

It's much more important that we use the image's /etc/passwd instead
of our own. Both inside and outside the image so that UIDs/GIDs get
resolved correctly.

21 months agoExtend README instructions
Daan De Meyer [Sat, 28 Oct 2023 15:49:14 +0000 (17:49 +0200)] 
Extend README instructions

Let's make sure we have complete copy-paste shell commands for
all the different installation methods. Let's also avoid confusion
and always use python3 in the example commands.

21 months agoFix table in mkosi.md
Christian Berendt [Sat, 28 Oct 2023 16:06:55 +0000 (18:06 +0200)] 
Fix table in mkosi.md

21 months agoMerge pull request #2018 from DaanDeMeyer/match-build-sources
Jörg Behrmann [Sat, 28 Oct 2023 12:26:35 +0000 (14:26 +0200)] 
Merge pull request #2018 from DaanDeMeyer/match-build-sources

Add BuildSources= match

21 months agoAdd BuildSources= match 2018/head
Daan De Meyer [Sat, 28 Oct 2023 10:42:58 +0000 (12:42 +0200)] 
Add BuildSources= match

One pattern I've started using a lot when I have to build multiple
projects from source in a build script is to check if a source tree
has been mounted at some location using BuildSources= and to only
build the project if that's the case.

The problem with this is that this only allows me to skip the build,
it doesn't allow me to skip installing the necessary build and runtime
packages for that particular project.

Let's add a BuildSources= match so that everything related to the
project can be skipped if the project is not configured to be mounted
at some location using BuildSources=.

21 months agoMake sure the chroot scripts dir variable is not overwritten
Daan De Meyer [Sat, 28 Oct 2023 11:33:40 +0000 (13:33 +0200)] 
Make sure the chroot scripts dir variable is not overwritten

We used `d` for both the chroot scripts dir and the host scripts dir,
which means the host scripts dir overwrites the chroot scripts dir
variable. This isn't a problem when there's only one script, but
becomes an issue when there's multiple scripts of the same type.

21 months agoStop using subdirectories of cache and build dirs automatically
Daan De Meyer [Fri, 20 Oct 2023 19:21:18 +0000 (21:21 +0200)] 
Stop using subdirectories of cache and build dirs automatically

In some cases, for example mkosi-initrd running as a kernel-install
script, we want to reuse the system package cache. Currently this is
impossible as we unconditionally create a subdirectory beneath the
provided cache directory. Let's stop doing that, as users can now
explicitly configure this behavior themselves by specifying the
cache directory or build directory as follows:

```
CacheDirectory=mkosi.cache/%d~%r~%a
BuildDirectory=mkosi.builddir/%d~%r~%a
```

Additionally, make sure the default tools tree only reuses the same
cache as the preset it's used for when the distribution, release and
architecture are the same as the preset's.

21 months agoParse mkosi.local.conf before parsing any other files
Daan De Meyer [Fri, 27 Oct 2023 19:17:27 +0000 (21:17 +0200)] 
Parse mkosi.local.conf before parsing any other files

Currently extra local configuration is a bit implicit, users have
to add a drop-in in mkosi.conf.d/ named 00-local.conf or so and add
that to the gitignore. This file will then unconditionally override
settings from mkosi.conf even if that's not intended.

Let's make local configuration a bit more explicit by parsing
mkosi.local.conf in a directory first before parsing anything else.
This makes local configuration easy to detect and grep for, and
makes sure that local configuration is by default overridden by
non-local configuration.

21 months agoMake mkosi.repart/ append to the default value for RepartDirectories=
Daan De Meyer [Fri, 27 Oct 2023 12:22:09 +0000 (14:22 +0200)] 
Make mkosi.repart/ append to the default value for RepartDirectories=

While for other list based settings that have a canonical path, we
generally want to append them all to the user provided values, for
RepartDirectories=, it probably makes more sense that if the user
specifies it explicitly, it overrides all the directories defined by
the project in mkosi.repart/ directories. Let's accomodate this by
having mkosi.repart/ modify the default value for RepartDirectories=
which is only used if the setting is not set explicitly.

21 months agoFail when CLI configuration is not applied to any image
Daan De Meyer [Fri, 27 Oct 2023 13:41:41 +0000 (15:41 +0200)] 
Fail when CLI configuration is not applied to any image

Currently we silently ignore settings configured via the CLI that
are overridden by image configuration files. Let's instead fail with
a descriptive error message when this happens, indicating users that
they should use '@' in their configuration files to set the default
value for the setting if they want to allow overriding it from the
command line.

21 months agoDon't use configured default value when empty string is assigned
Daan De Meyer [Fri, 27 Oct 2023 09:19:27 +0000 (11:19 +0200)] 
Don't use configured default value when empty string is assigned

Currently, if a setting is assigned the empty string on the CLI, any
default value configured in the config file is still used. Let's change
this and not use any configured default value when the empty string is
assigned so that default values configured in config files can be
overridden from the CLI.

21 months agoMerge pull request #2012 from DaanDeMeyer/pkgmngr
Daan De Meyer [Fri, 27 Oct 2023 09:18:09 +0000 (11:18 +0200)] 
Merge pull request #2012 from DaanDeMeyer/pkgmngr

Move PackageManagerTrees= to the Distribution section

21 months agoaction: Make logic for unprivileged KVM access more robust 2012/head
Daan De Meyer [Thu, 26 Oct 2023 14:04:36 +0000 (16:04 +0200)] 
action: Make logic for unprivileged KVM access more robust

- Copy static-nodes-permissions.conf to /etc before modifying so our
modifications don't get overwritten if systemd is updated.
- Add udev rules to set the permissions correctly as well

21 months agoMove PackageManagerTrees= to the Distribution section
Daan De Meyer [Thu, 26 Oct 2023 11:39:24 +0000 (13:39 +0200)] 
Move PackageManagerTrees= to the Distribution section

This makes more sense than the Content section, since these trees
don't actually end up in the image.

21 months agoMerge pull request #2011 from DaanDeMeyer/fixes
Jörg Behrmann [Wed, 25 Oct 2023 16:41:02 +0000 (18:41 +0200)] 
Merge pull request #2011 from DaanDeMeyer/fixes

Fixes

21 months agoSet default for Bootable= 2011/head
Daan De Meyer [Wed, 25 Oct 2023 14:36:37 +0000 (16:36 +0200)] 
Set default for Bootable=

Let's not override the setting but just change the default so it
can still be changed from the CLI.

21 months agoAdd common config file for centos (and friends) and fedora
Daan De Meyer [Wed, 25 Oct 2023 14:27:39 +0000 (16:27 +0200)] 
Add common config file for centos (and friends) and fedora

21 months agofedora: Drop selinux packages
Daan De Meyer [Wed, 25 Oct 2023 14:20:33 +0000 (16:20 +0200)] 
fedora: Drop selinux packages

This greatly increase image build time so let's not add them by
default.

21 months agoOnly add UEFI tools tree packages on architectures that support UEFI
Daan De Meyer [Wed, 25 Oct 2023 14:16:33 +0000 (16:16 +0200)] 
Only add UEFI tools tree packages on architectures that support UEFI

These are not built for other architectures on Fedora/CentOS so let's
not try to add them there.

21 months agoPass ExtraSearchPaths= to default tools tree preset
Daan De Meyer [Wed, 25 Oct 2023 14:16:09 +0000 (16:16 +0200)] 
Pass ExtraSearchPaths= to default tools tree preset

Otherwise these won't be used.

21 months agoSkip missing kernel images in gen_kernel_images()
Daan De Meyer [Tue, 24 Oct 2023 12:47:07 +0000 (14:47 +0200)] 
Skip missing kernel images in gen_kernel_images()

And copy out the vmlinuz unconditionally again in copy_vmlinuz().

21 months agoFix missing build overlay
Daan De Meyer [Mon, 23 Oct 2023 20:33:32 +0000 (22:33 +0200)] 
Fix missing build overlay

We also need a build overlay if there are prepare scripts but no
build packages, so let's replace need_build_packages() with a new
function need_build_overlay() that also checks for that.

21 months agoUpdate NEWS
Daan De Meyer [Mon, 23 Oct 2023 12:34:18 +0000 (14:34 +0200)] 
Update NEWS

21 months agoMerge pull request #2007 from DaanDeMeyer/profile
Daan De Meyer [Mon, 23 Oct 2023 10:19:58 +0000 (12:19 +0200)] 
Merge pull request #2007 from DaanDeMeyer/profile

Add support for profiles

21 months agoRename Presets to Images 2007/head
Daan De Meyer [Sun, 22 Oct 2023 18:26:12 +0000 (20:26 +0200)] 
Rename Presets to Images

Presets doesn't really have any meaning without searching up its
definition. By just using mkosi.images/, it's much clearer that the
directory contains image definitions compared to mkosi.presets/.

The old names are kept intact for backwards compatibility.

21 months agoAdd support for profiles
Daan De Meyer [Sun, 22 Oct 2023 13:53:22 +0000 (15:53 +0200)] 
Add support for profiles

A profile is a set of configuration options that represents a known
variant of the given image. Its primary purpose is to allow grouping
known useful derivatives of the current image under a recognizable
identifier.

The difference with presets is that presets represent the individual
images that might need to be built to complete the final image, whereas
profiles change how the individual presets are built. Specifically, only
ever one profile can be selected, while it's perfectly valid to build
many presets.

We parse the specified profile after mkosi.conf but before
mkosi.conf.d to allow configuring the profile to build in mkosi.conf.

21 months agoUse shorthand tmp_path everywhere in test_config
Daan De Meyer [Mon, 23 Oct 2023 08:16:32 +0000 (10:16 +0200)] 
Use shorthand tmp_path everywhere in test_config

21 months agoFix config name when parsing new includes
Daan De Meyer [Sun, 22 Oct 2023 13:46:21 +0000 (15:46 +0200)] 
Fix config name when parsing new includes

21 months agoMake sure Presets= becomes immutable after we use it
Daan De Meyer [Sun, 22 Oct 2023 13:35:16 +0000 (15:35 +0200)] 
Make sure Presets= becomes immutable after we use it

Presets= should not be modified anymore after we start parsing
presets. Let's make sure we enforce that.

21 months agoSet the preset field before we parse the preset's config
Daan De Meyer [Sun, 22 Oct 2023 13:24:38 +0000 (15:24 +0200)] 
Set the preset field before we parse the preset's config

In case we ever want to add a match setting for the current preset.

21 months agoMake sure we finalize the default value for Presets= early
Daan De Meyer [Sun, 22 Oct 2023 13:23:25 +0000 (15:23 +0200)] 
Make sure we finalize the default value for Presets= early

We need to finalize the default value for Presets= early as we use
its value earlier than the other config options.

21 months agoIntroduce is_valid_filename()
Daan De Meyer [Sun, 22 Oct 2023 13:22:48 +0000 (15:22 +0200)] 
Introduce is_valid_filename()

21 months agoEnable WithDocs= by default
Daan De Meyer [Sun, 22 Oct 2023 09:51:50 +0000 (11:51 +0200)] 
Enable WithDocs= by default

Let's include documentation by default so as to not confuse users.

22 months agoMerge pull request #2001 from DaanDeMeyer/json
Daan De Meyer [Fri, 20 Oct 2023 15:12:50 +0000 (17:12 +0200)] 
Merge pull request #2001 from DaanDeMeyer/json

Add --json option

22 months agoAdd --json option 2001/head
Daan De Meyer [Fri, 20 Oct 2023 13:52:00 +0000 (15:52 +0200)] 
Add --json option

Let's allow using --json with summary to get a JSON dump of the
configuration.

22 months agoSort args in test_json
Daan De Meyer [Fri, 20 Oct 2023 13:53:28 +0000 (15:53 +0200)] 
Sort args in test_json

22 months agoDrop verb and cmdline from summary
Daan De Meyer [Fri, 20 Oct 2023 13:41:52 +0000 (15:41 +0200)] 
Drop verb and cmdline from summary

The summary is only printed when we use the summary verb which doesn't
take command line arguments, so both of these are self evident and will
always have the same value.

22 months agoMerge pull request #2002 from behrmann/jsondict
Daan De Meyer [Fri, 20 Oct 2023 14:38:20 +0000 (16:38 +0200)] 
Merge pull request #2002 from behrmann/jsondict

Allow to jsonify MkosiArgs and MkosiConfig in composite objects