1
0
mirror of https://github.com/systemd/systemd.git synced 2025-01-09 01:18:19 +03:00

mkosi: Use apt patterns to install dependencies on Debian/Ubuntu

Instead of parsing the human readable output of apt-cache, let's
use apt patterns to figure out the dependencies.

We also filter out virtual packages as apt will fail and say we need
to install an implementation of the virtual package even if a package
that provides the virtual package is already installed.
This commit is contained in:
Daan De Meyer 2024-09-03 15:18:49 +02:00
parent 70ecdbfa23
commit 89c579788d

View File

@ -8,10 +8,23 @@ fi
mapfile -t PACKAGES < <(jq --raw-output .VolatilePackages[] <"$MKOSI_CONFIG") mapfile -t PACKAGES < <(jq --raw-output .VolatilePackages[] <"$MKOSI_CONFIG")
apt-cache depends "${PACKAGES[@]}" | PATTERNS=()
grep --invert-match --regexp "<" --regexp "|" | # Remove e.g. <python3:any> and |dbus-broker like results
grep --extended-regexp --invert-match --regexp "$(IFS=\| ; echo "${PACKAGES[*]}")" | # The ?reverse-depends() pattern for some weird reason lists all the packages providing systemd-sysusers
grep --extended-regexp "Depends|Suggests|Recommends" | # instead of just excluding it, so we add another pattern to filter out anything that conflicts with
sed --quiet 's/.*: //p' | # Get every line with ": " in it and strip it at the same time. # any other systemd packages so we filter out both opensysusers and systemd-sysusers-standalone. We also
sort --unique | # exclude packages that belong to the systemd source package as we'll install these later. Finally, we
xargs --delimiter '\n' --no-run-if-empty mkosi-install # exclude virtual packages as trying to install these makes apt fail with an error saying we need to install
# a specific implementation even if one is already installed.
COMMON="?not(?virtual), ?not(?reverse-conflicts(?source-package(^systemd$))), ?not(?reverse-breaks(?source-package(^systemd$))), ?not(?source-package(^systemd$))"
for PACKAGE in "${PACKAGES[@]}"; do
# Get all the dependencies of the systemd packages including recommended and suggested dependencies.
PATTERNS+=(
"?and(?reverse-depends(?exact-name($PACKAGE)), $COMMON)"
"?and(?reverse-recommends(?exact-name($PACKAGE)), $COMMON)"
"?and(?reverse-suggests(?exact-name($PACKAGE)), $COMMON)"
)
done
mkosi-install "${PATTERNS[@]}"