From 01d24ef22778337ed04cf9d6444b1be57b6a1e1a Mon Sep 17 00:00:00 2001 From: Stefan Becker Date: Tue, 9 May 2023 16:24:49 +0300 Subject: [PATCH 1/2] Skip binfmt_misc register when unnecessary (#693) This improves commit 6dc45a80e764eacd6e311c32164b623bbe7f8e08 Check if interpreter is already registered before running the register step. This avoids unnecessary "sudo" execution which may require user interaction for the password. Improves on #685 --- build-docker.sh | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/build-docker.sh b/build-docker.sh index 7d0b5ad..4fdd89c 100755 --- a/build-docker.sh +++ b/build-docker.sh @@ -132,13 +132,15 @@ if [[ "${binfmt_misc_required}" == "1" ]]; then fi echo "binfmt_misc mounted" fi - # Register qemu-arm for binfmt_misc (binfmt_misc won't care duplicate entries unless they have common names) - reg="echo ':qemu-arm-rpi:M::"\ + if ! grep -q "^interpreter ${qemu_arm}" /proc/sys/fs/binfmt_misc/qemu-arm* ; then + # Register qemu-arm for binfmt_misc + reg="echo ':qemu-arm-rpi:M::"\ "\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:"\ "\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:"\ -"$qemu_arm:F' > /proc/sys/fs/binfmt_misc/register" - echo "Registering qemu-arm for binfmt_misc..." - sudo bash -c "$reg" 2>/dev/null || true +"${qemu_arm}:F' > /proc/sys/fs/binfmt_misc/register" + echo "Registering qemu-arm for binfmt_misc..." + sudo bash -c "${reg}" 2>/dev/null || true + fi fi trap 'echo "got CTRL+C... please wait 5s" && ${DOCKER} stop -t 5 ${DOCKER_CMDLINE_NAME}' SIGINT SIGTERM From 446f3e34c8ceb33dfe7bd38578f1cd6b6afe19da Mon Sep 17 00:00:00 2001 From: bamartin125 Date: Thu, 17 Aug 2023 10:24:47 -0500 Subject: [PATCH 2/2] Adds call to mknod if loop dev does not exist after call to `losetup -f` (#483) --- export-image/prerun.sh | 2 +- export-noobs/prerun.sh | 2 +- scripts/common | 8 ++++++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/export-image/prerun.sh b/export-image/prerun.sh index 2d8e1bb..267bbe0 100755 --- a/export-image/prerun.sh +++ b/export-image/prerun.sh @@ -35,7 +35,7 @@ if [ "${NO_PRERUN_QCOW2}" = "0" ]; then echo "Creating loop device..." cnt=0 - until LOOP_DEV="$(losetup --show --find --partscan "$IMG_FILE")"; do + until ensure_next_loopdev && LOOP_DEV="$(losetup --show --find --partscan "$IMG_FILE")"; do if [ $cnt -lt 5 ]; then cnt=$((cnt + 1)) echo "Error in losetup. Retrying..." diff --git a/export-noobs/prerun.sh b/export-noobs/prerun.sh index 3858c66..6282836 100755 --- a/export-noobs/prerun.sh +++ b/export-noobs/prerun.sh @@ -11,7 +11,7 @@ rm -rf "${NOOBS_DIR}" echo "Creating loop device..." cnt=0 -until LOOP_DEV="$(losetup --show --find --partscan "$IMG_FILE")"; do +until ensure_next_loopdev && LOOP_DEV="$(losetup --show --find --partscan "$IMG_FILE")"; do if [ $cnt -lt 5 ]; then cnt=$((cnt + 1)) echo "Error in losetup. Retrying..." diff --git a/scripts/common b/scripts/common index 5731b72..c94b0f0 100644 --- a/scripts/common +++ b/scripts/common @@ -102,3 +102,11 @@ update_issue() { echo -e "Raspberry Pi reference ${IMG_DATE}\nGenerated using ${PI_GEN}, ${PI_GEN_REPO}, ${GIT_HASH}, ${1}" > "${ROOTFS_DIR}/etc/rpi-issue" } export -f update_issue + +ensure_next_loopdev() { + local loopdev + loopdev="$(losetup -f)" + loopmaj="$(echo "$loopdev" | sed -E 's/.*[^0-9]*?([0-9]+)$/\1/')" + [[ -b "$loopdev" ]] || mknod "$loopdev" b 7 "$loopmaj" +} +export -f ensure_next_loopdev