60 lines
1.2 KiB
Text
60 lines
1.2 KiB
Text
|
#!/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
|