-#!/bin/sh
+#!/bin/bash
-# Copyright (C) 2007 Google Inc.
+# Copyright (C) 2007, 2008, 2009 Google Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
. common.sh
TMPDIR=`mktemp -d` || exit 1
-trap "umount $TMPDIR; rmdir $TMPDIR" EXIT
+CLEANUP+=("rmdir $TMPDIR")
-# If it's not a block device try to mount it via loopback device.
+# If the target device is not a real block device we'll first losetup it.
# This is needed for file disks.
-MOUNT_OPTIONS=""
if [ ! -b $blockdev ]; then
- MOUNT_OPTIONS="$MOUNT_OPTIONS -o loop"
+ ORIGINAL_BLOCKDEV=$blockdev
+ blockdev=$(losetup -sf $blockdev)
+ CLEANUP+=("losetup -d $blockdev")
fi
-mount $MOUNT_OPTIONS $blockdev $TMPDIR
+
+if [ "$PARTITION_STYLE" = "none" ]; then
+ filesystem_dev=$blockdev
+elif [ "$PARTITION_STYLE" = "msdos" ]; then
+ filesystem_dev=$(map_disk0 $blockdev)
+ CLEANUP+=("unmap_disk0 $blockdev")
+else
+ echo "Unknown partition style $PARTITION_STYLE"
+ exit 1
+fi
+
+mount $filesystem_dev $TMPDIR
+CLEANUP+=("umount $TMPDIR")
HNAME="$TMPDIR/etc/hostname"
MNAME="$TMPDIR/etc/mailname"
# for hostname, we raise and error if the old hostname is not what we
# expect
OLD_HNAME="`cat $HNAME`"
-if [ "$OLD_HNAME" = "$instance" ]; then
- echo $new_name > $HNAME
+if [ "$OLD_HNAME" = "$old_name" ]; then
+ echo $instance > $HNAME
else
- echo "Cannot rename from $instance to $new_name:" 1>&2
- echo "Instance has a different hostname ($OLD_HNAME)" 1>&2
+ log_error "Cannot rename from $old_name to $instance:"
+ log_error "Instance has a different hostname ($OLD_HNAME)"
exit 1
fi
# for mailname, we rename only if it has the old name, otherwise we
# ignore it (and assumme that it's a customized name)
-if [ "`cat $MNAME`" = "$instance" ]; then
- echo $new_name > $MNAME
+if [ "`cat $MNAME`" = "$old_name" ]; then
+ echo $instance > $MNAME
fi
-umount $TMPDIR
-rmdir $TMPDIR
+# execute cleanups
+cleanup
trap - EXIT
exit 0