+Version 0.6 (unreleased)
+-----------
+
+The instance's fstab is now generated with volumes' UUIDs rather than paths.
+This makes it more resilient to changes and use under different
+hypervisors/drivers.
+
Version 0.5
-----------
exit 1
fi
-mkswap $swapdev
+swap_uuid=$(mkswap $swapdev | grep 'UUID' | sed -re 's/.*UUID=//')
mke2fs -Fjq $blockdev
+root_uuid=$(dumpe2fs -h $blockdev | grep '^Filesystem UUID:' \
+ | sed -re 's/.*UUID:\s*//')
TMPDIR=`mktemp -d` || exit 1
trap "umount $TMPDIR; rmdir $TMPDIR" EXIT
cat > $TMPDIR/etc/fstab <<EOF
# /etc/fstab: static file system information.
#
-# <file system> <mount point> <type> <options> <dump> <pass>
-/dev/sda / ext3 defaults 0 1
-/dev/sdb swap swap defaults 0 0
-proc /proc proc defaults 0 0
+# <file system> <mount point> <type> <options> <dump> <pass>
+UUID=$root_uuid / ext3 defaults 0 1
+UUID=$swap_uuid swap swap defaults 0 0
+proc /proc proc defaults 0 0
EOF
cat > $TMPDIR/etc/network/interfaces <<EOF
exit 1
fi
-mkswap $swapdev
+swap_uuid=$(mkswap $swapdev | grep 'UUID' | sed -re 's/.*UUID=//')
mke2fs -Fjq $blockdev
+root_uuid=$(dumpe2fs -h $blockdev | grep '^Filesystem UUID:' \
+ | sed -re 's/.*UUID:\s*//')
+
TMPDIR=`mktemp -d` || exit 1
trap "umount $TMPDIR; rmdir $TMPDIR" EXIT
( cd $TMPDIR; restore -r -y -f - )
rm -f $TMPDIR/etc/udev/rules.d/z25_persistent-net.rules
+
+# Fix /etc/fstab with the new volumes' UUIDs
+if [ -e $TMPDIR/etc/fstab ]; then
+ ROOT_LINE="UUID=$root_uuid / ext3 defaults 0 1"
+ SWAP_LINE="UUID=$swap_uuid swap swap defaults 0 0"
+ cat $TMPDIR/etc/fstab | \
+ sed -re "s#^(/dev/sda|UUID=[a-f0-9-]+)\s+/\s+.*\$#$ROOT_LINE#" \
+ -re "s#^(/dev/sdb|UUID=[a-f0-9-]+)\s+swap\s+.*\$#$SWAP_LINE#" \
+ > $TMPDIR/etc/fstab.new
+ mv $TMPDIR/etc/fstab.new $TMPDIR/etc/fstab
+fi
+
umount $TMPDIR
rmdir $TMPDIR
trap - EXIT