#!/bin/busybox sh # # opkg - Multiarch support wrapper for opkg # # Copyright (C) 2020 Patrick McDermott # # This program 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. # # This program 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 this program. If not, see <http://www.gnu.org/licenses/>. set -eu BB='/bin/busybox' BIN='/var/lib/opkg/bin' save_bb() { local file= local link= local name= local prio= "${BB}" mkdir "${BIN}" 2>/dev/null || : "${BB}" cp -p "${BB}" "${BIN}/busybox" while read file; do case "${file}" in /bin/busybox) ;; /bin/?* | /sbin/?* | /usr/bin/?* | /usr/sbin/?*) "${BB}" ln -sf 'busybox' "${BIN}/${file##*/}" ;; esac done 0<<-EOF $(/usr/bin/opkg-cl files busybox) EOF while read link name prio; do "${BB}" ln -sf 'busybox' "${BIN}/${link##*/}" done 0</usr/share/busybox/alternatives export PATH="${PATH}:${BIN}" export OPKG_BUSYBOX_SAVED='1' return 0 } unsave_bb() { rm -f "${BIN}/"* } main() { local first_arg= local arch_arg= local arg= first_arg=true arch_arg='' for arg in "${@}"; do if ${first_arg}; then set -- if [ -e '/etc/opkg/opkg.conf' ]; then set -- "${@}" --conf '/etc/opkg/opkg.conf' fi set -- "${@}" \ --add-arch all:100 \ --add-arch "$(cat /etc/proteanos_arch):50" \ --add-arch src:100 first_arg=false elif [ -n "${arch_arg}" ]; then case "${arg}" in -* | '') printf '%s: Option "%s" requires an argument\n'\ "${0}" "${arch_arg}" 1>&2 return 1 esac set -- "${@}" --add-arch "${arg}:100" arch_arg='' continue fi case "${arg}" in -a | --host-architecture) arch_arg="${arg}" continue ;; -a*) arg="${arg#-a}" set -- "${@}" --add-arch "${arg}:100" continue ;; --host-architecture=*) arch_arg="${arg%=*}" arg="${arg#--host-architecture=}" if [ -z "${arg}" ]; then printf '%s: Option "%s" requires '$(: \ )'an argument\n' \ "${0}" "${arch_arg}" 1>&2 return 1 fi set -- "${@}" --add-arch "${arg}:100" arch_arg='' continue ;; esac set -- "${@}" "${arg}" done if [ -n "${arch_arg}" ]; then printf '%s: Option "%s" requires an argument\n' \ "${0}" "${arch_arg}" 1>&2 return 1 fi save_bb if /usr/bin/opkg-cl "${@}"; then unsave_bb return 0 else unsave_bb return ${?} fi } main "${@}"