diff --git a/mkosi/mkosi.conf.d/arch/mkosi.prepare b/mkosi/mkosi.conf.d/arch/mkosi.prepare index 76f67c14e5..052ce92865 100755 --- a/mkosi/mkosi.conf.d/arch/mkosi.prepare +++ b/mkosi/mkosi.conf.d/arch/mkosi.prepare @@ -17,14 +17,16 @@ for PACKAGE in "${PACKAGES[@]}"; do sed --quiet 's/^Depends On *: //p' # Filter out everything except "Depends On:" line and fetch dependencies from it. )" - DEPS="$DEPS $( - pacman --sync --info "$PACKAGE" | - sed '1,/^$/d' | # Only keep result from first repository (delete everything after first blank line). - sed --quiet '/Optional Deps/,/Conflicts With/{/Conflicts With/!p}' | # Get every line from "Optional Deps" (inclusive) until "Conflicts With" (exclusive). - sed 's/Optional Deps *: //' | # Drop "Optional Deps :" from first line. - sed 's/ *\(.*\):.*/\1/' | # Drop descriptions (everything after first colon for all lines). - tr '\n' ' ' # Transform newlines to whitespace. - )" + if ! ((SYSTEMD_REQUIRED_DEPS_ONLY)); then + DEPS="$DEPS $( + pacman --sync --info "$PACKAGE" | + sed '1,/^$/d' | # Only keep result from first repository (delete everything after first blank line). + sed --quiet '/Optional Deps/,/Conflicts With/{/Conflicts With/!p}' | # Get every line from "Optional Deps" (inclusive) until "Conflicts With" (exclusive). + sed 's/Optional Deps *: //' | # Drop "Optional Deps :" from first line. + sed 's/ *\(.*\):.*/\1/' | # Drop descriptions (everything after first colon for all lines). + tr '\n' ' ' # Transform newlines to whitespace. + )" + fi done echo "$DEPS" | diff --git a/mkosi/mkosi.conf.d/centos-fedora/mkosi.prepare b/mkosi/mkosi.conf.d/centos-fedora/mkosi.prepare index 1e5bd21995..9e5185bbc6 100755 --- a/mkosi/mkosi.conf.d/centos-fedora/mkosi.prepare +++ b/mkosi/mkosi.conf.d/centos-fedora/mkosi.prepare @@ -8,7 +8,12 @@ fi mapfile -t PACKAGES < <(jq --raw-output .VolatilePackages[] <"$MKOSI_CONFIG") -for DEPS in --requires --recommends --suggests; do +DEP_TYPES=(--requires) +if ! ((SYSTEMD_REQUIRED_DEPS_ONLY)); then + DEP_TYPES+=(--recommends --suggests) +fi + +for DEPS in "${DEP_TYPES[@]}"; do # We need --latest-limit=1 to only consider the newest version of the packages. # --latest-limit=1 is per . so we have to pass --arch= explicitly to make sure i686 packages # are not considered on x86-64. diff --git a/mkosi/mkosi.conf.d/debian-ubuntu/mkosi.prepare b/mkosi/mkosi.conf.d/debian-ubuntu/mkosi.prepare index bf2c5eb91f..22be35f823 100755 --- a/mkosi/mkosi.conf.d/debian-ubuntu/mkosi.prepare +++ b/mkosi/mkosi.conf.d/debian-ubuntu/mkosi.prepare @@ -22,9 +22,14 @@ 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)" ) + + if ! ((SYSTEMD_REQUIRED_DEPS_ONLY)); then + PATTERNS+=( + "?and(?reverse-recommends(?exact-name($PACKAGE)), $COMMON)" + "?and(?reverse-suggests(?exact-name($PACKAGE)), $COMMON)" + ) + fi done mkosi-install "${PATTERNS[@]}" diff --git a/mkosi/mkosi.conf.d/opensuse/mkosi.prepare b/mkosi/mkosi.conf.d/opensuse/mkosi.prepare index 728b502b13..32a9312d29 100755 --- a/mkosi/mkosi.conf.d/opensuse/mkosi.prepare +++ b/mkosi/mkosi.conf.d/opensuse/mkosi.prepare @@ -9,11 +9,15 @@ fi mapfile -t PACKAGES < <(jq --raw-output .VolatilePackages[] <"$MKOSI_CONFIG") DEPS="" +DEP_TYPES=(--requires) +if ! ((SYSTEMD_REQUIRED_DEPS_ONLY)); then + DEP_TYPES+=(--recommends --suggests) +fi 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" | + zypper info "${DEP_TYPES[@]}" "$PACKAGE" | sed '/Requires/,$!d' | # Remove everything before Requires line sed --quiet 's/^ //p' # All indented lines have dependencies )" diff --git a/mkosi/mkosi.images/exitrd/mkosi.conf b/mkosi/mkosi.images/exitrd/mkosi.conf index 8d8b7e9761..4a811e15e2 100644 --- a/mkosi/mkosi.images/exitrd/mkosi.conf +++ b/mkosi/mkosi.images/exitrd/mkosi.conf @@ -3,6 +3,9 @@ [Output] Format=directory +[Build] +Environment=SYSTEMD_REQUIRED_DEPS_ONLY=1 + [Content] Bootable=no Locale=C.UTF-8 diff --git a/mkosi/mkosi.images/exitrd/mkosi.conf.d/arch.conf b/mkosi/mkosi.images/exitrd/mkosi.conf.d/arch.conf index b5f3194a84..8ccf722238 100644 --- a/mkosi/mkosi.images/exitrd/mkosi.conf.d/arch.conf +++ b/mkosi/mkosi.images/exitrd/mkosi.conf.d/arch.conf @@ -4,6 +4,7 @@ Distribution=arch [Content] +PrepareScripts=%D/mkosi/mkosi.conf.d/arch/mkosi.prepare VolatilePackages= systemd systemd-libs diff --git a/mkosi/mkosi.images/exitrd/mkosi.conf.d/centos-fedora.conf b/mkosi/mkosi.images/exitrd/mkosi.conf.d/centos-fedora.conf index a1fa32b786..1665f8b471 100644 --- a/mkosi/mkosi.images/exitrd/mkosi.conf.d/centos-fedora.conf +++ b/mkosi/mkosi.images/exitrd/mkosi.conf.d/centos-fedora.conf @@ -5,5 +5,6 @@ Distribution=|centos Distribution=|fedora [Content] +PrepareScripts=%D/mkosi/mkosi.conf.d/centos-fedora/mkosi.prepare VolatilePackages= systemd-standalone-shutdown diff --git a/mkosi/mkosi.images/exitrd/mkosi.conf.d/debian.conf b/mkosi/mkosi.images/exitrd/mkosi.conf.d/debian.conf index 6ca310cbc2..c745a1a1d3 100644 --- a/mkosi/mkosi.images/exitrd/mkosi.conf.d/debian.conf +++ b/mkosi/mkosi.images/exitrd/mkosi.conf.d/debian.conf @@ -4,5 +4,6 @@ Distribution=debian [Content] +PrepareScripts=%D/mkosi/mkosi.conf.d/debian-ubuntu/mkosi.prepare VolatilePackages= systemd-standalone-shutdown diff --git a/mkosi/mkosi.images/exitrd/mkosi.conf.d/opensuse.conf b/mkosi/mkosi.images/exitrd/mkosi.conf.d/opensuse.conf index 37f6220ea0..7acc481389 100644 --- a/mkosi/mkosi.images/exitrd/mkosi.conf.d/opensuse.conf +++ b/mkosi/mkosi.images/exitrd/mkosi.conf.d/opensuse.conf @@ -4,6 +4,7 @@ Distribution=opensuse [Content] +PrepareScripts=%D/mkosi/mkosi.conf.d/opensuse/mkosi.prepare Packages= diffutils grep diff --git a/mkosi/mkosi.images/exitrd/mkosi.conf.d/ubuntu.conf b/mkosi/mkosi.images/exitrd/mkosi.conf.d/ubuntu.conf index 9a7e1d8cbb..742d998504 100644 --- a/mkosi/mkosi.images/exitrd/mkosi.conf.d/ubuntu.conf +++ b/mkosi/mkosi.images/exitrd/mkosi.conf.d/ubuntu.conf @@ -4,6 +4,7 @@ Distribution=ubuntu [Content] +PrepareScripts=%D/mkosi/mkosi.conf.d/debian-ubuntu/mkosi.prepare VolatilePackages= libsystemd-shared libsystemd0 diff --git a/mkosi/mkosi.images/initrd/mkosi.conf b/mkosi/mkosi.images/initrd/mkosi.conf index b54fe2daf4..2b731d4397 100644 --- a/mkosi/mkosi.images/initrd/mkosi.conf +++ b/mkosi/mkosi.images/initrd/mkosi.conf @@ -6,6 +6,9 @@ Include= %D/mkosi/mkosi.sanitizers %D/mkosi/mkosi.coverage +[Build] +Environment=SYSTEMD_REQUIRED_DEPS_ONLY=1 + [Content] ExtraTrees=%D/mkosi/mkosi.extra.common diff --git a/mkosi/mkosi.images/initrd/mkosi.conf.d/arch.conf b/mkosi/mkosi.images/initrd/mkosi.conf.d/arch.conf index 99e039d1dc..74f4bee9c9 100644 --- a/mkosi/mkosi.images/initrd/mkosi.conf.d/arch.conf +++ b/mkosi/mkosi.images/initrd/mkosi.conf.d/arch.conf @@ -4,6 +4,7 @@ Distribution=arch [Content] +PrepareScripts=%D/mkosi/mkosi.conf.d/arch/mkosi.prepare Packages= btrfs-progs tpm2-tools diff --git a/mkosi/mkosi.images/initrd/mkosi.conf.d/centos-fedora.conf b/mkosi/mkosi.images/initrd/mkosi.conf.d/centos-fedora.conf index 5c84cc4cd4..de1c8947a2 100644 --- a/mkosi/mkosi.images/initrd/mkosi.conf.d/centos-fedora.conf +++ b/mkosi/mkosi.images/initrd/mkosi.conf.d/centos-fedora.conf @@ -5,6 +5,7 @@ Distribution=|centos Distribution=|fedora [Content] +PrepareScripts=%D/mkosi/mkosi.conf.d/centos-fedora/mkosi.prepare Packages= tpm2-tools diff --git a/mkosi/mkosi.images/initrd/mkosi.conf.d/debian-ubuntu.conf b/mkosi/mkosi.images/initrd/mkosi.conf.d/debian-ubuntu.conf index 577bf8f59f..b2fb3a06cb 100644 --- a/mkosi/mkosi.images/initrd/mkosi.conf.d/debian-ubuntu.conf +++ b/mkosi/mkosi.images/initrd/mkosi.conf.d/debian-ubuntu.conf @@ -5,6 +5,7 @@ Distribution=|debian Distribution=|ubuntu [Content] +PrepareScripts=%D/mkosi/mkosi.conf.d/debian-ubuntu/mkosi.prepare Packages= btrfs-progs tpm2-tools diff --git a/mkosi/mkosi.images/initrd/mkosi.conf.d/opensuse.conf b/mkosi/mkosi.images/initrd/mkosi.conf.d/opensuse.conf index deaa273b4d..18142a6dbd 100644 --- a/mkosi/mkosi.images/initrd/mkosi.conf.d/opensuse.conf +++ b/mkosi/mkosi.images/initrd/mkosi.conf.d/opensuse.conf @@ -4,6 +4,7 @@ Distribution=opensuse [Content] +PrepareScripts=%D/mkosi/mkosi.conf.d/opensuse/mkosi.prepare Packages= btrfs-progs kmod diff --git a/mkosi/mkosi.images/minimal-base/mkosi.conf b/mkosi/mkosi.images/minimal-base/mkosi.conf index b51ac638d6..be80db6cc1 100644 --- a/mkosi/mkosi.images/minimal-base/mkosi.conf +++ b/mkosi/mkosi.images/minimal-base/mkosi.conf @@ -3,6 +3,9 @@ [Output] Format=directory +[Build] +Environment=SYSTEMD_REQUIRED_DEPS_ONLY=1 + [Content] Bootable=no Locale=C.UTF-8 diff --git a/mkosi/mkosi.images/minimal-base/mkosi.conf.d/arch.conf b/mkosi/mkosi.images/minimal-base/mkosi.conf.d/arch.conf index 044199a6c1..070506b8f5 100644 --- a/mkosi/mkosi.images/minimal-base/mkosi.conf.d/arch.conf +++ b/mkosi/mkosi.images/minimal-base/mkosi.conf.d/arch.conf @@ -4,6 +4,7 @@ Distribution=arch [Content] +PrepareScripts=%D/mkosi/mkosi.conf.d/arch/mkosi.prepare Packages= inetutils iproute diff --git a/mkosi/mkosi.images/minimal-base/mkosi.conf.d/centos-fedora.conf b/mkosi/mkosi.images/minimal-base/mkosi.conf.d/centos-fedora.conf index e9893ad989..6d4caebef4 100644 --- a/mkosi/mkosi.images/minimal-base/mkosi.conf.d/centos-fedora.conf +++ b/mkosi/mkosi.images/minimal-base/mkosi.conf.d/centos-fedora.conf @@ -5,6 +5,7 @@ Distribution=|centos Distribution=|fedora [Content] +PrepareScripts=%D/mkosi/mkosi.conf.d/centos-fedora/mkosi.prepare Packages= hostname iproute diff --git a/mkosi/mkosi.images/minimal-base/mkosi.conf.d/debian-ubuntu.conf b/mkosi/mkosi.images/minimal-base/mkosi.conf.d/debian-ubuntu.conf index d524ec17fe..ddf1a18807 100644 --- a/mkosi/mkosi.images/minimal-base/mkosi.conf.d/debian-ubuntu.conf +++ b/mkosi/mkosi.images/minimal-base/mkosi.conf.d/debian-ubuntu.conf @@ -5,6 +5,7 @@ Distribution=|debian Distribution=|ubuntu [Content] +PrepareScripts=%D/mkosi/mkosi.conf.d/debian-ubuntu/mkosi.prepare Packages= hostname iproute2 diff --git a/mkosi/mkosi.images/minimal-base/mkosi.conf.d/opensuse.conf b/mkosi/mkosi.images/minimal-base/mkosi.conf.d/opensuse.conf index 3d891b8ed0..4f96c7d34b 100644 --- a/mkosi/mkosi.images/minimal-base/mkosi.conf.d/opensuse.conf +++ b/mkosi/mkosi.images/minimal-base/mkosi.conf.d/opensuse.conf @@ -4,6 +4,7 @@ Distribution=opensuse [Content] +PrepareScripts=%D/mkosi/mkosi.conf.d/opensuse/mkosi.prepare Packages= diffutils grep