[openwrt/openwrt] combined-ext-image.sh: generate image in temp dir

LEDE Commits lede-commits at lists.infradead.org
Fri Jan 12 23:01:44 PST 2018


mkresin pushed a commit to openwrt/openwrt.git, branch master:
https://git.lede-project.org/1a384ac0b553433dd5049068e70425c421b796f8

commit 1a384ac0b553433dd5049068e70425c421b796f8
Author: Sven Eckelmann <sven.eckelmann at open-mesh.com>
AuthorDate: Thu Nov 30 14:30:06 2017 +0100

    combined-ext-image.sh: generate image in temp dir
    
    The new build commands operate on the input image and use it again as
    output image. This conflicts with the way combined-ext-image.sh was
    operating. It required that input and output files are different files and
    and that it can write freely to the output file.
    
    This can be avoided when all intermediate build steps by
    combined-ext-image.sh are done in a temporary directory. The output file is
    then only overwritten in the last step.
    
    Signed-off-by: Sven Eckelmann <sven.eckelmann at open-mesh.com>
---
 scripts/combined-ext-image.sh | 29 +++++++++++++++++++++++------
 1 file changed, 23 insertions(+), 6 deletions(-)

diff --git a/scripts/combined-ext-image.sh b/scripts/combined-ext-image.sh
index 0c7b1d9..7ff287b 100755
--- a/scripts/combined-ext-image.sh
+++ b/scripts/combined-ext-image.sh
@@ -22,6 +22,8 @@
 ## version history
 # * version 1: initial file format with num files / name / length / md5 checksum 
 
+set -e
+
 ME="${0##*/}"
 
 usage() {
@@ -38,7 +40,21 @@ IMG_OUT=$1; shift
 FILE_NUM=$(($# / 2))
 FILES=""
 
-printf "CE%02x%-32s%02x" $CE_VERSION "$IMG_TYPE" $FILE_NUM > $IMG_OUT
+tmpdir="$( mktemp -d 2> /dev/null )"
+if [ -z "$tmpdir" ]; then
+	# try OSX signature
+	tmpdir="$( mktemp -t 'ubitmp' -d )"
+fi
+
+if [ -z "$tmpdir" ]; then
+	exit 1
+fi
+
+trap "rm -rf $tmpdir" EXIT
+
+IMG_TMP_OUT="${tmpdir}/out"
+
+printf "CE%02x%-32s%02x" $CE_VERSION "$IMG_TYPE" $FILE_NUM > "${IMG_TMP_OUT}"
 
 while [ "$#" -gt 1 ]
    do
@@ -48,14 +64,15 @@ while [ "$#" -gt 1 ]
       [ ! -f "$file" ] && echo "$ME: Not a valid file: $file" && usage
       FILES="$FILES $file"
       md5=$(mkhash md5 "$file")
-      printf "%-32s%08x%32s" "$filename" $(stat -c "%s" "$file") "${md5%% *}" >> $IMG_OUT
+      printf "%-32s%08x%32s" "$filename" $(stat -c "%s" "$file") "${md5%% *}" >> "${IMG_TMP_OUT}"
       shift 2
    done
 
 [ "$#" -eq 1 ] && echo "$ME: Filename not specified: $1" && usage
 
-mv $IMG_OUT $IMG_OUT.tmp
-dd if="$IMG_OUT.tmp" of="$IMG_OUT" bs=65536 conv=sync 2>/dev/null
-rm $IMG_OUT.tmp
+mv "${IMG_TMP_OUT}" "${IMG_TMP_OUT}".tmp
+dd if="${IMG_TMP_OUT}.tmp" of="${IMG_TMP_OUT}" bs=65536 conv=sync 2>/dev/null
+rm "${IMG_TMP_OUT}".tmp
 
-cat $FILES >> $IMG_OUT
+cat $FILES >> "${IMG_TMP_OUT}"
+cp "${IMG_TMP_OUT}" "${IMG_OUT}"



More information about the lede-commits mailing list