From: Daan De Meyer Date: Sat, 13 Apr 2024 14:40:45 +0000 (+0200) Subject: Centralize vmlinuz fixup logic X-Git-Tag: v23~4^2~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d5a4ea3ec0c2276251c0d7d5aded43ce8f80c190;p=thirdparty%2Fmkosi.git Centralize vmlinuz fixup logic Let's run this logic for all distributions, and also run it after running postinst scripts, to deal with kernel packages that are installed in a postinst script. --- diff --git a/mkosi/__init__.py b/mkosi/__init__.py index b41e1f1ae..45c347add 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -1616,6 +1616,18 @@ def gzip_binary(context: Context) -> str: return "pigz" if find_binary("pigz", root=context.config.tools()) else "gzip" +def fixup_vmlinuz_location(context: Context) -> None: + for d in context.root.glob("boot/vmlinuz-*"): + kver = d.name.removeprefix("vmlinuz-") + vmlinuz = context.root / "usr/lib/modules" / kver / "vmlinuz" + # Some distributions (OpenMandriva) symlink /usr/lib/modules//vmlinuz to /boot/vmlinuz-, so get rid + # of the symlink and copy the actual vmlinuz to /usr/lib/modules/. + if vmlinuz.is_symlink() and vmlinuz.is_relative_to("/boot"): + vmlinuz.unlink() + if not vmlinuz.exists(): + shutil.copy2(d, vmlinuz) + + def gen_kernel_images(context: Context) -> Iterator[tuple[str, Path]]: if not (context.root / "usr/lib/modules").exists(): return @@ -3564,6 +3576,7 @@ def build_image(context: Context) -> None: run_prepare_scripts(context, build=False) install_build_packages(context) run_prepare_scripts(context, build=True) + fixup_vmlinuz_location(context) run_depmod(context, cache=True) save_cache(context) @@ -3581,6 +3594,7 @@ def build_image(context: Context) -> None: install_build_dest(context) install_extra_trees(context) run_postinst_scripts(context) + fixup_vmlinuz_location(context) configure_autologin(context) configure_os_release(context) diff --git a/mkosi/distributions/debian.py b/mkosi/distributions/debian.py index fddbb629d..696b16d44 100644 --- a/mkosi/distributions/debian.py +++ b/mkosi/distributions/debian.py @@ -1,6 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1+ -import shutil import tempfile from collections.abc import Iterable, Sequence from pathlib import Path @@ -205,12 +204,6 @@ class Installer(DistributionInstaller): policyrcd.unlink() - for d in context.root.glob("boot/vmlinuz-*"): - kver = d.name.removeprefix("vmlinuz-") - vmlinuz = context.root / "usr/lib/modules" / kver / "vmlinuz" - if not vmlinuz.exists(): - shutil.copy2(d, vmlinuz) - # systemd-gpt-auto-generator is disabled by default in Ubuntu: # https://git.launchpad.net/ubuntu/+source/systemd/tree/debian/systemd.links?h=ubuntu/noble-proposed. # Let's make sure it is enabled by default in our images. diff --git a/mkosi/distributions/mageia.py b/mkosi/distributions/mageia.py index 0fe44e889..117964b21 100644 --- a/mkosi/distributions/mageia.py +++ b/mkosi/distributions/mageia.py @@ -1,6 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1+ -import shutil from collections.abc import Iterable, Sequence from mkosi.config import Architecture @@ -32,12 +31,6 @@ class Installer(fedora.Installer): def install_packages(cls, context: Context, packages: Sequence[str], apivfs: bool = True) -> None: super().install_packages(context, packages, apivfs) - for d in context.root.glob("boot/vmlinuz-*"): - kver = d.name.removeprefix("vmlinuz-") - vmlinuz = context.root / "usr/lib/modules" / kver / "vmlinuz" - if not vmlinuz.exists(): - shutil.copy2(d, vmlinuz) - @classmethod @listify def repositories(cls, context: Context) -> Iterable[RpmRepository]: diff --git a/mkosi/distributions/openmandriva.py b/mkosi/distributions/openmandriva.py index d6dc031e5..5e62353d5 100644 --- a/mkosi/distributions/openmandriva.py +++ b/mkosi/distributions/openmandriva.py @@ -1,6 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1+ -import shutil from collections.abc import Iterable, Sequence from mkosi.config import Architecture @@ -32,16 +31,6 @@ class Installer(fedora.Installer): def install_packages(cls, context: Context, packages: Sequence[str], apivfs: bool = True) -> None: super().install_packages(context, packages, apivfs) - for d in context.root.glob("boot/vmlinuz-*"): - kver = d.name.removeprefix("vmlinuz-") - vmlinuz = context.root / "usr/lib/modules" / kver / "vmlinuz" - # Openmandriva symlinks /usr/lib/modules//vmlinuz to /boot/vmlinuz-, so get rid of the symlink - # and put the actual vmlinuz in /usr/lib/modules/. - if vmlinuz.is_symlink(): - vmlinuz.unlink() - if not vmlinuz.exists(): - shutil.copy2(d, vmlinuz) - @classmethod @listify def repositories(cls, context: Context) -> Iterable[RpmRepository]: