forked from rpms/leapp-repository
92 lines
4.7 KiB
Diff
92 lines
4.7 KiB
Diff
From 11b9733cfe1c7cc10db675fba24d94c0c30f6b6e Mon Sep 17 00:00:00 2001
|
|
From: Michal Hecko <mhecko@redhat.com>
|
|
Date: Thu, 27 Feb 2025 10:18:17 +0100
|
|
Subject: [PATCH 04/37] feat(livemode): exclude DNF cache from the created
|
|
squashfs image
|
|
|
|
Exclude /var/cache/dnf from the generated squashfs image. The DNF
|
|
cache is not needed for the live system that we boot into, since leapp
|
|
will always use DNF cache stored within target userspace container
|
|
(/sysroot/var/lib/leapp/...). Therefore, this optimization saves
|
|
a lot of disk space for the user (2GB->700mb).
|
|
---
|
|
.../libraries/liveimagegenerator.py | 22 ++++++++++++++-----
|
|
.../tests/test_image_generation.py | 6 +++--
|
|
2 files changed, 21 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/repos/system_upgrade/common/actors/livemode/liveimagegenerator/libraries/liveimagegenerator.py b/repos/system_upgrade/common/actors/livemode/liveimagegenerator/libraries/liveimagegenerator.py
|
|
index af8981d8..46118630 100644
|
|
--- a/repos/system_upgrade/common/actors/livemode/liveimagegenerator/libraries/liveimagegenerator.py
|
|
+++ b/repos/system_upgrade/common/actors/livemode/liveimagegenerator/libraries/liveimagegenerator.py
|
|
@@ -24,7 +24,7 @@ def lighten_target_userpace(context):
|
|
tree_to_prune, error)
|
|
|
|
|
|
-def build_squashfs(livemode_config, userspace_info):
|
|
+def build_squashfs(livemode_config, userspace_info, paths_to_exclude=None):
|
|
"""
|
|
Generate the live rootfs image based on the target userspace
|
|
|
|
@@ -34,8 +34,11 @@ def build_squashfs(livemode_config, userspace_info):
|
|
target_userspace_fullpath = userspace_info.path
|
|
squashfs_fullpath = livemode_config.squashfs_fullpath
|
|
|
|
- api.current_logger().info('Building the squashfs image %s from target userspace located at %s',
|
|
- squashfs_fullpath, target_userspace_fullpath)
|
|
+ if not paths_to_exclude:
|
|
+ paths_to_exclude = []
|
|
+
|
|
+ api.current_logger().info('Building the squashfs image %s from target userspace located at %s with excludes: %s',
|
|
+ squashfs_fullpath, target_userspace_fullpath, ', '.join(paths_to_exclude))
|
|
|
|
try:
|
|
if os.path.exists(squashfs_fullpath):
|
|
@@ -44,8 +47,13 @@ def build_squashfs(livemode_config, userspace_info):
|
|
api.current_logger().warning('Failed to remove already existing %s. Full error: %s',
|
|
squashfs_fullpath, error)
|
|
|
|
+ mksquashfs_command = ['mksquashfs', target_userspace_fullpath, squashfs_fullpath]
|
|
+ if paths_to_exclude:
|
|
+ mksquashfs_command.append('-e')
|
|
+ mksquashfs_command.extend(paths_to_exclude)
|
|
+
|
|
try:
|
|
- run(['mksquashfs', target_userspace_fullpath, squashfs_fullpath])
|
|
+ run(mksquashfs_command)
|
|
except CalledProcessError as error:
|
|
raise StopActorExecutionError(
|
|
'Cannot pack the target userspace into a squash image. ',
|
|
@@ -68,5 +76,9 @@ def generate_live_image_if_enabled():
|
|
|
|
with mounting.NspawnActions(base_dir=userspace_info.path) as context:
|
|
lighten_target_userpace(context)
|
|
- squashfs_path = build_squashfs(livemode_config, userspace_info)
|
|
+
|
|
+ # Exclude the DNF cache - we do not need it, leapp mounts /sysroot and uses userspace's dnf cache from there
|
|
+ paths_to_exclude = [os.path.join(userspace_info.path, 'var/cache/dnf')]
|
|
+
|
|
+ squashfs_path = build_squashfs(livemode_config, userspace_info, paths_to_exclude=paths_to_exclude)
|
|
api.produce(LiveModeArtifacts(squashfs_path=squashfs_path))
|
|
diff --git a/repos/system_upgrade/common/actors/livemode/liveimagegenerator/tests/test_image_generation.py b/repos/system_upgrade/common/actors/livemode/liveimagegenerator/tests/test_image_generation.py
|
|
index 5c434a6b..16ae0a09 100644
|
|
--- a/repos/system_upgrade/common/actors/livemode/liveimagegenerator/tests/test_image_generation.py
|
|
+++ b/repos/system_upgrade/common/actors/livemode/liveimagegenerator/tests/test_image_generation.py
|
|
@@ -78,10 +78,12 @@ def test_generate_live_image_if_enabled(monkeypatch, livemode_config, should_pro
|
|
def __exit__(self, *args, **kwargs):
|
|
pass
|
|
|
|
+ def build_squashfs_image_mock(livemode_config, userspace_info, *args, **kwargs):
|
|
+ return '/squashfs'
|
|
+
|
|
monkeypatch.setattr(mounting, 'NspawnActions', NspawnMock)
|
|
monkeypatch.setattr(live_image_generator_lib, 'lighten_target_userpace', lambda context: None)
|
|
- monkeypatch.setattr(live_image_generator_lib, 'build_squashfs',
|
|
- lambda livemode_config, userspace_info: '/squashfs')
|
|
+ monkeypatch.setattr(live_image_generator_lib, 'build_squashfs', build_squashfs_image_mock)
|
|
monkeypatch.setattr(api, 'produce', produce_mocked())
|
|
|
|
live_image_generator_lib.generate_live_image_if_enabled()
|
|
--
|
|
2.49.0
|
|
|