summaryrefslogtreecommitdiffstats
path: root/mkosi.images/system/mkosi.conf.d/10-debian-ubuntu/mkosi.postinst
blob: 314f235f5feb301b3235a1cf9244ace3704a6b44 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/bin/bash
# SPDX-License-Identifier: LGPL-2.1-or-later
set -e

# By default Suggests are not installed (and often Recommends are disabled too), which means we will miss
# the dlopen optional dependencies, but the tests need them, so parse them from the package metadata and
# install them. This is not an issue when building locally, as the build and runtime images are the same,
# so they would get installed as build dependencies anyway.

if [ "$1" = "build" ] || ! ((NO_BUILD)); then
    exit 0
fi

# Query the Recommends and Suggests of all systemd packages, by matching on the version
systemd_version="$(dpkg-query --showformat '${Version}' --show systemd)"
mapfile -t systemd_packages < <( dpkg --list | grep '^ii' | grep "$systemd_version" | awk '{print $2}' | tr '\n' ' ' )
extra_packages=()
# shellcheck disable=SC2068
for package in ${systemd_packages[@]}; do
    # We are looking for dlopens, so filter for libraries
    mapfile -t -O "${#extra_packages[@]}" extra_packages < <(dpkg-query --showformat '${Suggests}' --show "$package" | sed -e "s/, /\n/g" -e "s/|.*//" | grep "lib")
    mapfile -t -O "${#extra_packages[@]}" extra_packages < <(dpkg-query --showformat '${Recommends}' --show "$package" | sed -e "s/, /\n/g" -e "s/|.*//" | grep "lib")
done

if [ "${#extra_packages[@]}" -eq 0 ]; then
    exit 0
fi

apt install "${extra_packages[@]}"