mdraids for lenny need to use metadata format 0.90
[grml-debootstrap.git] / grml-debootstrap
index 8243192..bf97635 100755 (executable)
@@ -11,7 +11,7 @@ set -e # exit on any error
 
 # variables {{{
 PN="$(basename $0)"
-VERSION='0.37'
+VERSION='0.39'
 MNTPOINT="/mnt/debootstrap.$$"
 
 # inside the chroot system locales might not be available, so use minimum:
@@ -93,16 +93,9 @@ check4progs debootstrap dialog || exit 1
 check4root || exit 1
 # }}}
 
-# source configuration file {{{
+# source main configuration file {{{
 if [ -r /etc/debootstrap/config ] ; then
-   if [ -n "$CONFIGFILE" ] ; then
-      einfo "Using config file $CONFIGFILE."
-      if ! . "$CONFIGFILE" ; then
-         eerror "Error reading config file $CONFIGFILE" ; eend 1 ; exit 1
-      fi
-   else
-      . /etc/debootstrap/config
-   fi
+  . /etc/debootstrap/config
 fi
 # }}}
 
@@ -172,6 +165,15 @@ fi
 }
 # }}}
 
+# source specified configuration file {{{
+if [ -n "$CONFIGFILE" ] ; then
+   einfo "Reading specified config file $CONFIGFILE."
+   if ! . "$CONFIGFILE" ; then
+      eerror "Error reading config file $CONFIGFILE" ; eend 1 ; exit 1
+   fi
+fi
+# }}}
+
 # backwards compability checks {{{
 if [ -n "$GROOT" ] ; then
    echo "Error: you seem to have \$GROOT configured." >&2
@@ -407,11 +409,17 @@ for i in $(cat $TMPFILE) ; do
    NUM_PARTITIONS=$((${NUM_PARTITIONS}+1))
 done
 
+# force metadata version 0.90 for lenny so old grub can boot from this array.
+METADATA_VERSION=""
+if [ $RELEASE = "lenny" ]; then
+   METADATA_VERSION="-e0"
+fi
+
 ERRORFILE=$(mktemp)
 set +e
 # TODO: better error handling?
 yes | mdadm --create "${TARGET}" --level="${RAIDLEVEL}" \
-      --raid-devices="${NUM_PARTITIONS}" ${SELECTED_PARTITIONS} >/dev/null 2>$ERRORFILE
+      --raid-devices="${NUM_PARTITIONS}" ${METADATA_VERSION} ${SELECTED_PARTITIONS} >/dev/null 2>$ERRORFILE
 RC=$?
 set -e
 
@@ -520,14 +528,14 @@ interactive_mode()
 {
   welcome_dialog
 
+  prompt_for_release
+
   prompt_for_swraid
 
   prompt_for_target
 
   prompt_for_bootmanager
 
-  prompt_for_release
-
   prompt_for_hostname
 
   prompt_for_password
@@ -642,7 +650,7 @@ bailout(){
         [ -x "$MNTPOINT"/etc/init.d/ssh   ] && "$MNTPOINT"/etc/init.d/ssh stop
         [ -x "$MNTPOINT"/etc/init.d/mdadm ] && "$MNTPOINT"/etc/init.d/mdadm stop
         # ugly, but make sure we really don't leave anything (/proc /proc is intended)
-        for ARG in /sys -a /proc /proc ; do
+        for ARG in /sys /proc /proc ; do
           [ -x "$MNTPOINT"/bin/umount ] && chroot "$MNTPOINT" umount $ARG >/dev/null 2>&1 || true
         done
         umount "$MNTPOINT"/dev >/dev/null 2>&1 || true
@@ -705,7 +713,11 @@ mkfs() {
 
        # make sure /dev/disk/by-uuid/... is up2date, otherwise grub
        # will fail to detect the uuid in the chroot
-       blockdev --rereadpt "${TARGET%%[0-9]*}"
+       if echo "$TARGET" | grep -q "/dev/md" ; then
+         blockdev --rereadpt "${TARGET}"
+       else
+         blockdev --rereadpt "${TARGET%%[0-9]*}"
+       fi
        # give the system 2 seconds, otherwise we might run into
        # race conditions :-/
        sleep 2