diff --git a/bin/disk-image-create b/bin/disk-image-create index 7ea65c4d..4c096d42 100755 --- a/bin/disk-image-create +++ b/bin/disk-image-create @@ -45,7 +45,8 @@ function show_options () { echo "Options:" echo " -a i386|amd64|armhf -- set the architecture of the image(default amd64)" echo " -o imagename -- set the imagename of the output image file(default image)" - echo " -t qcow2|tar -- set the imagetype of the output image file(default qcow2)" + echo " -t qcow2,tar -- set the image types of the output image files (default qcow2)" + echo " File types should be comma separated" echo " -x -- turn on tracing" echo " -u -- uncompressed; do not compress the image - larger but faster" echo " -c -- clear environment before starting work" @@ -85,6 +86,7 @@ function show_options () { } INSTALL_PACKAGES="" +IMAGE_TYPES=("qcow2") COMPRESS_IMAGE="true" DIB_ROOT_LABEL="" TEMP=`getopt -o a:ho:t:xucnp: -l no-tmpfs,offline,help,min-tmpfs:,image-size:,image-cache:,max-online-resize:,qemu-img-options:,root-label: -n $SCRIPTNAME -- "$@"` @@ -97,7 +99,7 @@ while true ; do case "$1" in -a) export ARCH=$2; shift 2 ;; -o) export IMAGE_NAME=$2; shift 2 ;; - -t) export IMAGE_TYPE=$2; shift 2 ;; + -t) IFS="," read -a IMAGE_TYPES <<< "$2"; export IMAGE_TYPES ; shift 2 ;; -h|--help) show_options; exit 0;; -x) shift; set -x;; -u) shift; export COMPRESS_IMAGE="";; @@ -137,7 +139,10 @@ fi arg_to_elements "$@" -export IMAGE_NAME=${IMAGE_NAME%%\.${IMAGE_TYPE}} +if [ "${#IMAGE_TYPES[@]}" = "1" ]; then + export IMAGE_NAME=${IMAGE_NAME%%\.${IMAGE_TYPES[0]}} +fi + # FS_TYPE isn't available until after we source img-defaults if [ -z "$DIB_ROOT_LABEL" ]; then # NOTE(bnemec): XFS has a limit of 12 characters for filesystem labels @@ -207,18 +212,27 @@ mount_proc_dev_sys run_d_in_target finalise finalise_base -if [ "$IMAGE_TYPE" == "tar" ]; then - sudo tar -C ${TMP_BUILD_DIR}/mnt -cf $IMAGE_NAME.tar --exclude ./sys \ - --exclude ./proc --xattrs --xattrs-include=\* . - sudo chown $USER: $IMAGE_NAME.tar -fi +for X in ${!IMAGE_TYPES[@]} ; do + if [ "${IMAGE_TYPES[$X]}" == "tar" ]; then + sudo tar -C ${TMP_BUILD_DIR}/mnt -cf $IMAGE_NAME.tar --exclude ./sys \ + --exclude ./proc --xattrs --xattrs-include=\* . + sudo chown $USER: $IMAGE_NAME.tar + unset IMAGE_TYPES[$X] + fi +done unmount_image -if [ "$IS_RAMDISK" == "0" -a "$IMAGE_TYPE" != "tar" ]; then - compress_and_save_image $IMAGE_NAME.$IMAGE_TYPE +if [ "$IS_RAMDISK" == "0" ]; then + for IMAGE_TYPE in ${IMAGE_TYPES[@]} ; do + compress_and_save_image $IMAGE_NAME.$IMAGE_TYPE + done + rm $TMP_IMAGE_PATH + cleanup_dirs else # This is a ramdisk build, we have already extracted the kernel and ramdisk # by this point. rm $TMP_IMAGE_PATH fi +# All done! +trap EXIT diff --git a/elements/ramdisk/post-install.d/99-build-ramdisk b/elements/ramdisk/post-install.d/99-build-ramdisk index 9826fbe6..6a936ba6 100755 --- a/elements/ramdisk/post-install.d/99-build-ramdisk +++ b/elements/ramdisk/post-install.d/99-build-ramdisk @@ -39,5 +39,8 @@ populate_udev SCRIPT_HOME=/tmp/in_target.d/bin TMP_HOOKS_PATH=/tmp/in_target.d run_d ramdisk-install finalise_image save_image /tmp/ramdisk +# In the past save_image did this for us. If EXIT handler is not +# reset ramdisk image builds fail. +trap EXIT cp /boot/vmlinuz-${KERNEL_VERSION} /tmp/kernel chmod o+r /tmp/kernel diff --git a/lib/common-functions b/lib/common-functions index 6681dc78..fb3c654c 100644 --- a/lib/common-functions +++ b/lib/common-functions @@ -39,6 +39,7 @@ function mk_build_dir () { trap trap_cleanup EXIT echo Building in $TMP_BUILD_DIR export TMP_IMAGE_PATH=$TMP_IMAGE_DIR/image.raw + export OUT_IMAGE_PATH=$TMP_IMAGE_PATH export TMP_HOOKS_PATH=$TMP_BUILD_DIR/hooks } @@ -49,10 +50,7 @@ function finish_image () { mv "$1" "$old_image" fi - mv $TMP_IMAGE_PATH $1 - cleanup_dirs - # All done! - trap EXIT + mv $OUT_IMAGE_PATH $1 echo "Image file $1 created..." } diff --git a/lib/img-functions b/lib/img-functions index b2838604..7bdf208d 100644 --- a/lib/img-functions +++ b/lib/img-functions @@ -121,9 +121,8 @@ function compress_and_save_image () { EXTRA_OPTIONS="" fi qemu-img convert ${COMPRESS_IMAGE:+-c} -f raw $TMP_IMAGE_PATH -O $IMAGE_TYPE $EXTRA_OPTIONS $1-new - rm $TMP_IMAGE_PATH - TMP_IMAGE_PATH=$1-new + OUT_IMAGE_PATH=$1-new finish_image $1 }