[openwrt/openwrt] base-files: add update_alternatives function
LEDE Commits
lede-commits at lists.infradead.org
Fri May 17 13:22:44 PDT 2024
aparcar pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/3010ab87bc5eb4278a8d550c7ad576836fbbbdf9
commit 3010ab87bc5eb4278a8d550c7ad576836fbbbdf9
Author: Paul Spooren <mail at aparcar.org>
AuthorDate: Fri May 3 17:53:52 2024 +0200
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 at aparcar.org>
---
package/base-files/files/lib/functions.sh | 49 +++++++++++++++++++++++++++++++
1 file changed, 49 insertions(+)
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%.*})"
More information about the lede-commits
mailing list