Daan De Meyer [Mon, 20 Mar 2023 16:33:15 +0000 (17:33 +0100)]
SSH fixes
- Disable UsePAM to avoid a slow reverse DNS lookup
- Pass environ when runnning ssh to pass SSH_AUTH_SOCK
- Don't use a random CID, instead hash the machine name and take
the first 4 bytes as the CID
- Pull in sshd-keygen.target so the ssh key gets generated on boot.
Daan De Meyer [Sun, 19 Mar 2023 13:50:18 +0000 (14:50 +0100)]
Fix caching behavior of several functions
Follow up for cee0b1b. Forgot to add checking of state.for_cache.
Also configure_dracut() needs to stay cached since we have an option
to cache the initrd.
Daan De Meyer [Fri, 17 Mar 2023 14:45:14 +0000 (15:45 +0100)]
Reimplement Ssh option on top of VSock and credentials
SSH key generation is currently broken under unprivileged mkosi.
Instead of trying to make this work, let's rework the SSH feature
entirely.
First, we only really need the SSH option for getting additional
login shells in VMs, so if we drop the requirement that this works
for containers (which can already be accessed with machinectl), we
can use VSock instead of TUN/TAP to get rid of a ton of code.
We also have a much better way of provisioning the public key these
days, add a script "ssh.authorized_keys.root" to mkosi.credentials/
with the following contents:
```
\#!/bin/sh
ssh-add -L
```
So we don't need to do SSH key generation ourselves anymore, we can
just let the user provide their own SSH key via a credential.
Daan De Meyer [Fri, 17 Mar 2023 12:46:52 +0000 (13:46 +0100)]
centos: Add missing base features for ext4 on c8s
Accidentally only added the ext4 specific features and none of the
base features, let's make sure we add the base features as well,
especially sparse_super is important to make repart's minimize
guessing logic work properly.
Daan De Meyer [Thu, 16 Mar 2023 07:33:15 +0000 (08:33 +0100)]
Replace QemuSMBIOS option with KernelCommandLineExtra
We only really added the QemuSMBIOS option to be able to set stub
option for adding extra command line options. Let's replace it by
a less generic option to make it less verbose to use and to allow
passing the added kernel command line arguments to systemd running
in nspawn as well.
Daan De Meyer [Sun, 12 Mar 2023 17:23:01 +0000 (18:23 +0100)]
Extend credentials support
We now also read credentials from mkosi.credentials/. If a file in
mkosi.credentials/ is executable, we run the file and use its output
as the credential.
Daan De Meyer [Sun, 12 Mar 2023 15:54:00 +0000 (16:54 +0100)]
Stop mounting package caches into images when running scripts
The package manager in the container might be a very different
version than the one running on the host which could cause all
sorts of caching issues. Since we don't need the caches in the
image anymore as we run the package managers outside of the image,
let's stop mounting the cache directory into the image when running
scripts as well.
Daan De Meyer [Wed, 15 Feb 2023 17:09:29 +0000 (18:09 +0100)]
Add --initrd option
--initrd allows users to provide their own initrds. When used, we'll
automatically create another initrd per kernel containing just the
kernel modules and all the initrds to ukify.
We don't compress the kernel modules initrd as the kernel modules
should be compressed themselves already.
Daan De Meyer [Mon, 6 Mar 2023 10:09:31 +0000 (11:09 +0100)]
Use an overlay for the build image instead of a full image
Instead of building a second image for the build image, let's just
make it an overlay for the final image since the only difference
between the two is the list of installed packages. This speeds up
image builds and allows us to simplify the internal logic as well.
Daan De Meyer [Mon, 6 Mar 2023 09:32:55 +0000 (10:32 +0100)]
Packages related refactors
- Use Sequence as the type for passing package lists around
- Add install_packages() method to DistributionInstaller
- Remove install_packages_rpm() and use invoke_dnf() directly
Daan De Meyer [Fri, 3 Mar 2023 20:10:01 +0000 (21:10 +0100)]
Add fallback paths to PATH in run_workspace_command()
Some distros don't configure the appropriate default PATH for their
shell when executed non-interactively, so let's add some fallback
entries ourselves to make sure we can always find the executables we
need.
Franck Bui [Thu, 16 Feb 2023 10:50:32 +0000 (11:50 +0100)]
opensuse: 'leap' as release name is now an alias for 'stable'
Previously using 'leap' would have installed Leap 15.1 which doesn't make sense
since this version of Leap is obsolete and no more supported. Install the latest
stable version instead.
Franck Bui [Thu, 16 Feb 2023 08:20:00 +0000 (09:20 +0100)]
opensuse: fix --with-docs which had no effect
Doc installation has to be controlled via zypp.conf. However the config file
created in the rootfs wasn't considered even with `zypper --root=xxx ...`.
To force zypper to read the version in the rootfs, we must use the environment
variable 'ZYPP_CONF='.
Franck Bui [Wed, 15 Feb 2023 14:08:14 +0000 (15:08 +0100)]
opensuse: temporarily install the local mirror in the root
Instead of relying on '--reposd-dir' option, temporarily install the repo from
the local mirror like the final repos in the rootfs. This way we can introduce
and rely on a very limited number of helpers that manipulate the repositories
inside the rootfs, which should make the code easier to follow.
Daan De Meyer [Thu, 16 Feb 2023 12:38:56 +0000 (13:38 +0100)]
Simplify workspace setup
With the move to bubblewrap we don't run into issues anymore when
the workspace is located in the source directory so let's simplify
the workspace setup.
Nils Hanke [Mon, 13 Feb 2023 17:59:55 +0000 (18:59 +0100)]
Allow RPM to return total file sizes larger than 4GB
When an RPM has a total content size over 4GB, the --qf parameter
needs to use LONGSIZE instead of SIZE to display the total package
content file size, likely to keep compatibility with code
expecting 32 bit friendly values.
Otherwise, if a package is larger than 4GB, RPM returns (none).
Since this is later given as input to Python's int(),
it will throw an exception due to (none) not being a number.
Daan De Meyer [Thu, 9 Feb 2023 11:53:32 +0000 (12:53 +0100)]
Simplify kernel image and initrd handling
- Let's stop writing files in /etc in favor of passing the
information via other ways
- Let's stop defaulting to "bls" layout which is intended
for type 1 images, we only use UKIs so we don't need the
"bls" layout
- kernel-install now defaults to the "other" layout, which
means it won't create the entry directory in /boot anymore.
We update the initrd find logic to take this into account
- Remove --machine-id as it was only really there for testing
the config parsing which we now deal with by not storing the
machine ID at all