update-kernel: Use policy to detect available packages (list)

It's much slower but works even if `apt-scripts' is not installed.

Signed-off-by: Vitaly Chikunov <vt@altlinux.org>
This commit is contained in:
Виталий Чикунов 2022-04-04 10:04:28 +03:00
parent 476bdba5b6
commit e7301f6828

View File

@ -166,16 +166,13 @@ if [ -n "$list" ]; then
echo "List of available kernels${kernel_flavour:+ for $kernel_flavour flavour}:"
list_files=$(mktemp)
rpm -qa --queryformat '[%{=NAME}\t%{FILENAMES}\n]' 'kernel-*' > "$list_files"
list_extras=$(mktemp)
set -o pipefail
apt-cache list-extras 2>/dev/null | sort > "$list_extras" && extras=1 || extras=
apt-cache pkgnames "kernel-image-${kernel_flavour}" | sort \
| join -a1 -o1.1,2.1 - "$list_extras" \
| sort -V \
| grep '#' \
| grep -v -e '-debuginfo#' -e '^kernel-image-domU-' \
| (
while read -r k j; do
while read -r k; do
pkg=${k%#*}
flv=${pkg#kernel-image-}
ev=${k#*#}
@ -186,7 +183,8 @@ if [ -n "$list" ]; then
ver=${ver%-*}
ev=$epo$ver
[ -z "$extras" ] || [ -n "$j" ] && echo -n " " || echo -n " *"
pkglist=$(apt-cache policy "$k" | grep -w 'pkglist$')
[ -z "$pkglist" ] && echo -n " " || echo -n " *"
echo -n " $pkg-$ver-$rel"
if rpm -q "$pkg-$ver-$rel" >/dev/null 2>&1; then
if [ "$def" = "$ver-$flv-$rel" ]; then
@ -194,7 +192,7 @@ if [ -n "$list" ]; then
else
echo -n ' [installed]'
fi
elif [ -n "$extras" ] && [ -z "$j" ] && [ "$rflv" = "$flv" ]; then
elif [ -n "$pkglist" ] && [ "$rflv" = "$flv" ]; then
echo -n " <--- upgrade"
fi
[ "$rrel" = "$ver-$flv-$rel" ] && echo -n ' RUNNING'
@ -224,10 +222,9 @@ if [ -n "$list" ]; then
if [ $count -eq 0 ]; then
echo "Nothing found."
else
[ -n "$extras" ] && echo "[*] Latest available in repo."
echo "[*] Latest available in repo."
fi
)
rm -f -- "$list_extras"
exit 0
fi