123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- #!/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|upgrade|remove)
- (
- cmd="$ipkg_bin"
- # APK have command renamed
- if [ $ipkg_bin = "apk" ]; then
- case "$action" in
- install)
- action="add"
- ;;
- update)
- action="update"
- ;;
- upgrade)
- 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
- pkmcmd="$cmd $action $@"
- $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 "$pkmcmd" ] && json_add_string pkmcmd "$pkmcmd"
- [ -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|update}" >&2
- echo " $0 {install|upgrade|remove} pkg[ pkg...]" >&2
- exit 1
- ;;
- esac
|