+if [ -n "$ARCH" ] ; then
+ ARCHCMD="--arch $ARCH"
+ ARCHINFO=" (${ARCH})"
+else
+ ARCH="$(dpkg --print-architecture)"
+ ARCHCMD="--arch $ARCH"
+ ARCHINFO=" (${ARCH})"
+fi
+
+# make sure at least $TARGET is set [the partition for the new system]
+if [ -z "$TARGET" ] ; then
+ eerror "Please adjust /etc/debootstrap/config before running ${0}" ; eend 1
+ exit 1
+fi
+# }}}
+
+# helper functions {{{
+# we want to exit smoothly and clean:
+bailout(){
+ # make sure $TARGET is not mounted when exiting grml-debootstrap
+ if [ -n "$TARGET" ] ; then
+ if grep -q $TARGET /proc/mounts ; then
+ # make sure nothing is left inside chroot so we can unmount it
+ [ -x "$TARGET"/etc/init.d/ssh ] && "$TARGET"/etc/init.d/ssh stop
+ [ -x "$TARGET"/etc/init.d/mdadm ] && "$TARGET"/etc/init.d/mdadm stop
+ chroot "$TARGET" umount /sys 1>/dev/null 2>&1
+ chroot "$TARGET" umount /proc 1>/dev/null 2>&1
+ echo "Unmounting $TARGET"
+ umount "$TARGET"
+ fi
+ fi
+ [ -n "$1" ] && EXIT="$1" || EXIT="1"
+ exit "$EXIT"
+}
+trap bailout 1 2 3 15
+
+# we want to execute all the functions only once, simple check for it:
+stage() {
+ if grep -q done "$STAGES/$1" 2>/dev/null ; then
+ ewarn "Notice: stage $1 has been executed already, skipping execution therefore." ; eend 0
+ return 1
+ else
+ echo "$2" > "$STAGES/$1"
+ return 0
+ fi
+}
+# }}}
+
+# user should recheck his configuration {{{