]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
mkosi: implement metadata cleanup for apt and dpkg 794/head
authorLuca Boccassi <luca.boccassi@microsoft.com>
Tue, 7 Sep 2021 22:35:24 +0000 (23:35 +0100)
committerLuca Boccassi <luca.boccassi@microsoft.com>
Wed, 8 Sep 2021 09:39:33 +0000 (10:39 +0100)
mkosi/__init__.py

index 602fe997330692cad2b70ee13b619c3bc4818fc4..04d60d6fafd57a969cb3219f02a502b011c4cd90 100644 (file)
@@ -1753,6 +1753,41 @@ def clean_tdnf_metadata(root: Path, always: bool) -> None:
             unlink_try_hard(path)
 
 
+def clean_apt_metadata(root: Path, always: bool) -> None:
+    """Remove apt metadata if /usr/bin/apt is not present in the image"""
+    paths = [
+        root / "var/lib/apt",
+        root / "var/log/apt",
+        root / "var/cache/apt",
+    ]
+
+    cond = always or not os.access(root / "usr/bin/apt", os.F_OK, follow_symlinks=False)
+
+    if not cond or not any(path.exists() for path in paths):
+        return
+
+    with complete_step("Cleaning apt metadata…"):
+        for path in paths:
+            unlink_try_hard(path)
+
+
+def clean_dpkg_metadata(root: Path, always: bool) -> None:
+    """Remove dpkg metadata if /usr/bin/dpkg is not present in the image"""
+    paths = [
+        root / "var/lib/dpkg",
+        root / "var/log/dpkg.log",
+    ]
+
+    cond = always or not os.access(root / "usr/bin/dpkg", os.F_OK, follow_symlinks=False)
+
+    if not cond or not any(path.exists() for path in paths):
+        return
+
+    with complete_step("Cleaning dpkg metadata…"):
+        for path in paths:
+            unlink_try_hard(path)
+
+
 def clean_package_manager_metadata(args: CommandLineArguments, root: Path) -> None:
     """Remove package manager metadata
 
@@ -1770,6 +1805,8 @@ def clean_package_manager_metadata(args: CommandLineArguments, root: Path) -> No
     clean_yum_metadata(root, always=args.clean_package_metadata is True)
     clean_rpm_metadata(root, always=args.clean_package_metadata is True)
     clean_tdnf_metadata(root, always=args.clean_package_metadata is True)
+    clean_apt_metadata(root, always=args.clean_package_metadata is True)
+    clean_dpkg_metadata(root, always=args.clean_package_metadata is True)
     # FIXME: implement cleanup for other package managers