Add an example about how to run hooks
[ext/instance-debootstrap.git] / rename
diff --git a/rename b/rename
index 96060f6..652d6b7 100755 (executable)
--- a/rename
+++ b/rename
@@ -1,6 +1,6 @@
-#!/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
@@ -22,15 +22,28 @@ set -e
 . 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"
@@ -52,8 +65,8 @@ if [ "`cat $MNAME`" = "$old_name" ]; then
        echo $instance > $MNAME
 fi
 
-umount $TMPDIR
-rmdir $TMPDIR
+# execute cleanups
+cleanup
 trap - EXIT
 
 exit 0