mkosi: Make systemd package filtering more robust
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Tue, 3 Sep 2024 10:53:23 +0000 (12:53 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Tue, 10 Sep 2024 12:56:05 +0000 (14:56 +0200)
Let's not just filter everything with systemd in the name, but instead
use the same list of volatile packages that we install to do the
filtering.

(cherry picked from commit 70ecdbfa230258ee88d3ed42ec8bbcd91e27bba3)

mkosi.conf.d/10-arch/mkosi.prepare
mkosi.conf.d/10-centos-fedora/mkosi.prepare
mkosi.conf.d/10-debian-ubuntu/mkosi.prepare
mkosi.conf.d/10-opensuse/mkosi.prepare

index aac7b3d76f91084a9209203d325b481d1d3a8460..76f67c14e5256f5e2a62a55f388ae02b01b835b8 100755 (executable)
@@ -6,9 +6,11 @@ if [[ "$1" == "build" ]]; then
     exit 0
 fi
 
+mapfile -t PACKAGES < <(jq --raw-output .VolatilePackages[] <"$MKOSI_CONFIG")
+
 DEPS=""
 
-while read -r PACKAGE; do
+for PACKAGE in "${PACKAGES[@]}"; do
     DEPS="$DEPS $(
         pacman --sync --info "$PACKAGE" |
             sed '1,/^$/d' | # Only keep result from first repository (delete everything after first blank line).
@@ -23,11 +25,11 @@ while read -r PACKAGE; do
             sed 's/ *\(.*\):.*/\1/' | # Drop descriptions (everything after first colon for all lines).
             tr '\n' ' ' # Transform newlines to whitespace.
     )"
-done < <(jq --raw-output .VolatilePackages[] <"$MKOSI_CONFIG")
+done
 
 echo "$DEPS" |
     xargs | # Remove extra whitespace.
     tr ' ' '\n' |
-    grep --invert-match --regexp systemd --regexp None | # systemd packages will be installed later on.
+    grep --extended-regexp --invert-match --regexp "$(IFS=\| ; echo "${PACKAGES[*]}")" --regexp None | # systemd packages will be installed later on.
     sort --unique |
     xargs --delimiter '\n' --no-run-if-empty mkosi-install
index 9e74aabae2e78422551012f82c9df4dba2c51b37..9aca0096d5bd81de53c71953462ebb65bd32f681 100755 (executable)
@@ -13,7 +13,7 @@ for DEPS in --requires --recommends --suggests; do
     # --latest-limit=1 is per <name>.<arch> so we have to pass --arch= explicitly to make sure i686 packages
     # are not considered on x86-64.
     dnf repoquery --arch="$DISTRIBUTION_ARCHITECTURE,noarch" --latest-limit=1 --quiet "$DEPS" "${PACKAGES[@]}" |
-        grep --invert-match --regexp systemd --regexp udev --regexp /bin/sh --regexp grubby --regexp sdubby --regexp libcurl-minimal |
+        grep --extended-regexp --invert-match --regexp "$(IFS=\| ; echo "${PACKAGES[*]}")" --regexp /bin/sh --regexp grubby --regexp sdubby --regexp libcurl-minimal |
         sort --unique |
         xargs --delimiter '\n' --no-run-if-empty mkosi-install
 done
index acab113b8c1a8281fd5fae6f18d478f562cd55c2..ffff10d2a4288cb132b12d22a372a6f5c2e8ed75 100755 (executable)
@@ -9,7 +9,8 @@ fi
 mapfile -t PACKAGES < <(jq --raw-output .VolatilePackages[] <"$MKOSI_CONFIG")
 
 apt-cache depends "${PACKAGES[@]}" |
-    grep --invert-match --regexp "<" --regexp "|" --regexp systemd | # Remove e.g. <python3:any> and |dbus-broker like results
+    grep --invert-match --regexp "<" --regexp "|" | # Remove e.g. <python3:any> and |dbus-broker like results
+    grep --extended-regexp --invert-match --regexp "$(IFS=\| ; echo "${PACKAGES[*]}")" |
     grep --extended-regexp "Depends|Suggests|Recommends" |
     sed --quiet 's/.*: //p' | # Get every line with ": " in it and strip it at the same time.
     sort --unique |
index 6ee0af2de9303467ff1fbaadba5f36c6d93db8a8..728b502b133db13e25b0d9c14fb054a2ade893de 100755 (executable)
@@ -6,18 +6,20 @@ if [[ "$1" == "build" ]]; then
     exit 0
 fi
 
+mapfile -t PACKAGES < <(jq --raw-output .VolatilePackages[] <"$MKOSI_CONFIG")
+
 DEPS=""
 
-while read -r PACKAGE; do
+for PACKAGE in "${PACKAGES[@]}"; do
     # zypper's output is not machine readable so we make do with sed instead.
     DEPS="$DEPS\n$(
         zypper info --requires --recommends --suggests "$PACKAGE" |
             sed '/Requires/,$!d' | # Remove everything before Requires line
             sed --quiet 's/^    //p' # All indented lines have dependencies
     )"
-done < <(jq --raw-output .VolatilePackages[] <"$MKOSI_CONFIG")
+done
 
 echo -e "$DEPS" |
-    grep --invert-match --regexp systemd --regexp udev --regexp qemu |
+    grep --extended-regexp --invert-match --regexp "$(IFS=\| ; echo "${PACKAGES[*]}")" --regexp qemu |
     sort --unique |
     xargs --delimiter '\n' --no-run-if-empty mkosi-install