diff options
Diffstat (limited to 'applications/luci-app-package-manager/root/usr/libexec/package-manager-call')
-rwxr-xr-x | applications/luci-app-package-manager/root/usr/libexec/package-manager-call | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/applications/luci-app-package-manager/root/usr/libexec/package-manager-call b/applications/luci-app-package-manager/root/usr/libexec/package-manager-call new file mode 100755 index 0000000000..789759d40c --- /dev/null +++ b/applications/luci-app-package-manager/root/usr/libexec/package-manager-call @@ -0,0 +1,111 @@ +#!/bin/sh + +. /usr/share/libubox/jshn.sh + +action=$1 +shift + +if [ -f /usr/bin/apk ]; then + ipkg_bin="apk" +else + ipkg_bin="opkg" +fi + +case "$action" in + list-installed) + if [ $ipkg_bin = "apk" ]; then + $ipkg_bin list -I --full 2>/dev/null + else + cat /usr/lib/opkg/status + fi + ;; + list-available) + if [ $ipkg_bin = "apk" ]; then + $ipkg_bin list --full 2>/dev/null + else + lists_dir=$(sed -rne 's#^lists_dir \S+ (\S+)#\1#p' /etc/opkg.conf /etc/opkg/*.conf 2>/dev/null | tail -n 1) + find "${lists_dir:-/usr/lib/opkg/lists}" -type f '!' -name '*.sig' | xargs -r gzip -cd + fi + ;; + install|update|remove) + ( + cmd="$ipkg_bin" + + # APK have command renamed + if [ $ipkg_bin = "apk" ]; then + case "$action" in + install) + action="add" + ;; + update) + action="upgrade" + ;; + remove) + action="del" + ;; + esac + fi + + # APK have --autoremove enabled by default and + # --force-removal-of-dependent-packages as -r option + if [ $ipkg_bin = "apk" ]; then + while [ -n "$1" ]; do + case "$1" in + --force-removal-of-dependent-packages) + cmd="$cmd -r" + shift + ;; + --force-overwrite) + cmd="$cmd $1" + shift + ;; + -*) + shift + ;; + *) + break + ;; + esac + done + else + while [ -n "$1" ]; do + case "$1" in + --autoremove|--force-overwrite|--force-removal-of-dependent-packages) + ipkg_bin="$apk $1" + shift + ;; + -*) + shift + ;; + *) + break + ;; + esac + done + fi + + if flock -x 200; then + $cmd $action "$@" </dev/null >/tmp/ipkg.out 2>/tmp/ipkg.err + code=$? + stdout=$(cat /tmp/ipkg.out) + stderr=$(cat /tmp/ipkg.err) + else + code=255 + stderr="Failed to acquire lock" + fi + + json_init + json_add_int code $code + [ -n "$stdout" ] && json_add_string stdout "$stdout" + [ -n "$stderr" ] && json_add_string stderr "$stderr" + json_dump + ) 200>/tmp/ipkg.lock + + rm -f /tmp/ipkg.lock /tmp/ipkg.err /tmp/ipkg.out + ;; + *) + echo "Usage: $0 {list-installed|list-available}" >&2 + echo " $0 {install|upgrade|remove} pkg[ pkg...]" >&2 + exit 1 + ;; +esac |