Daan De Meyer [Thu, 8 Jun 2023 15:42:35 +0000 (17:42 +0200)]
Prefer configuration via CLI over configuration via config file
This makes it easier to debug things with --debug as all the options
used will be logged instead of having to go and figure out what's in
the config file.
Daan De Meyer [Wed, 7 Jun 2023 14:40:04 +0000 (16:40 +0200)]
Install dmsetup in the initrd on Debian/Ubuntu
On other distros, just installing systemd and udev is sufficient to
make verity work. On Debian and Ubuntu, we need to explicitly install
dmsetup as well to make sure verity works, so let's do that.
Daan De Meyer [Tue, 6 Jun 2023 09:59:55 +0000 (11:59 +0200)]
Make matches work more like systemd conditions
Let's make matches behave like systemd conditions. We drop support
for list matches. Instead, we add support for match negation and
trigger matches. A match is a trigger match if it's prefixed with
the pipe symbol (|). A match is satisfied if all its regular matches
and one of its trigger matches are satisfied.
Daan De Meyer [Wed, 7 Jun 2023 12:01:51 +0000 (14:01 +0200)]
Don't unpack extra/skeleton archives if a target is provided
ExtraTrees= and SkeletonTrees= are currently ambiguous when a target
location is provided. The user could either mean that the archive has
to be unpacked to the target location or the user could mean that he
wants to copy the archive to that location in the image.
We should still try to resolve the ambiguity, but for now, let's assume
that when a target is provided that the user wants to copy the archive
into the image instead of unpacking the archive to that specific location.
To make this work, we also modify the logic slightly to create only the
parent directories of the target so that cp doesn't fail because we try
to copy a file to a directory.
Daan De Meyer [Mon, 29 May 2023 20:41:31 +0000 (22:41 +0200)]
Rework architecture handling
Let's lock architectures down by making it an enum instead of a
free form string. We also introduce a bunch of mapping functions
to map the Architecture enum to qemu, distribution arches, efi
arches. We only support the architectures defined in the discoverable
partitions spec and use those architectures as the default representation.
Daan De Meyer [Sat, 27 May 2023 08:54:20 +0000 (10:54 +0200)]
Make sure we handle any exceptions thrown in MkosiAsyncioThread()
Any unhandled exceptions from run() are by default just printed to
stderr. Let's make sure that these exceptions cause mkosi itself to
fail by catching them and re-raising them when the thread is joined.
Daan De Meyer [Fri, 26 May 2023 10:01:35 +0000 (12:01 +0200)]
Various improvements
- Move workspace and install/cache directory handling into MkosiState
- Stop running the build as the user running mkosi, this makes things
simpler as the root user in the userns can write to directories owned
by the user running mkosi but vice versa is not possible. The build
script still can't modify the build image as we mount the build overlay
read-only.
- Create directories that need to be owned by the user running mkosi
before switching to the user namespace
- Various refactorings
Daan De Meyer [Fri, 26 May 2023 10:16:50 +0000 (12:16 +0200)]
debian: Fix foreign architecture builds
--force-architecture forces dpkg to install packages for other
architectures than the host architecture. --force-depends is required
because when building for arm64 it seems it can't quite figure out
all the pre-depends. For extra safety, we also set APT::Architectures
on top of APT::Architecture.
Before this would have the uid:gid of root in the uidmap space
The link is now created in the staging area first to make the change atomic,
so that the wrong uid:gid pair is never seen in the output directory
Malte Poll [Thu, 25 May 2023 09:53:47 +0000 (11:53 +0200)]
ukify: always sign kernel inside of uki if secure boot is enabled
This overrides the auto detection of ukify and always signs the kernel bevore embedding it in the uki (even if the kernel is already signed).
Rationale: When building Fedora 37 images, the Fedora provided kernel is signed with an expired key (id 2574709492).
I would like to add an additional signature with my own signing key to enable kexec and other features that require a correctly signed kernel image.
Co-authored-by: Otto Bittner <cobittner@posteo.net>
Daan De Meyer [Wed, 24 May 2023 12:33:49 +0000 (14:33 +0200)]
Firstboot improvements
- Merge --root-password-hashed and --root-password-file into
--root-password. If prefixed with hashed:, we treat it as a hashed
root password.
- When not building an initrd, also store corresponding credentials
in /usr/lib/credstore, so that the settings work even if only /usr
is shipped in the final image. We don't do this for initrds since
those generally ship with /etc populated.
- Drop setting of firstboot.hostname which isn't actually used by
systemd-firstboot
Daan De Meyer [Sun, 21 May 2023 15:08:51 +0000 (17:08 +0200)]
Make mkosi the foreground process again when child process finishes
We currently get "Job mkosi has stopped" when fetching running the
summary verb. Let's fix this by making sure we make mkosi the foreground
process again when we finish running a child process.
Daan De Meyer [Tue, 16 May 2023 09:16:28 +0000 (11:16 +0200)]
Various dnf fixes
- Put the logs in a subdirectory of the workspace
- Make sure we configure the persistdir to be inside the workspace
as well. Otherwise dnf5 tries to use the system directory which fails
with a permission error
- Use the non-compat dnf5 option names instead of the compat ones
Daan De Meyer [Mon, 15 May 2023 13:55:32 +0000 (15:55 +0200)]
Pass firstboot settings to generated initrd as well
It generally doesn't make sense to have these differ between the
initrd and the rootfs, so let's pass these settings through to the
initrd as well.
The only setting we don't pass through is the root shell as configuring
a different root shell might mean installing extra packages which might
be undesireable in the initrd.
Daan De Meyer [Thu, 11 May 2023 11:42:21 +0000 (13:42 +0200)]
Use /efi as the ESP path when building the image
We used to use /boot because kernel-install would hardcode it but since
we don't use kernel-install anymore, let's use /efi instead. This way,
if anyone wants to install grub, they can do so in /boot and package
/boot up as an XBOOTLDR partition.
Daan De Meyer [Thu, 11 May 2023 11:53:15 +0000 (13:53 +0200)]
ci: Simplify checks
Instead of mounting the filesystem and checking the contents of the
failed-services file, let's just shut down the machine with a non-zero
exit status if there are failed services. This works for both nspawn
and qemu now that we have the vsock notify socket set up.
Daan De Meyer [Thu, 11 May 2023 08:55:18 +0000 (10:55 +0200)]
action: Allow unprivileged access to kvm, vhost-vsock and vhost-net devices
These are restricted on Debian/Ubuntu but we want to allow running
unprivileged qemu so let's loosen the permissions on these devices
to make that possible.
Daan De Meyer [Thu, 11 May 2023 08:45:54 +0000 (10:45 +0200)]
Propagate systemd exit status from the VM
Let's make use of the new vmm.notify_socket credential to fetch
systemd's exit status from the VM and propagate it as our own exit
status, just like already happens automatically for containers with
systemd-nspawn.