diff options
Diffstat (limited to 'applications/luci-app-opkg/root/usr/libexec/opkg-call')
-rwxr-xr-x | applications/luci-app-opkg/root/usr/libexec/opkg-call | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/applications/luci-app-opkg/root/usr/libexec/opkg-call b/applications/luci-app-opkg/root/usr/libexec/opkg-call new file mode 100755 index 000000000..593097711 --- /dev/null +++ b/applications/luci-app-opkg/root/usr/libexec/opkg-call @@ -0,0 +1,59 @@ +#!/bin/sh + +. /usr/share/libubox/jshn.sh + +action=$1 +shift + +case "$action" in + list-installed) + cat /usr/lib/opkg/status + ;; + list-available) + 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:-/tmp/opkg-lists}" -type f '!' -name '*.sig' | xargs -r gzip -cd + ;; + install|update|remove) + ( + opkg="opkg" + + while [ -n "$1" ]; do + case "$1" in + --autoremove|--force-overwrite|--force-removal-of-dependent-packages) + opkg="$opkg $1" + shift + ;; + -*) + shift + ;; + *) + break + ;; + esac + done + + if flock -x 200; then + $opkg $action "$@" </dev/null >/tmp/opkg.out 2>/tmp/opkg.err + code=$? + stdout=$(cat /tmp/opkg.out) + stderr=$(cat /tmp/opkg.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/opkg.lock + + rm -f /tmp/opkg.lock /tmp/opkg.err /tmp/opkg.out + ;; + *) + echo "Usage: $0 {list-installed|list-available}" >&2 + echo " $0 {install|upgrade|remove} pkg[ pkg...]" >&2 + exit 1 + ;; +esac |