From 2296a4e82622b32e7992681c09698e3dd659d512 Mon Sep 17 00:00:00 2001 From: Kris Bahnsen Date: Mon, 8 Jun 2026 20:39:37 +0000 Subject: [PATCH 1/6] blast_funcs: Check destination dev exists before writing Fixes #91 More obviously errors in the logs if a target media for a disk image to be written to is not present in the system. Signed-off-by: Kris Bahnsen --- technologic/board/usbprod-common/scripts/blast_funcs.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/technologic/board/usbprod-common/scripts/blast_funcs.sh b/technologic/board/usbprod-common/scripts/blast_funcs.sh index 96c1658..33c0a57 100755 --- a/technologic/board/usbprod-common/scripts/blast_funcs.sh +++ b/technologic/board/usbprod-common/scripts/blast_funcs.sh @@ -155,6 +155,9 @@ untar_image() { echo "======= Writing ${HUMAN_NAME} filesystem ========" ( + # First, ensure the expected device is present + [ -b "${DST_DEV}" ] || err_exit "${DST_DEV} does not exist" + # shellcheck disable=SC3040 set -x -o pipefail @@ -261,6 +264,9 @@ dd_image() { echo "======= Writing ${HUMAN_NAME} disk image ========" ( + # First, ensure the expected device is present + [ -b "${DST_DEV}" ] || err_exit "${DST_DEV} does not exist" + # In order to save CPU and IO time on decompressing the source # file twice, use some FIFO magic to get the length of the image # while we are writing it to disk. This involves a couple of temp From ac6e8123bec17bb7e27a8a0131e0f6aad5b03636 Mon Sep 17 00:00:00 2001 From: Kris Bahnsen Date: Mon, 8 Jun 2026 21:03:24 +0000 Subject: [PATCH 2/6] technologic/configs: add GNU tar to usbprod defconfigs Needed for extended attribute support Signed-off-by: Kris Bahnsen --- technologic/configs/ts7100_usbprod_defconfig | 3 +++ technologic/configs/ts7180_usbprod_defconfig | 3 +++ technologic/configs/ts7250v3_usbprod_defconfig | 3 +++ technologic/configs/ts7800v2_usbprod_defconfig | 3 +++ technologic/configs/tsimx28_usbprod_defconfig | 3 +++ technologic/configs/tsimx6_usbprod_defconfig | 3 +++ technologic/configs/tsimx6ul_usbprod_defconfig | 3 +++ technologic/configs/tsimx9_usbprod_defconfig | 3 +++ 8 files changed, 24 insertions(+) diff --git a/technologic/configs/ts7100_usbprod_defconfig b/technologic/configs/ts7100_usbprod_defconfig index a85a02f..1d8c69d 100644 --- a/technologic/configs/ts7100_usbprod_defconfig +++ b/technologic/configs/ts7100_usbprod_defconfig @@ -34,9 +34,12 @@ BR2_PACKAGE_UBOOT_TOOLS_FIT_CHECK_SIGN=y BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE=y BR2_PACKAGE_UBOOT_TOOLS_MKENVIMAGE=y BR2_PACKAGE_LIBOPENSSL_ENGINES=y +BR2_PACKAGE_LIBSELINUX=y +BR2_PACKAGE_ACL=y BR2_PACKAGE_COREUTILS=y BR2_PACKAGE_KMOD=y BR2_PACKAGE_KMOD_TOOLS=y +BR2_PACKAGE_TAR=y BR2_PACKAGE_UTIL_LINUX_PARTX=y BR2_TARGET_ROOTFS_CPIO=y BR2_TARGET_ROOTFS_CPIO_GZIP=y diff --git a/technologic/configs/ts7180_usbprod_defconfig b/technologic/configs/ts7180_usbprod_defconfig index 9ee2325..d770bc4 100644 --- a/technologic/configs/ts7180_usbprod_defconfig +++ b/technologic/configs/ts7180_usbprod_defconfig @@ -34,9 +34,12 @@ BR2_PACKAGE_UBOOT_TOOLS_FIT_CHECK_SIGN=y BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE=y BR2_PACKAGE_UBOOT_TOOLS_MKENVIMAGE=y BR2_PACKAGE_LIBOPENSSL_ENGINES=y +BR2_PACKAGE_LIBSELINUX=y +BR2_PACKAGE_ACL=y BR2_PACKAGE_COREUTILS=y BR2_PACKAGE_KMOD=y BR2_PACKAGE_KMOD_TOOLS=y +BR2_PACKAGE_TAR=y BR2_PACKAGE_UTIL_LINUX_PARTX=y BR2_TARGET_ROOTFS_CPIO=y BR2_TARGET_ROOTFS_CPIO_GZIP=y diff --git a/technologic/configs/ts7250v3_usbprod_defconfig b/technologic/configs/ts7250v3_usbprod_defconfig index 0c97731..2a802d2 100644 --- a/technologic/configs/ts7250v3_usbprod_defconfig +++ b/technologic/configs/ts7250v3_usbprod_defconfig @@ -34,9 +34,12 @@ BR2_PACKAGE_UBOOT_TOOLS_FIT_CHECK_SIGN=y BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE=y BR2_PACKAGE_UBOOT_TOOLS_MKENVIMAGE=y BR2_PACKAGE_LIBOPENSSL_ENGINES=y +BR2_PACKAGE_LIBSELINUX=y +BR2_PACKAGE_ACL=y BR2_PACKAGE_COREUTILS=y BR2_PACKAGE_KMOD=y BR2_PACKAGE_KMOD_TOOLS=y +BR2_PACKAGE_TAR=y BR2_PACKAGE_UTIL_LINUX_PARTX=y BR2_TARGET_ROOTFS_CPIO=y BR2_TARGET_ROOTFS_CPIO_GZIP=y diff --git a/technologic/configs/ts7800v2_usbprod_defconfig b/technologic/configs/ts7800v2_usbprod_defconfig index 67298f2..90d7229 100644 --- a/technologic/configs/ts7800v2_usbprod_defconfig +++ b/technologic/configs/ts7800v2_usbprod_defconfig @@ -25,9 +25,12 @@ BR2_PACKAGE_ZSTD=y BR2_PACKAGE_E2FSPROGS=y BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y BR2_PACKAGE_PARTED=y +BR2_PACKAGE_LIBSELINUX=y +BR2_PACKAGE_ACL=y BR2_PACKAGE_COREUTILS=y BR2_PACKAGE_KMOD=y BR2_PACKAGE_KMOD_TOOLS=y +BR2_PACKAGE_TAR=y BR2_PACKAGE_UTIL_LINUX_PARTX=y BR2_TARGET_ROOTFS_CPIO=y BR2_TARGET_ROOTFS_CPIO_UIMAGE=y diff --git a/technologic/configs/tsimx28_usbprod_defconfig b/technologic/configs/tsimx28_usbprod_defconfig index 6594224..2e13b10 100644 --- a/technologic/configs/tsimx28_usbprod_defconfig +++ b/technologic/configs/tsimx28_usbprod_defconfig @@ -23,9 +23,12 @@ BR2_PACKAGE_ZSTD=y BR2_PACKAGE_E2FSPROGS=y BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y BR2_PACKAGE_PARTED=y +BR2_PACKAGE_LIBSELINUX=y +BR2_PACKAGE_ACL=y BR2_PACKAGE_COREUTILS=y BR2_PACKAGE_KMOD=y BR2_PACKAGE_KMOD_TOOLS=y +BR2_PACKAGE_TAR=y BR2_PACKAGE_UTIL_LINUX_PARTX=y BR2_TARGET_ROOTFS_CPIO=y BR2_TARGET_ROOTFS_CPIO_GZIP=y diff --git a/technologic/configs/tsimx6_usbprod_defconfig b/technologic/configs/tsimx6_usbprod_defconfig index e5c5bea..72d468f 100644 --- a/technologic/configs/tsimx6_usbprod_defconfig +++ b/technologic/configs/tsimx6_usbprod_defconfig @@ -32,9 +32,12 @@ BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y BR2_PACKAGE_MMC_UTILS=y BR2_PACKAGE_TS4900_FPGA=y BR2_PACKAGE_PARTED=y +BR2_PACKAGE_LIBSELINUX=y +BR2_PACKAGE_ACL=y BR2_PACKAGE_COREUTILS=y BR2_PACKAGE_KMOD=y BR2_PACKAGE_KMOD_TOOLS=y +BR2_PACKAGE_TAR=y BR2_PACKAGE_UTIL_LINUX_PARTX=y BR2_TARGET_ROOTFS_CPIO=y BR2_TARGET_ROOTFS_CPIO_UIMAGE=y diff --git a/technologic/configs/tsimx6ul_usbprod_defconfig b/technologic/configs/tsimx6ul_usbprod_defconfig index 44bc306..1df1b1d 100644 --- a/technologic/configs/tsimx6ul_usbprod_defconfig +++ b/technologic/configs/tsimx6ul_usbprod_defconfig @@ -23,9 +23,12 @@ BR2_PACKAGE_ZSTD=y BR2_PACKAGE_E2FSPROGS=y BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y BR2_PACKAGE_PARTED=y +BR2_PACKAGE_LIBSELINUX=y +BR2_PACKAGE_ACL=y BR2_PACKAGE_COREUTILS=y BR2_PACKAGE_KMOD=y BR2_PACKAGE_KMOD_TOOLS=y +BR2_PACKAGE_TAR=y BR2_PACKAGE_UTIL_LINUX_PARTX=y BR2_TARGET_ROOTFS_CPIO=y BR2_TARGET_ROOTFS_CPIO_GZIP=y diff --git a/technologic/configs/tsimx9_usbprod_defconfig b/technologic/configs/tsimx9_usbprod_defconfig index 42e5795..240b950 100644 --- a/technologic/configs/tsimx9_usbprod_defconfig +++ b/technologic/configs/tsimx9_usbprod_defconfig @@ -35,9 +35,12 @@ BR2_PACKAGE_UBOOT_TOOLS_FIT_CHECK_SIGN=y BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE=y BR2_PACKAGE_UBOOT_TOOLS_MKENVIMAGE=y BR2_PACKAGE_LIBOPENSSL_ENGINES=y +BR2_PACKAGE_LIBSELINUX=y +BR2_PACKAGE_ACL=y BR2_PACKAGE_COREUTILS=y BR2_PACKAGE_KMOD=y BR2_PACKAGE_KMOD_TOOLS=y +BR2_PACKAGE_TAR=y BR2_PACKAGE_UTIL_LINUX_PARTX=y BR2_TARGET_ROOTFS_CPIO=y BR2_TARGET_ROOTFS_CPIO_GZIP=y From 17b5277826e0318d42cf51962219e9151e4ba55f Mon Sep 17 00:00:00 2001 From: Kris Bahnsen Date: Mon, 8 Jun 2026 22:08:03 +0000 Subject: [PATCH 3/6] blast_funcs: add tar_args for uniform handling Fixes #102 This creates a simple shell function that can be called for both extraction and creation to handle extended attrs, selinux, numeric owner, and sparse files. The only thing not handled here is that extraction needs -h, and creation needs to not have -h in the argument list to tar to prevent issues. Signed-off-by: Kris Bahnsen --- .../usbprod-common/scripts/blast_funcs.sh | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/technologic/board/usbprod-common/scripts/blast_funcs.sh b/technologic/board/usbprod-common/scripts/blast_funcs.sh index 33c0a57..4c9e7d2 100755 --- a/technologic/board/usbprod-common/scripts/blast_funcs.sh +++ b/technologic/board/usbprod-common/scripts/blast_funcs.sh @@ -17,6 +17,20 @@ crit_exit() { err_exit "${1}" } +### Function to create a unified tar experience +### Modern filesystems and therefore tarballs of those filesystems can +### have a lot of options that require features not present in the basic +### busybox tar implementation. These options do not uniformly apply to both +### creation and extraction, however, they are all safe to have for both +### creation and exctraction. +### +### NOTE: Extraction should have -h to follow symlinks, creation should not +### have -h to ensure symlinks are included in the tarball rather than the +### real file/folder! +tar_args() { + tar --xattrs --xattrs-include='*' --acls --selinux --numeric-owner --sparse "$@" +} + ### Function to determine decompression to use based on name ### This is because busybox tar does not seem to correctly decompress ### arbitrary compression. @@ -224,10 +238,8 @@ untar_image() { mount "$(get_diskpart_path "${DST_DEV}" 1)" "${DST_MOUNT}" || \ err_exit "mount ${DST_DEV}" - # Get the correct command to stream decompress the tarball - # and run it - CMD=$(get_stream_decomp "${SRC_TARBALL}") - ${CMD} "${SRC_TARBALL}" | tar -xh -C "${DST_MOUNT}" || \ + # Unpack the tarball to the final partition location + tar_args -xhf "${SRC_TARBALL}" -C "${DST_MOUNT}" || \ err_exit "untar ${DST_DEV}" sync @@ -411,7 +423,8 @@ capture_img_or_tar_from_disk() { # Copy source disk filesystem to our sparse file backed # mount location. Use tar pipeline to ensure EVERY file # property, permission, etc, is coped intact - tar -cf - -C "${TMP_SRC_DIR}"/ . | tar xh -C "${TMP_DIR}" \ + tar_args -cf - -C "${TMP_SRC_DIR}"/ . | \ + tar_args -xh -C "${TMP_DIR}" \ || err_exit "copy SRC contents to TMP DST" # Unmount the SRC disk, we should no longer need this. @@ -448,7 +461,7 @@ capture_img_or_tar_from_disk() { # as opposed to a whole disk image to save time and space. if [ "${PART_CNT}" -eq 1 ]; then echo "Creating tarball" - tar cf "${DST_TAR}" -C "${TMP_DIR}"/ . || \ + tar_args -cf "${DST_TAR}" -C "${TMP_DIR}"/ . || \ err_exit "tar create ${TAR}" # This two-step is needed, and repeated, because we want # the .md5 file to not have any relative paths From 99262c9866d2d1de3f58697167775545aefbca40 Mon Sep 17 00:00:00 2001 From: Kris Bahnsen Date: Mon, 8 Jun 2026 22:17:11 +0000 Subject: [PATCH 4/6] technologic/configs: add bsdcat to usbprod defconfigs Makes stream decompression easier to handle Signed-off-by: Kris Bahnsen --- technologic/configs/ts7100_usbprod_defconfig | 2 ++ technologic/configs/ts7180_usbprod_defconfig | 2 ++ technologic/configs/ts7250v3_usbprod_defconfig | 2 ++ technologic/configs/ts7800v2_usbprod_defconfig | 2 ++ technologic/configs/tsimx28_usbprod_defconfig | 2 ++ technologic/configs/tsimx6_usbprod_defconfig | 2 ++ technologic/configs/tsimx6ul_usbprod_defconfig | 2 ++ technologic/configs/tsimx9_usbprod_defconfig | 2 ++ 8 files changed, 16 insertions(+) diff --git a/technologic/configs/ts7100_usbprod_defconfig b/technologic/configs/ts7100_usbprod_defconfig index 1d8c69d..7f2e053 100644 --- a/technologic/configs/ts7100_usbprod_defconfig +++ b/technologic/configs/ts7100_usbprod_defconfig @@ -33,6 +33,8 @@ BR2_PACKAGE_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y BR2_PACKAGE_UBOOT_TOOLS_FIT_CHECK_SIGN=y BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE=y BR2_PACKAGE_UBOOT_TOOLS_MKENVIMAGE=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y BR2_PACKAGE_LIBOPENSSL_ENGINES=y BR2_PACKAGE_LIBSELINUX=y BR2_PACKAGE_ACL=y diff --git a/technologic/configs/ts7180_usbprod_defconfig b/technologic/configs/ts7180_usbprod_defconfig index d770bc4..b9091ac 100644 --- a/technologic/configs/ts7180_usbprod_defconfig +++ b/technologic/configs/ts7180_usbprod_defconfig @@ -33,6 +33,8 @@ BR2_PACKAGE_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y BR2_PACKAGE_UBOOT_TOOLS_FIT_CHECK_SIGN=y BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE=y BR2_PACKAGE_UBOOT_TOOLS_MKENVIMAGE=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y BR2_PACKAGE_LIBOPENSSL_ENGINES=y BR2_PACKAGE_LIBSELINUX=y BR2_PACKAGE_ACL=y diff --git a/technologic/configs/ts7250v3_usbprod_defconfig b/technologic/configs/ts7250v3_usbprod_defconfig index 2a802d2..0673440 100644 --- a/technologic/configs/ts7250v3_usbprod_defconfig +++ b/technologic/configs/ts7250v3_usbprod_defconfig @@ -33,6 +33,8 @@ BR2_PACKAGE_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y BR2_PACKAGE_UBOOT_TOOLS_FIT_CHECK_SIGN=y BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE=y BR2_PACKAGE_UBOOT_TOOLS_MKENVIMAGE=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y BR2_PACKAGE_LIBOPENSSL_ENGINES=y BR2_PACKAGE_LIBSELINUX=y BR2_PACKAGE_ACL=y diff --git a/technologic/configs/ts7800v2_usbprod_defconfig b/technologic/configs/ts7800v2_usbprod_defconfig index 90d7229..ce39b24 100644 --- a/technologic/configs/ts7800v2_usbprod_defconfig +++ b/technologic/configs/ts7800v2_usbprod_defconfig @@ -25,6 +25,8 @@ BR2_PACKAGE_ZSTD=y BR2_PACKAGE_E2FSPROGS=y BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y BR2_PACKAGE_PARTED=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y BR2_PACKAGE_LIBSELINUX=y BR2_PACKAGE_ACL=y BR2_PACKAGE_COREUTILS=y diff --git a/technologic/configs/tsimx28_usbprod_defconfig b/technologic/configs/tsimx28_usbprod_defconfig index 2e13b10..09b4a46 100644 --- a/technologic/configs/tsimx28_usbprod_defconfig +++ b/technologic/configs/tsimx28_usbprod_defconfig @@ -23,6 +23,8 @@ BR2_PACKAGE_ZSTD=y BR2_PACKAGE_E2FSPROGS=y BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y BR2_PACKAGE_PARTED=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y BR2_PACKAGE_LIBSELINUX=y BR2_PACKAGE_ACL=y BR2_PACKAGE_COREUTILS=y diff --git a/technologic/configs/tsimx6_usbprod_defconfig b/technologic/configs/tsimx6_usbprod_defconfig index 72d468f..ff4795c 100644 --- a/technologic/configs/tsimx6_usbprod_defconfig +++ b/technologic/configs/tsimx6_usbprod_defconfig @@ -32,6 +32,8 @@ BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y BR2_PACKAGE_MMC_UTILS=y BR2_PACKAGE_TS4900_FPGA=y BR2_PACKAGE_PARTED=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y BR2_PACKAGE_LIBSELINUX=y BR2_PACKAGE_ACL=y BR2_PACKAGE_COREUTILS=y diff --git a/technologic/configs/tsimx6ul_usbprod_defconfig b/technologic/configs/tsimx6ul_usbprod_defconfig index 1df1b1d..80890ed 100644 --- a/technologic/configs/tsimx6ul_usbprod_defconfig +++ b/technologic/configs/tsimx6ul_usbprod_defconfig @@ -23,6 +23,8 @@ BR2_PACKAGE_ZSTD=y BR2_PACKAGE_E2FSPROGS=y BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y BR2_PACKAGE_PARTED=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y BR2_PACKAGE_LIBSELINUX=y BR2_PACKAGE_ACL=y BR2_PACKAGE_COREUTILS=y diff --git a/technologic/configs/tsimx9_usbprod_defconfig b/technologic/configs/tsimx9_usbprod_defconfig index 240b950..44c5e26 100644 --- a/technologic/configs/tsimx9_usbprod_defconfig +++ b/technologic/configs/tsimx9_usbprod_defconfig @@ -34,6 +34,8 @@ BR2_PACKAGE_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y BR2_PACKAGE_UBOOT_TOOLS_FIT_CHECK_SIGN=y BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE=y BR2_PACKAGE_UBOOT_TOOLS_MKENVIMAGE=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y BR2_PACKAGE_LIBOPENSSL_ENGINES=y BR2_PACKAGE_LIBSELINUX=y BR2_PACKAGE_ACL=y From 40f9c00e2b1843d6d0002f9480ba7c8ccaccc7bf Mon Sep 17 00:00:00 2001 From: Kris Bahnsen Date: Mon, 8 Jun 2026 22:24:51 +0000 Subject: [PATCH 5/6] blast_funcs: remove get_stream_decomp use Now can rely on bsdcat and tar to handle the stream decompression and much more robustly compared to just relying on the file extension to be correct. Signed-off-by: Kris Bahnsen --- .../usbprod-common/scripts/blast_funcs.sh | 52 ++----------------- 1 file changed, 3 insertions(+), 49 deletions(-) diff --git a/technologic/board/usbprod-common/scripts/blast_funcs.sh b/technologic/board/usbprod-common/scripts/blast_funcs.sh index 4c9e7d2..aec2fb5 100755 --- a/technologic/board/usbprod-common/scripts/blast_funcs.sh +++ b/technologic/board/usbprod-common/scripts/blast_funcs.sh @@ -31,50 +31,6 @@ tar_args() { tar --xattrs --xattrs-include='*' --acls --selinux --numeric-owner --sparse "$@" } -### Function to determine decompression to use based on name -### This is because busybox tar does not seem to correctly decompress -### arbitrary compression. -### -### Note that this depends on file extension rather than actually IDing the -### file's magic and will not work correctly if file is mis-named! -# Args -# 1) Full or relative filename with extension -# Returns command to use -# Use -# CMD=$(get_stream_decomp "/path/to/file.tar.bz2") -# ${CMD} can then be used to stream decompress the file to stdout - -get_stream_decomp() { - FILE_PATH="${1}" - - - BASE=$(basename "${FILE_PATH}") - EXTENSION="${BASE##*.}" - case "${EXTENSION}" in - "bz2") - CMD="bzcat" - ;; - "gz") - CMD="gunzip -c" - ;; - # If extension isn't a compression extension, then just cat it - "tar"|"dd") - CMD="cat" - ;; - "xz") - CMD="xzcat" - ;; - "zst") - CMD="zstdcat" - ;; - *) - err_exit "${FILE_PATH} unknown compression" - ;; - esac - - echo "${CMD}" -} - ### Function to get all option files from a directory and export them ### as environment variables that can be checked. # Args @@ -294,12 +250,10 @@ dd_image() { mkfifo "${FIFO_DIR}"/fifo || err_exit "dd mkfifo" wc -c < "${FIFO_DIR}"/fifo > "${BYTES_CNT_F}" & WC_PID=$! - # Get the correct command to stream decompress, then run the - # file through tee to our wc process above and then in to the - # dd process + # Stream decompress the file through tee to our wc process above + # and then in to the actual write to disk process # XXX: Consider replacing dd with cat or redirect and sync? - CMD=$(get_stream_decomp "${SRC_DD}") - ${CMD} "${SRC_DD}" | tee "${FIFO_DIR}"/fifo | \ + bsdcat "${SRC_DD}" | tee "${FIFO_DIR}"/fifo | \ dd bs=4M of="${DST_DEV}" conv=fsync \ || err_exit "${DST_DEV} dd write" wait $WC_PID From 7e5bbaaa71128bdd4452f54d180f67f09f42c12d Mon Sep 17 00:00:00 2001 From: Kris Bahnsen Date: Mon, 8 Jun 2026 22:41:36 +0000 Subject: [PATCH 6/6] blast_funcs: remove dd from image unpack pipeline Signed-off-by: Kris Bahnsen --- technologic/board/usbprod-common/scripts/blast_funcs.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/technologic/board/usbprod-common/scripts/blast_funcs.sh b/technologic/board/usbprod-common/scripts/blast_funcs.sh index aec2fb5..61581b9 100755 --- a/technologic/board/usbprod-common/scripts/blast_funcs.sh +++ b/technologic/board/usbprod-common/scripts/blast_funcs.sh @@ -252,10 +252,9 @@ dd_image() { # Stream decompress the file through tee to our wc process above # and then in to the actual write to disk process - # XXX: Consider replacing dd with cat or redirect and sync? - bsdcat "${SRC_DD}" | tee "${FIFO_DIR}"/fifo | \ - dd bs=4M of="${DST_DEV}" conv=fsync \ - || err_exit "${DST_DEV} dd write" + bsdcat "${SRC_DD}" | tee "${FIFO_DIR}"/fifo > "${DST_DEV}" || \ + err_exit "${DST_DEV} dd write" + sync wait $WC_PID MD5SUM="${SRC_DD%%.*}"