#! /usr/bin/env bash
## vim:set ts=4 sw=4 et:
set -e; set -o pipefail
argv0=$0; argv0abs="$(readlink -fn "$argv0")"; argv0dir="$(dirname "$argv0abs")"

# list all system packages that are installed in the image
# using a rootless Podman container
# Copyright (C) Markus Franz Xaver Johannes Oberhumer

image="$("$argv0dir/10-create-image.sh" --print-image)"

podman image list "$image"
echo
podman image tree "$image"

echo 'Packages:'
flags=( --read-only --rm --pull=never )
flags+=( --cap-drop=all )               # drop all capabilities
flags+=( --network=none )               # no network needed
podman run "${flags[@]}" "$image" bash -c $'dpkg -l | sed \'s/ *$//\' | LC_ALL=C sort'

echo
echo 'Packages sorted by Installed-Size:'
podman run "${flags[@]}" "$image" bash -c $'awk \'
BEGIN {
    arch = "UNKNOWN"; size = 0; package = "UNKNOWN";
}
{
    if ($1 == "Architecture:") arch = $2;
    if ($1 == "Installed-Size:") size = $2;
    if ($1 == "Package:") package = $2;
    if ($1 == "") {
        printf("%9d %-40s %s\\n", size, package, arch);
        count += 1; total += size;
        arch = "UNKNOWN"; size = 0; package = "UNKNOWN";
    }
}
END {
    printf("%9d ===== TOTAL (%d packages)\\n", total, count);
}
\' /var/lib/dpkg/status | LC_ALL=C sort -rn'
