diff options
author | Patrick McDermott <patrick.mcdermott@libiquity.com> | 2020-11-11 16:49:17 (EST) |
---|---|---|
committer | Patrick McDermott <patrick.mcdermott@libiquity.com> | 2020-11-22 16:57:57 (EST) |
commit | dd3d64da2f1fb5966b7b1bd36b20ab902f1ccedd (patch) | |
tree | 224dbdae4be0cbac547aa67200fbd0a0fef5f687 /opkg | |
parent | 0a3062c451449727488fa29236822c2715ceca81 (diff) |
opkg: Save /bin/busybox and make links
This works around a regression in opkg-lede that thoroughly breaks
upgrading the busybox package and also allows all of busybox's utility
links to be managed using update-alternatives.
/bin/busybox is copied instead of hard linked, because /var might be on
a separate file system (e.g. tmpfs).
Diffstat (limited to 'opkg')
-rwxr-xr-x | opkg | 45 |
1 files changed, 44 insertions, 1 deletions
@@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/busybox sh # # opkg - Multiarch support wrapper for opkg # @@ -19,6 +19,45 @@ 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= @@ -80,9 +119,13 @@ main() return 1 fi + save_bb + if /usr/bin/opkg-cl "${@}"; then + unsave_bb return 0 else + unsave_bb return ${?} fi } |