Some extra example hooks
[ext/instance-debootstrap.git] / rename
diff --git a/rename b/rename
index 9c13ddd..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
 
 set -e
 
-TEMP=`getopt -o o:n:b:s: -n '$0' -- "$@"`
+. common.sh
 
-if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
-
-# Note the quotes around `$TEMP': they are essential!
-eval set -- "$TEMP"
-
-while true; do
-       case "$1" in
-               -o) old_name=$2; shift 2;;
-
-               -n) new_name=$2; shift 2;;
-
-               -b) blockdev=$2; shift 2;;
-
-               -s) swapdev=$2; shift 2;;
-
-               --) shift; break;;
+TMPDIR=`mktemp -d` || exit 1
+CLEANUP+=("rmdir $TMPDIR")
+
+# If the target device is not a real block device we'll first losetup it.
+# This is needed for file disks.
+if [ ! -b $blockdev ]; then
+  ORIGINAL_BLOCKDEV=$blockdev
+  blockdev=$(losetup -sf $blockdev)
+  CLEANUP+=("losetup -d $blockdev")
+fi
 
-               *)  echo "Internal error!"; exit 1;;
-       esac
-done
-if [ -z "$old_name" -o -z "$new_name" -o -z "$blockdev" -o -z "$swapdev" ]; then
-       echo "Missing -o or -n or -b or -s argument!"
-       exit 1
+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
 
-TMPDIR=`mktemp -d` || exit 1
-trap "umount $TMPDIR; rmdir $TMPDIR" EXIT
-mount $blockdev $TMPDIR
+mount $filesystem_dev $TMPDIR
+CLEANUP+=("umount $TMPDIR")
 
 HNAME="$TMPDIR/etc/hostname"
 MNAME="$TMPDIR/etc/mailname"
@@ -57,21 +52,21 @@ MNAME="$TMPDIR/etc/mailname"
 # expect
 OLD_HNAME="`cat $HNAME`"
 if [ "$OLD_HNAME" = "$old_name" ]; then
-       echo $new_name > $HNAME
+       echo $instance > $HNAME
 else
-       echo "Cannot rename from $old_name 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
+# 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`" = "$old_name" ]; then
-       echo $new_name > $MNAME
+       echo $instance > $MNAME
 fi
 
-umount $TMPDIR
-rmdir $TMPDIR
+# execute cleanups
+cleanup
 trap - EXIT
 
 exit 0