# "opkg" command # # Copyright (C) 2014, 2015 Patrick McDermott # # This file is part of the ProteanOS Development Kit. # # The ProteanOS Development Kit is free software: you can redistribute # it and/or modify it under the terms of the GNU General Public License # as published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # The ProteanOS Development Kit is distributed in the hope that it # will be useful, but WITHOUT ANY WARRANTY; without even the implied # warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with the ProteanOS Development Kit. If not, see # . _cmd_opkg_opks= _cmd_opkg_fini() { case "${_cmd_opkg_opks}" in *[!\ ]*) rm -f -- ${_cmd_opkg_opks} # Hack to avoid this code branch if the function is # called again in response to a signal. _cmd_opkg_opks='' ;; esac } cmd_opkg_main() { local root= local dev= local first_arg= local install_cmd= local arg= local new_fname= local es= if [ ${#} -lt 1 ]; then print_cmd_usage 'opkg' >&2 return 1 fi root="${1}" shift 1 dev='' if is_block "${root}"; then dev="${root}" if ! root="$(block_mount "${dev}")"; then return 2 fi fi first_arg=true install_cmd=false _cmd_opkg_opks='' for arg in "${@}"; do if ${first_arg}; then set -- first_arg=false fi if ${install_cmd}; then case "${arg}" in *.opk|*.ipk|*.deb) if ! [ -e "${arg}" ]; then set -- "${@}" "${arg}" continue fi rand new_fname="/tmp/prokit.${rand_x}.opk" _cmd_opkg_opks="$(printf '%s %s\n' \ "${_cmd_opkg_opks}" \ "${root}${new_fname}")" cp -- "${arg}" "${root}${new_fname}" set -- "${@}" "${new_fname}" ;; *) set -- "${@}" "${arg}" ;; esac else set -- "${@}" "${arg}" if [ "x${arg}" = 'xinstall' ]; then install_cmd=true fi fi done if ! profile_detect "${root}"; then [ "x${dev}" != 'x' ] && block_umount "${root}" return 2 fi if ! session_begin "${root}" . false; then _cmd_opkg_fini [ "x${dev}" != 'x' ] && block_umount "${root}" return 2 fi es=0 session_exec opkg "${@}" || es=${?} _cmd_opkg_fini session_end [ "x${dev}" != 'x' ] && block_umount "${root}" return ${es} } cmd_opkg_register() { register_cmd 'opkg' } __init cmd_opkg_register