Skip to content

Commit c892337

Browse files
committed
Optionally save json manifest to /usr/lib/os-manifest
If metadata would not be cleaned due to CleanPackageMetadata=, write the manifest to the OS image (not to an overlay or sysext).
1 parent 0210c4e commit c892337

File tree

2 files changed

+31
-6
lines changed

2 files changed

+31
-6
lines changed

mkosi/__init__.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989
from mkosi.context import Context
9090
from mkosi.distribution import Distribution, detect_distribution
9191
from mkosi.documentation import show_docs
92-
from mkosi.installer import clean_package_manager_metadata
92+
from mkosi.installer import clean_package_manager_metadata, package_manager_metadata_to_clean
9393
from mkosi.kmod import (
9494
filter_devicetrees,
9595
gen_required_kernel_modules,
@@ -2542,6 +2542,23 @@ def save_manifest(context: Context, manifest: Optional[Manifest]) -> None:
25422542
manifest.write_package_report(f)
25432543

25442544

2545+
def save_manifest_to_image(context: Context, manifest: Optional[Manifest]) -> None:
2546+
"""Write manifest to /usr/lib/os-manifest in the image"""
2547+
if package_manager_metadata_to_clean(context):
2548+
return
2549+
2550+
if not manifest:
2551+
return
2552+
2553+
if context.config.overlay or context.config.output_format.is_extension_image():
2554+
return
2555+
2556+
if manifest.has_data():
2557+
osmanifest = context.root / "usr/lib/os-manifest"
2558+
with osmanifest.open("w") as f:
2559+
manifest.write_json(f)
2560+
2561+
25452562
def print_output_size(path: Path) -> None:
25462563
if path.is_dir():
25472564
log_step(f"{path} size is " + format_bytes(dir_size(path)) + ".")
@@ -3947,6 +3964,7 @@ def build_image(context: Context) -> None:
39473964

39483965
if manifest:
39493966
manifest.record_packages()
3967+
save_manifest_to_image(context, manifest)
39503968
save_manifest(context, manifest)
39513969

39523970
run_selinux_relabel(context)

mkosi/installer/__init__.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -201,16 +201,23 @@ def clean_package_manager_metadata(context: Context) -> None:
201201
Try them all regardless of the distro: metadata is only removed if
202202
the package manager is not present in the image.
203203
"""
204+
pathsToClean = package_manager_metadata_to_clean(context)
205+
rmtree(*pathsToClean, sandbox=context.sandbox)
206+
207+
def package_manager_metadata_to_clean(context: Context) -> list[Path]:
208+
"""
209+
Identifies any metadata paths that should be removed
210+
"""
204211
subdir = context.config.distribution.installer.package_manager(context.config).subdir(context.config)
205212

206213
if context.config.clean_package_metadata == ConfigFeature.disabled:
207-
return
214+
return []
208215

209216
if context.config.clean_package_metadata == ConfigFeature.auto and context.config.output_format in (
210217
OutputFormat.directory,
211218
OutputFormat.tar,
212219
):
213-
return
220+
return []
214221

215222
# If cleaning is not explicitly requested, keep the repository metadata if we're building a directory or
216223
# tar image (which are often used as a base tree for extension images and thus should retain package
@@ -219,7 +226,7 @@ def clean_package_manager_metadata(context: Context) -> None:
219226
executable = context.config.distribution.installer.package_manager(context.config).executable(
220227
context.config
221228
)
222-
remove = []
229+
pathsToClean = []
223230

224231
for tool, paths in (
225232
("rpm", ["var/lib/rpm", "usr/lib/sysimage/rpm"]),
@@ -230,6 +237,6 @@ def clean_package_manager_metadata(context: Context) -> None:
230237
if context.config.clean_package_metadata == ConfigFeature.enabled or not find_binary(
231238
tool, root=context.root
232239
):
233-
remove += [context.root / p for p in paths if (context.root / p).exists()]
240+
pathsToClean += [context.root / p for p in paths if (context.root / p).exists()]
234241

235-
rmtree(*remove, sandbox=context.sandbox)
242+
return pathsToClean

0 commit comments

Comments
 (0)