Skip to content

Commit

Permalink
mkosi: Optionally build a kernel image from mkosi.kernel/
Browse files Browse the repository at this point in the history
If mkosi.kernel/ exists, the mkosi script will try to build a kernel
image from it. We use the architecture defconfig as a base and add
our own extra configuration on top.

We also add some extra tooling to the build image required to build
the kernel and include some documentation in HACKING.md on how to
use this new feature.

To avoid the kernel sources from being copied into the build or
final image (which we don't want because it takes a while), we put
the mkosi.kernel/ directory in .gitignore and use
"SourceFileTransfer=mount" so that the sources are still accessible
in the build image.
  • Loading branch information
DaanDeMeyer committed Sep 29, 2022
1 parent 3e139a8 commit d12e9bd
Show file tree
Hide file tree
Showing 9 changed files with 69 additions and 0 deletions.
20 changes: 20 additions & 0 deletions docs/HACKING.md
Original file line number Diff line number Diff line change
Expand Up @@ -414,3 +414,23 @@ To debug systemd-boot in an IDE such as VSCode we can use a launch configuration
]
}
```

## Hacking on the kernel + systemd

If you're hacking on the kernel in tandem with systemd, you can clone a kernel repository in mkosi.kernel/ in
the systemd repository, and mkosi will automatically build that kernel and install it into the final image.
To prevent the distribution's kernel from being installed (which isn't necessary since we're building our
own kernel), you can add the following snippets to mkosi.default.d/20-local.conf:

(This snippet is for Fedora, the list of packages will need to be changed for other distributions)

```
[Distribution]
CacheInitrd=no
[Content]
BasePackages=conditional
Packages=systemd
util-linux
dracut
```
37 changes: 37 additions & 0 deletions mkosi.build
Original file line number Diff line number Diff line change
Expand Up @@ -259,3 +259,40 @@ fi
# Make sure services aren't enabled by default on Debian/Ubuntu.
mkdir -p "$DESTDIR/etc/systemd/system-preset"
echo "disable *" > "$DESTDIR/etc/systemd/system-preset/99-mkosi.preset"

if [ -d mkosi.kernel/ ]; then
cd "$SRCDIR/mkosi.kernel"
mkdir -p "$BUILDDIR/mkosi.kernel"

make O="$BUILDDIR/mkosi.kernel" defconfig

scripts/config \
--file $BUILDDIR/mkosi.kernel/.config \
--enable BPF_SYSCALL \
--enable BPF_JIT \
--enable BPF_JIT_ALWAYS_ON \
--enable BPF_JIT_DEFAULT_ON \
--enable BPF_UNPRIV_DEFAULT_OFF \
--enable USERMODE_DRIVER \
--enable BPF_PRELOAD \
--enable BPF_PRELOAD_UMD \
--enable BPF_LSM \
--enable BTRFS_FS \
--enable BTRFS_FS_POSIX_ACL \
--enable PSI \
--enable CGROUPS \
--enable CGROUP_BPF \
--enable MEMCG \
--enable MEMCG_SWAP \
--enable MEMCG_KMEM

# Make sure all unset options are set to their default value.
make O="$BUILDDIR/mkosi.kernel" olddefconfig

make O="$BUILDDIR/mkosi.kernel" -j "$(nproc)"

KERNEL_RELEASE="$(make O=$BUILDDIR/mkosi.kernel -s kernelrelease)"
mkdir -p "$DESTDIR/usr/lib/modules/$KERNEL_RELEASE"
make O="$BUILDDIR/mkosi.kernel" INSTALL_MOD_PATH="$DESTDIR/usr" modules_install
make O="$BUILDDIR/mkosi.kernel" INSTALL_PATH="$DESTDIR/usr/lib/modules/$KERNEL_RELEASE" install
fi
6 changes: 6 additions & 0 deletions mkosi.default.d/10-systemd.conf
Original file line number Diff line number Diff line change
Expand Up @@ -43,17 +43,23 @@ Packages=
zsh

BuildPackages=
bc
binutils
bison
clang
flex
gcc
gettext
git
gnu-efi
gperf
llvm
make
meson
pkgconf
rpm
rsync
tar
zstd

[Host]
Expand Down
1 change: 1 addition & 0 deletions mkosi.default.d/arch/10-mkosi.arch
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ BuildPackages=
docbook-xsl
libxslt
linux-api-headers
pahole
perl
python-jinja
python-lxml
1 change: 1 addition & 0 deletions mkosi.default.d/centos_epel/10-mkosi.centos_epel
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ Packages=
BuildPackages=
bpftool
docbook-xsl
dwarves
gnu-efi-devel
libgcrypt-devel # CentOS Stream 8 libgcrypt-devel doesn't ship a pkg-config file.
libxslt
Expand Down
1 change: 1 addition & 0 deletions mkosi.default.d/debian/10-mkosi.debian
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ BuildPackages=
libssl-dev
libxkbcommon-dev
libzstd-dev
pahole
python3-jinja2
python3-lxml
xsltproc
1 change: 1 addition & 0 deletions mkosi.default.d/fedora/10-mkosi.fedora
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ Packages=
BuildPackages=
bpftool
docbook-xsl
dwarves
gnu-efi-devel
pam-devel
pkgconfig # pkgconf shim to provide /usr/bin/pkg-config
Expand Down
1 change: 1 addition & 0 deletions mkosi.default.d/opensuse/10-mkosi.opensuse
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ BuildPackages=
bpftool
dbus-1-devel
docbook-xsl-stylesheets
dwarves
fdupes
gcc-c++
glib2-devel
Expand Down
1 change: 1 addition & 0 deletions mkosi.default.d/ubuntu/10-mkosi.ubuntu
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ BuildPackages=
libssl-dev
libxkbcommon-dev
libzstd-dev
pahole
python3-jinja2
python3-lxml
xsltproc

0 comments on commit d12e9bd

Please sign in to comment.