combined-ext-image.sh: generate image in temp dir
authorSven Eckelmann <sven.eckelmann@open-mesh.com>
Thu, 30 Nov 2017 13:30:06 +0000 (14:30 +0100)
committerMathias Kresin <dev@kresin.me>
Sat, 13 Jan 2018 06:58:46 +0000 (07:58 +0100)
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@open-mesh.com>
scripts/combined-ext-image.sh

index 0c7b1d993d45e85a31546d1d5c8ce4db9edd8e07..7ff287bde791717a44c9bcfed1cbde925a07b93f 100755 (executable)
@@ -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}"