From f41753ab4a03820d30289d6bd661e26d464f2e1d Mon Sep 17 00:00:00 2001 From: "Thomas Irgang (thir820)" Date: Mon, 7 Oct 2024 13:19:40 +0200 Subject: [PATCH 1/7] add support for extracting packages to initrd-gen --- ebcl/tools/initrd/initrd.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/ebcl/tools/initrd/initrd.py b/ebcl/tools/initrd/initrd.py index f3a424e..ddde693 100644 --- a/ebcl/tools/initrd/initrd.py +++ b/ebcl/tools/initrd/initrd.py @@ -42,6 +42,8 @@ def __init__(self, config_file: str, output_path: str): if self.config.kernel: self.config.packages.append(self.config.kernel) + self.proxy = self.config.proxy + def install_busybox(self) -> bool: """Get busybox and add it to the initrd. """ package = None @@ -209,6 +211,17 @@ def add_devices(self): self.config.fake.run_sudo( f'chown {uid}:{gid} {dev_folder}/{device["name"]}') + def download_deb_packages(self): + """ Download all needed deb packages. """ + (_debs, _contents, missing) = self.proxy.download_deb_packages( + packages=self.config.packages, + contents=self.target_dir + ) + + if missing: + logging.critical('Not found packages: %s', missing) + raise InvalidConfiguration(f'Not found packages: {missing}') + @log_exception() def create_initrd(self) -> Optional[str]: """ Create the initrd image. """ @@ -220,6 +233,8 @@ def create_initrd(self) -> Optional[str]: if not success: return None + self.download_deb_packages() + # Create necessary directories for dir_name in ['proc', 'sys', 'dev', 'sysroot', 'var', 'bin', 'tmp', 'run', 'root', 'usr', 'sbin', 'lib', 'etc']: @@ -253,7 +268,7 @@ def create_initrd(self) -> Optional[str]: else: logging.info('No module sources defined.') - if self.config.modules: + if self.config.modules and mods_dir: logging.info('Adding modules %s...', self.config.modules) self.copy_modules(mods_dir) else: From e0f48a06276781692d7f9454c460eb7c6d65fd84 Mon Sep 17 00:00:00 2001 From: "Thomas Irgang (thir820)" Date: Mon, 7 Oct 2024 13:49:59 +0200 Subject: [PATCH 2/7] add test for initrd packages --- .vscode/settings.json | 1 - ebcl/tools/initrd/initrd.py | 3 ++- tests/test_initrd.py | 17 +++++++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index b312127..82230b2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,7 +10,6 @@ "--disable=W0718" ], "python.testing.pytestArgs": [ - "--no-cov", "--capture=no", "--log-level=DEBUG", "tests" diff --git a/ebcl/tools/initrd/initrd.py b/ebcl/tools/initrd/initrd.py index ddde693..c604f01 100644 --- a/ebcl/tools/initrd/initrd.py +++ b/ebcl/tools/initrd/initrd.py @@ -215,7 +215,8 @@ def download_deb_packages(self): """ Download all needed deb packages. """ (_debs, _contents, missing) = self.proxy.download_deb_packages( packages=self.config.packages, - contents=self.target_dir + contents=self.target_dir, + download_depends=True ) if missing: diff --git a/tests/test_initrd.py b/tests/test_initrd.py index 09a8614..7689d00 100644 --- a/tests/test_initrd.py +++ b/tests/test_initrd.py @@ -52,6 +52,23 @@ def test_install_busybox(self): assert os.path.islink(os.path.join( self.generator.target_dir, 'bin', 'sh')) + @pytest.mark.requires_download + def test_add_cryptsetup(self): + """ Test yaml config loading. """ + vd = VersionDepends( + name='cryptsetup-bin', + package_relation=None, + version_relation=None, + version=None, + arch=self.generator.config.arch + ) + self.generator.config.packages.append(vd) + + self.generator.download_deb_packages() + + assert os.path.isfile(os.path.join( + self.generator.target_dir, 'sbin', 'cryptsetup')) + @pytest.mark.requires_download def test_download_deb_package(self): """ Test modules package download. """ From 4a8cb596564b608e7b53795862ff40d13e1dbe64 Mon Sep 17 00:00:00 2001 From: "Thomas Irgang (thir820)" Date: Tue, 8 Oct 2024 09:47:26 +0200 Subject: [PATCH 3/7] do not add kernel and depends to initrd.img --- ebcl/tools/initrd/initrd.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ebcl/tools/initrd/initrd.py b/ebcl/tools/initrd/initrd.py index c604f01..175b547 100644 --- a/ebcl/tools/initrd/initrd.py +++ b/ebcl/tools/initrd/initrd.py @@ -213,8 +213,12 @@ def add_devices(self): def download_deb_packages(self): """ Download all needed deb packages. """ + packages = self.config.packages.copy() + if self.config.kernel: + packages.remove(self.config.kernel) + (_debs, _contents, missing) = self.proxy.download_deb_packages( - packages=self.config.packages, + packages=packages, contents=self.target_dir, download_depends=True ) From e6a928efa1261fdc9e234c5fb59eb5be9d5246d1 Mon Sep 17 00:00:00 2001 From: "Thomas Irgang (thir820)" Date: Tue, 8 Oct 2024 10:27:06 +0200 Subject: [PATCH 4/7] split kernel and packages --- ebcl/tools/initrd/initrd.py | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/ebcl/tools/initrd/initrd.py b/ebcl/tools/initrd/initrd.py index 175b547..c12cfd0 100644 --- a/ebcl/tools/initrd/initrd.py +++ b/ebcl/tools/initrd/initrd.py @@ -39,9 +39,6 @@ def __init__(self, config_file: str, output_path: str): self.config.busybox = parse_package( 'busybox-static', self.config.arch) - if self.config.kernel: - self.config.packages.append(self.config.kernel) - self.proxy = self.config.proxy def install_busybox(self) -> bool: @@ -213,12 +210,8 @@ def add_devices(self): def download_deb_packages(self): """ Download all needed deb packages. """ - packages = self.config.packages.copy() - if self.config.kernel: - packages.remove(self.config.kernel) - (_debs, _contents, missing) = self.proxy.download_deb_packages( - packages=packages, + packages=self.config.packages, contents=self.target_dir, download_depends=True ) @@ -257,11 +250,11 @@ def create_initrd(self) -> Optional[str]: if self.config.modules_folder: mods_dir = self.config.modules_folder logging.info('Using modules from folder %s...', mods_dir) - elif self.config.packages: + elif self.config.kernel: mods_dir = tempfile.mkdtemp() - logging.info('Using modules from deb packages...') + logging.info('Using modules from kernel deb packages...') (_debs, _contents, missing) = self.config.proxy.download_deb_packages( - packages=self.config.packages, + packages=self.config.kernel, contents=mods_dir ) if missing: From 413b1a1b81f57021b5fffbf9aec6f79d0fb14ed8 Mon Sep 17 00:00:00 2001 From: "Thomas Irgang (thir820)" Date: Tue, 8 Oct 2024 10:28:02 +0200 Subject: [PATCH 5/7] fix packages parameter --- ebcl/tools/initrd/initrd.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ebcl/tools/initrd/initrd.py b/ebcl/tools/initrd/initrd.py index c12cfd0..ea85899 100644 --- a/ebcl/tools/initrd/initrd.py +++ b/ebcl/tools/initrd/initrd.py @@ -254,7 +254,7 @@ def create_initrd(self) -> Optional[str]: mods_dir = tempfile.mkdtemp() logging.info('Using modules from kernel deb packages...') (_debs, _contents, missing) = self.config.proxy.download_deb_packages( - packages=self.config.kernel, + packages=[self.config.kernel], contents=mods_dir ) if missing: From 0d5836d74e1823b24bea5c82010809fe233c171f Mon Sep 17 00:00:00 2001 From: "Thomas Irgang (thir820)" Date: Tue, 8 Oct 2024 13:30:52 +0200 Subject: [PATCH 6/7] adapt test data for initrd-gen changes --- tests/data/initrd.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/data/initrd.yaml b/tests/data/initrd.yaml index 05b01a3..9a6a40a 100644 --- a/tests/data/initrd.yaml +++ b/tests/data/initrd.yaml @@ -10,8 +10,7 @@ apt_repos: - nxp_public modules: - kernel/pfeng/pfeng.ko -packages: - - linux-modules-5.15.0-1023-s32-eb +kernel: linux-modules-5.15.0-1023-s32-eb arch: 'arm64' root_device: /dev/mmcblk0p2 devices: From 5930306caf9201113d8f5fc188ed9e3f509f37ae Mon Sep 17 00:00:00 2001 From: "Thomas Irgang (thir820)" Date: Tue, 8 Oct 2024 13:45:02 +0200 Subject: [PATCH 7/7] adapt config test - kernel is not added to package list --- tests/test_config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_config.py b/tests/test_config.py index 46f0a96..4d33abb 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -65,8 +65,8 @@ def test_initrd_yaml(self): assert len(config.modules) == 1 assert config.modules[0] == 'kernel/pfeng/pfeng.ko' - assert len(config.packages) == 1 - assert config.packages[0].name == 'linux-modules-5.15.0-1023-s32-eb' + assert len(config.packages) == 0 + assert config.kernel is not None and config.kernel.name == 'linux-modules-5.15.0-1023-s32-eb' assert config.arch == CpuArch.ARM64