diff options
author | Paul Spooren <mail@aparcar.org> | 2024-05-03 17:53:52 +0200 |
---|---|---|
committer | Paul Spooren <mail@aparcar.org> | 2024-05-14 12:37:08 +0200 |
commit | be0c7b4e299214287b72fc42650329d6c40e1bfe (patch) | |
tree | 8842ec8b807144490d4fb45b01c0f77376a98581 | |
parent | f046e2883b51fe5cdd610e8a937c00b4972a15e7 (diff) | |
download | openwrt-be0c7b4e299214287b72fc42650329d6c40e1bfe.tar.gz openwrt-be0c7b4e299214287b72fc42650329d6c40e1bfe.tar.bz2 openwrt-be0c7b4e299214287b72fc42650329d6c40e1bfe.zip |
base-files: add update_alternatives function
The APK package manager does not support handling of package
alternatives itself, so implement it via a simple shell script.
Signed-off-by: Paul Spooren <mail@aparcar.org>
-rw-r--r-- | package/base-files/files/lib/functions.sh | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/package/base-files/files/lib/functions.sh b/package/base-files/files/lib/functions.sh index 82ee58f642..1126a93e88 100644 --- a/package/base-files/files/lib/functions.sh +++ b/package/base-files/files/lib/functions.sh @@ -286,6 +286,55 @@ add_group_and_user() { fi } +update_alternatives() { + local root="${IPKG_INSTROOT}" + local action="$1" + local pkgname="$2" + + if [ -f "$root/lib/apk/packages/${pkgname}.alternatives" ]; then + for pkg_alt in $(cat $root/lib/apk/packages/${pkgname}.alternatives); do + local best_prio=0; + local best_src="/bin/busybox"; + pkg_prio=${pkg_alt%%:*}; + pkg_target=${pkg_alt#*:}; + pkg_target=${pkg_target%:*}; + pkg_src=${pkg_alt##*:}; + + if [ -e "$root/$target" ]; then + for alts in $root/lib/apk/packages/*.alternatives; do + for alt in $(cat $alts); do + prio=${alt%%:*}; + target=${alt#*:}; + target=${target%:*}; + src=${alt##*:}; + + if [ "$target" = "$pkg_target" ] && + [ "$src" != "$pkg_src" ] && + [ "$best_prio" -lt "$prio" ]; then + best_prio=$prio; + best_src=$src; + fi + done + done + fi + case "$action" in + install) + if [ "$best_prio" -lt "$pkg_prio" ]; then + ln -sf "$pkg_src" "$root/$pkg_target" + echo "add alternative: $pkg_target -> $pkg_src" + fi + ;; + remove) + if [ "$best_prio" -lt "$pkg_prio" ]; then + ln -sf "$best_src" "$root/$pkg_target" + echo "add alternative: $pkg_target -> $best_src" + fi + ;; + esac + done + fi +} + default_postinst() { local root="${IPKG_INSTROOT}" local pkgname="$(basename ${1%.*})" |