summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Spooren <mail@aparcar.org>2024-05-03 17:53:52 +0200
committerPaul Spooren <mail@aparcar.org>2024-05-17 23:21:26 +0300
commit3010ab87bc5eb4278a8d550c7ad576836fbbbdf9 (patch)
treeceff357d41451f0e045d879b4d589667345e42a4
parentd788ab376f859164df84e2054cbbbb0921943c5b (diff)
downloadopenwrt-3010ab87bc5eb4278a8d550c7ad576836fbbbdf9.tar.gz
openwrt-3010ab87bc5eb4278a8d550c7ad576836fbbbdf9.tar.bz2
openwrt-3010ab87bc5eb4278a8d550c7ad576836fbbbdf9.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.sh49
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%.*})"