#
set -e
+set -x
die() {
echo "error: $1" >&2
cd $workspace
rm -f MD5SUMS # always download the checksum file to a detect stale image
wget $md5sums_url
- test -e $filename || wget -nc $image_url
+ test -e $filename || wget -nc --progress=dot:giga $image_url
grep $filename MD5SUMS | md5sum -c ||
if [ $? -ne 0 ]; then
rm $filename
- wget -nc $image_url
+ wget -nc --progress=dot:giga $image_url
grep $filename MD5SUMS | md5sum -c
fi
qemu-img convert $filename $raw_imgfile
loopdevice=$(kpartx -l $raw_imgfile | head -1 | cut -f1 -d ' ')
- kpartx -a $raw_imgfile
+ kpartx -av $raw_imgfile
+
+ # for trouble shooting
+ sleep 2
+ dmsetup ls
+ fdisk -l /dev/${loopdevice:0:5} || true
mount /dev/mapper/$loopdevice $mountdir
mount -t proc none $mountdir/proc
umount $mountdir
qemu-img convert -c -o compat=0.10 -O qcow2 $raw_imgfile $imgfile
+
+ if dmsetup table | grep $loopdevice; then
+ dmsetup clear $loopdevice || true
+ fi
}
# cleanup (umount) the image
mount | grep $mountdir/proc && umount $mountdir/proc
mount | grep $mountdir && umount $mountdir
if [ -f $raw_imgfile ]; then
- kpartx -d $raw_imgfile || true
+ kpartx -dv $raw_imgfile || true
fi
rm -f $raw_imgfile
rm -rf $mountdir
}
-set -x
+exitcode=""
+error_trap()
+{
+ local rc=$?
+
+ set +e
+
+ if [ -z "$exitcode" ]; then
+ exitcode=$rc
+ fi
+
+ dmesg -T | tail -50
+
+ cleanup
+
+ echo "Image build failed with $exitcode"
+
+ exit $exitcode
+}
main() {
cleanup
+
+ trap "error_trap" EXIT SIGTERM
+
download
setup
modify
+
+ trap - EXIT SIGTERM
cleanup
echo "the modified image is found here: $imgfile"