From aa34cb0e32c2bb707c67ba3062ce5818bdc3beba Mon Sep 17 00:00:00 2001 From: Andrew Ammerlaan Date: Tue, 23 Apr 2024 20:50:17 +0200 Subject: [PATCH] ecleankernel/layout: do not hardcode os id/name Signed-off-by: Andrew Ammerlaan --- ecleankernel/layout/blspec.py | 5 ++++- ecleankernel/layout/std.py | 11 ++++++---- pyproject.toml | 3 +++ test/test_layout_blspec.py | 20 ++++++++++------- test/test_layout_std.py | 41 +++++++++++++++++++---------------- tox.ini | 5 +++-- 6 files changed, 51 insertions(+), 34 deletions(-) diff --git a/ecleankernel/layout/blspec.py b/ecleankernel/layout/blspec.py index 8a8addb..e2f4aea 100644 --- a/ecleankernel/layout/blspec.py +++ b/ecleankernel/layout/blspec.py @@ -2,6 +2,7 @@ # (c) 2020-2023 Michał Górny # Released under the terms of the 2-clause BSD license. +import distro import logging import os import typing @@ -136,8 +137,10 @@ def find_kernels(self, # Not an UKI continue + distro_id = distro.id() or "linux" + ver = basename.removeprefix(f"{self.kernel_id}-" - ).removeprefix("gentoo-") + ).removeprefix(f"{distro_id}-") if basename == ver: # Not our UKI continue diff --git a/ecleankernel/layout/std.py b/ecleankernel/layout/std.py index b401a1e..10b090e 100644 --- a/ecleankernel/layout/std.py +++ b/ecleankernel/layout/std.py @@ -2,6 +2,7 @@ # (c) 2011-2020 Michał Górny # Released under the terms of the 2-clause BSD license. +import distro import itertools import os import os.path @@ -70,12 +71,14 @@ def find_kernels(self, kernels: typing.Dict[str, typing.Dict[str, Kernel]] = {} other_files: typing.List[typing.Tuple[GenericFile, str]] = [] + distro_name = distro.name() or "Linux" + def find_std_files() -> typing.Iterator: for directory in (self.root / 'boot', - self.root / 'boot/EFI/EFI/Gentoo', - self.root / 'boot/efi/EFI/Gentoo', - self.root / 'boot/EFI/Gentoo', - self.root / 'efi/EFI/Gentoo'): + self.root / f"boot/EFI/EFI/{distro_name}", + self.root / f"boot/efi/EFI/{distro_name}", + self.root / f"boot/EFI/{distro_name}", + self.root / f"efi/EFI/{distro_name}"): try: for file in os.listdir(directory): yield directory / file diff --git a/pyproject.toml b/pyproject.toml index b59a42f..8a84a8b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,6 +18,9 @@ classifiers = [ "Topic :: System :: Installation/Setup" ] requires-python = ">=3.9" +dependencies = [ + "distro" +] [project.optional-dependencies] test = ["pytest"] diff --git a/test/test_layout_blspec.py b/test/test_layout_blspec.py index 1ed9782..5a37fa6 100644 --- a/test/test_layout_blspec.py +++ b/test/test_layout_blspec.py @@ -2,6 +2,7 @@ # (c) 2020 Michał Górny # Released under the terms of the 2-clause BSD license. +import distro import os import tempfile import unittest @@ -22,6 +23,8 @@ from test.test_file import write_bzImage from test.test_layout_std import make_test_files, kernel_paths +distro_id = distro.id() or "linux" + class BlSpecLayoutTests(unittest.TestCase): maxDiff = None @@ -43,7 +46,7 @@ def create_layout(self, test_spec = [ f"boot/{subdir}/EFI/Linux/{entry}-1.2.6.efi", f"boot/{subdir}/EFI/Linux/{entry}-1.2.6.png", - f"boot/{subdir}/EFI/Linux/{entry}-1.2.5.efi", + f"boot/{subdir}/EFI/Linux/{distro_id}-1.2.5.efi", f"boot/{subdir}/{entry}/1.2.5/initrd", f"boot/{subdir}/{entry}/1.2.5/linux", f"boot/{subdir}/{entry}/1.2.4/initrd", @@ -80,7 +83,8 @@ def create_layout(self, with open(path / "etc/kernel/entry-token", "w") as f: f.write(f"{self.entry_token}\n") write_bzImage(bootsub / f"EFI/Linux/{entry}-1.2.6.efi", b'1.2.6 test') - write_bzImage(bootsub / f"EFI/Linux/{entry}-1.2.5.efi", b'1.2.5 test') + write_bzImage(bootsub / f"EFI/Linux/{distro_id}-1.2.5.efi", + b'1.2.5 test') write_bzImage(bootsub / f"{entry}/1.2.5/linux", b'1.2.5 test') write_bzImage(bootsub / f"{entry}/1.2.3/linux", b'1.2.3 test') write_bzImage(bootsub / f"{entry}/1.2.2/linux", b'1.2.2 test') @@ -106,7 +110,7 @@ def assert_kernels(self, subdir = 'EFI/' if efi_subdir else '' files = { f'boot/{subdir}/EFI/Linux/{self.machine_id}-1.2.6.efi': k126, - f'boot/{subdir}/EFI/Linux/{self.machine_id}-1.2.5.efi': k125, + f'boot/{subdir}/EFI/Linux/{distro_id}-1.2.5.efi': k125, f'boot/{subdir}{self.machine_id}/1.2.5/initrd': k125, f'boot/{subdir}{self.machine_id}/1.2.5/linux': k125, f'boot/{subdir}{self.machine_id}/1.2.5': k125, @@ -235,7 +239,7 @@ def test_find_modules(self) -> None: ], '1.2.5'), ('1.2.5', - [KernelImage(ukipath / f"{self.machine_id}-1.2.5.efi"), + [KernelImage(ukipath / f"{distro_id}-1.2.5.efi"), ModuleDirectory(modules / '1.2.5'), GenericFile(modules / '1.2.5/../../../usr/src/linux', KFT.BUILD), @@ -305,7 +309,7 @@ def test_exclude_misc(self) -> None: ], '1.2.5'), ('1.2.5', - [KernelImage(ukipath / f"{self.machine_id}-1.2.5.efi"), + [KernelImage(ukipath / f"{distro_id}-1.2.5.efi"), ModuleDirectory(modules / '1.2.5'), GenericFile(modules / '1.2.5/../../../usr/src/linux', KFT.BUILD), @@ -369,7 +373,7 @@ def test_exclude_modules(self) -> None: ], '1.2.5'), ('1.2.5', - [KernelImage(ukipath / f"{self.machine_id}-1.2.5.efi"), + [KernelImage(ukipath / f"{distro_id}-1.2.5.efi"), GenericFile(modules / '1.2.5/../../../usr/src/linux', KFT.BUILD), ], @@ -432,7 +436,7 @@ def test_exclude_build(self) -> None: ], '1.2.5'), ('1.2.5', - [KernelImage(ukipath / f"{self.machine_id}-1.2.5.efi"), + [KernelImage(ukipath / f"{distro_id}-1.2.5.efi"), ModuleDirectory(modules / '1.2.5'), ], '1.2.5'), @@ -498,7 +502,7 @@ def test_find_modules_EFI(self) -> None: ], '1.2.5'), ('1.2.5', - [KernelImage(ukipath / f"{self.machine_id}-1.2.5.efi"), + [KernelImage(ukipath / f"{distro_id}-1.2.5.efi"), ModuleDirectory(modules / '1.2.5'), GenericFile(modules / '1.2.5/../../../usr/src/linux', KFT.BUILD), diff --git a/test/test_layout_std.py b/test/test_layout_std.py index aa0e9d9..65e4305 100644 --- a/test/test_layout_std.py +++ b/test/test_layout_std.py @@ -3,6 +3,7 @@ # Released under the terms of the 2-clause BSD license. import io +import distro import os import tempfile import typing @@ -22,6 +23,8 @@ TEST_DATA_DIR = Path(__file__).parent / 'data' +distro_name = distro.name() or "Linux" + def kernel_paths(kd: typing.List[Kernel] ) -> typing.Iterable[typing.Tuple[ @@ -68,11 +71,11 @@ def create_layout(self) -> tempfile.TemporaryDirectory: """EFI Stub""" test_spec += [ - 'efi/EFI/Gentoo/vmlinuz-1.2.1.efi', - "efi/EFI/Gentoo/vmlinuz-1.2.1.png", - 'efi/EFI/Gentoo/System.map-1.2.1', - 'efi/EFI/Gentoo/config-1.2.1', - 'efi/EFI/Gentoo/initramfs-1.2.1.img', + f"efi/EFI/{distro_name}/vmlinuz-1.2.1.efi", + f"efi/EFI/{distro_name}/vmlinuz-1.2.1.png", + f"efi/EFI/{distro_name}/System.map-1.2.1", + f"efi/EFI/{distro_name}/config-1.2.1", + f"efi/EFI/{distro_name}/initramfs-1.2.1.img", ] test_spec += [ @@ -93,7 +96,7 @@ def create_layout(self) -> tempfile.TemporaryDirectory: td = make_test_files(test_spec) path = Path(td.name) boot = path / 'boot' - efistub = path / 'efi/EFI/Gentoo/' + efistub = path / f"efi/EFI/{distro_name}/" modules = path / 'lib/modules' write_bzImage(efistub / 'vmlinuz-1.2.1.efi', b'1.2.1 test') @@ -127,10 +130,10 @@ def assert_kernels(self, 'boot/initrd-1.2.3.img.old': k123old, 'boot/vmlinuz-1.2.2': k122, 'boot/System.map-1.2.2': k122, - 'efi/EFI/Gentoo/vmlinuz-1.2.1.efi': k121, - 'efi/EFI/Gentoo/System.map-1.2.1': k121, - 'efi/EFI/Gentoo/config-1.2.1': k121, - 'efi/EFI/Gentoo/initramfs-1.2.1.img': k121, + f"efi/EFI/{distro_name}/vmlinuz-1.2.1.efi": k121, + f"efi/EFI/{distro_name}/System.map-1.2.1": k121, + f"efi/EFI/{distro_name}/config-1.2.1": k121, + f"efi/EFI/{distro_name}/initramfs-1.2.1.img": k121, 'boot/config-1.2.4': k124, 'lib/modules/1.2.1/test.ko': k121, 'lib/modules/1.2.2/test.ko': k122, @@ -155,7 +158,7 @@ def test_find_modules(self) -> None: with self.create_layout() as td: path = Path(td) boot = path / 'boot' - efistub = path / 'efi/EFI/Gentoo/' + efistub = path / f"efi/EFI/{distro_name}/" modules = path / 'lib/modules' self.assertEqual( @@ -210,7 +213,7 @@ def test_exclude_config(self) -> None: with self.create_layout() as td: path = Path(td) boot = path / 'boot' - efistub = path / 'efi/EFI/Gentoo/' + efistub = path / f"efi/EFI/{distro_name}/" modules = path / 'lib/modules' self.assertEqual( @@ -262,7 +265,7 @@ def test_exclude_modules(self) -> None: with self.create_layout() as td: path = Path(td) boot = path / 'boot' - efistub = path / 'efi/EFI/Gentoo/' + efistub = path / f"efi/EFI/{distro_name}/" modules = path / 'lib/modules' self.assertEqual( @@ -313,7 +316,7 @@ def test_exclude_build(self) -> None: with self.create_layout() as td: path = Path(td) boot = path / 'boot' - efistub = path / 'efi/EFI/Gentoo/' + efistub = path / f"efi/EFI/{distro_name}/" modules = path / 'lib/modules' self.assertEqual( @@ -417,11 +420,11 @@ def test_main_list_kernels(self, - modules: {td}/lib/modules/1.2.2 - build: {td}/lib/modules/1.2.2/../../../usr/src/linux other 1.2.1 [1.2.1] -- systemmap: {td}/efi/EFI/Gentoo/System.map-1.2.1 -- config: {td}/efi/EFI/Gentoo/config-1.2.1 -- initramfs: {td}/efi/EFI/Gentoo/initramfs-1.2.1.img -- vmlinuz: {td}/efi/EFI/Gentoo/vmlinuz-1.2.1.efi -- misc: {td}/efi/EFI/Gentoo/vmlinuz-1.2.1.png +- systemmap: {td}/efi/EFI/{distro_name}/System.map-1.2.1 +- config: {td}/efi/EFI/{distro_name}/config-1.2.1 +- initramfs: {td}/efi/EFI/{distro_name}/initramfs-1.2.1.img +- vmlinuz: {td}/efi/EFI/{distro_name}/vmlinuz-1.2.1.efi +- misc: {td}/efi/EFI/{distro_name}/vmlinuz-1.2.1.png - modules: {td}/lib/modules/1.2.1 - build: {td}/lib/modules/1.2.1/../../../usr/src/linux'''.lstrip()) self.assert_kernels(Path(td)) diff --git a/tox.ini b/tox.ini index 7e18a2b..427b2ad 100644 --- a/tox.ini +++ b/tox.ini @@ -4,21 +4,22 @@ skip_missing_interpreters = True isolated_build = True [testenv] +deps = + mypy extras = test commands = pytest -vv {posargs:test} + mypy {posargs:ecleankernel test} [testenv:qa] basepython = python3 ignore_errors = True skip_install = True deps = - mypy pycodestyle pyflakes commands = - mypy {posargs:ecleankernel test} pyflakes {posargs:ecleankernel test} pycodestyle {posargs:ecleankernel test}