From 2ea5feca5c4b64867ac327736edfb20408f8840e Mon Sep 17 00:00:00 2001 From: Paul Belanger Date: Fri, 30 Sep 2016 15:59:46 -0400 Subject: [PATCH] Create (md5|sha256) checksum files for images In shade, we use both md5 and sha256 checksums to help validate the integrity of an image. Rather then having nodepool do this each time for every time, have diskimage-builder create these files when we build the image. We've added a flag (disabled by default) to toggle this functionality. Change-Id: I5815ba69b7d477f1e91dc8ec0c69c86168770964 Signed-off-by: Paul Belanger --- bin/disk-image-create | 4 +++- lib/common-defaults | 1 + lib/common-functions | 10 ++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/bin/disk-image-create b/bin/disk-image-create index ad811a8f..45d8024b 100755 --- a/bin/disk-image-create +++ b/bin/disk-image-create @@ -109,6 +109,7 @@ function show_options () { echo " -x -- turn on tracing (use -x -x for very detailed tracing)" echo " -u -- uncompressed; do not compress the image - larger but faster" echo " -c -- clear environment before starting work" + echo " --checksum -- generate MD5 and SHA256 checksum files for the created image" echo " --image-size size -- image size in GB for the created image" echo " --image-cache directory -- location for cached images(default ~/.cache/image-create)" echo " --max-online-resize size -- max number of filesystem blocks to support when resizing." @@ -172,7 +173,7 @@ DIB_DEFAULT_INSTALLTYPE=${DIB_DEFAULT_INSTALLTYPE:-"source"} MKFS_OPTS="" ACI_MANIFEST=${ACI_MANIFEST:-} DOCKER_TARGET="" -TEMP=`getopt -o a:ho:t:xucnp: -l no-tmpfs,offline,help,version,min-tmpfs:,image-size:,image-cache:,max-online-resize:,mkfs-options:,qemu-img-options:,ramdisk-element:,root-label:,install-type:,docker-target: -n $SCRIPTNAME -- "$@"` +TEMP=`getopt -o a:ho:t:xucnp: -l checksum,no-tmpfs,offline,help,version,min-tmpfs:,image-size:,image-cache:,max-online-resize:,mkfs-options:,qemu-img-options:,ramdisk-element:,root-label:,install-type:,docker-target: -n $SCRIPTNAME -- "$@"` if [ $? -ne 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi # Note the quotes around `$TEMP': they are essential! @@ -190,6 +191,7 @@ while true ; do -c) shift ; export CLEAR_ENV=1;; -n) shift; export SKIP_BASE="1";; -p) IFS="," read -a INSTALL_PACKAGES <<< "$2"; export INSTALL_PACKAGES ; shift 2 ;; + --checksum) shift; export DIB_CHECKSUM=1;; --image-size) export DIB_IMAGE_SIZE=$2; shift 2;; --image-cache) export DIB_IMAGE_CACHE=$2; shift 2;; --max-online-resize) export MAX_ONLINE_RESIZE=$2; shift 2;; diff --git a/lib/common-defaults b/lib/common-defaults index ee33eb47..e0471855 100644 --- a/lib/common-defaults +++ b/lib/common-defaults @@ -34,6 +34,7 @@ fi ARCH=${ARCH:-$_ARCH} export ARCH +export DIB_CHECKSUM=${DIB_CHECKSUM:-0} export DIB_NO_TMPFS=${DIB_NO_TMPFS:-0} export DIB_MIN_TMPFS=${DIB_MIN_TMPFS:-2} # Set via the CLI normally. diff --git a/lib/common-functions b/lib/common-functions index 152a4871..25452586 100644 --- a/lib/common-functions +++ b/lib/common-functions @@ -51,9 +51,19 @@ function finish_image () { old_image="${1%.*}"-$(date +%Y.%m.%d-%H.%M.%S).${1##*.} echo "Old image found. Renaming it to $old_image" mv "$1" "$old_image" + if [ -f "$1.md5" ]; then + mv "$1.md5" "$old_image.md5" + fi + if [ -f "$1.sha256" ]; then + mv "$1.sha256" "$old_image.sha256" + fi fi mv $OUT_IMAGE_PATH $1 + if [ "$DIB_CHECKSUM" == "1" ]; then + md5sum $1 > $1.md5 + sha256sum $1 > $1.sha256 + fi echo "Image file $1 created..." }