Support raid1 only for now, update changelog and TODO
[grml-debootstrap.git] / grml-debootstrap
index 0182ee9..ed2f629 100755 (executable)
@@ -39,6 +39,7 @@ Usage: $PN [options]
 
   -c|--config <configfile>    Use specified configuration file,
                               defaults to /etc/debootstrap/config
+  --hostname <hostname>       Hostname of Debian system
   -i|--iso <mnt>              Mountpoint where a Debian ISO is mounted to,
                               for use instead of fetching packages from a mirror
   -m|--mirror <URL>           Mirror which should be used for apt-get/aptitude.
@@ -103,6 +104,10 @@ while [ "$#" -gt "0" ] ; do
             eend 0
             exit 0
             ;;
+        --hostname)
+            shift
+            HOSTNAME=$1
+            ;;
         --interactive)
             INTERACTIVE=1
             ;;
@@ -189,15 +194,15 @@ prompt_for_bootmanager()
 
   OIFS="$IFS"; IFS=:
 
-  if echo $TARGET | grep -q "*md*" ; then
-     MBRPART=$TARGET
+  if echo $TARGET | grep -q "/dev/md" ; then
+     MBRPART="all disks of Software RAID $TARGET"
   else
-     MBRPART="${TARGET%[0-9]}"
+     MBRPART="MBR of ${TARGET%[0-9]}"
   fi
 
   GETMBR=$(dialog --stdout --title "$PN" --default-item mbr \
           --menu "Where do you want to install the bootmanager grub?" 0 0 0 \
-            mbr       "install bootmanager into MBR of $MBRPART" \
+            mbr       "install bootmanager into $MBRPART" \
             partition "install bootmanager into partition $TARGET" \
             nowhere   "do not install bootmanager at all" \
           ${ADDITIONAL_PARAMS})
@@ -241,6 +246,15 @@ prompt_for_release()
 }
 # }}}
 
+# ask for hostname {{{
+prompt_for_hostname()
+{
+  HOSTNAME="$(dialog --stdout --title "${PN}" --inputbox \
+            "Please enter the hostname you would like to use for installation:" \
+            0 0 grml)"
+}
+# }}}
+
 # ask for Debian mirror {{{
 prompt_for_mirror()
 {
@@ -293,11 +307,15 @@ grubdevice() {
 config_swraid_setup()
 {
 TMPFILE=$(mktemp)
-RAIDLEVEL=$(dialog --stdout --title "$PN" --default-item raid1 \
-                   --menu "Which RAID level do you want to use?" 0 0 0 \
-                     raid1 "Software RAID level 1" \
-                     raid5 "Software RAID level 5")
-[ $? -eq 0 ] || bailout 20
+
+# Currently we support only raid1:
+RAIDLEVEL='raid1'
+
+#RAIDLEVEL=$(dialog --stdout --title "$PN" --default-item raid1 \
+#                   --menu "Which RAID level do you want to use?" 0 0 0 \
+#                     raid1 "Software RAID level 1" \
+#                     raid5 "Software RAID level 5")
+#[ $? -eq 0 ] || bailout 20
 
 MD_LIST=$(for i in $(seq 0 9) ; do
             awk '{print $4}' /proc/partitions | grep -q md$i || \
@@ -362,7 +380,7 @@ prompt_for_swraid()
 if dialog --stdout --title "$PN" \
           --defaultno --yesno "Do you want to configure Software RAID?
 
-Please notice that currently only RAID levels 1 and 5 are supported by ${PN}. Configuration will take place using mdadm." 0 0 ; then
+Please notice that only RAID level 1 is supported by ${PN} currently. Configuration will take place using mdadm." 0 0 ; then
   config_swraid_setup
 fi
 }
@@ -391,7 +409,7 @@ elif [ -n "$INTERACTIVE" ] ; then
 
    INFOTEXT="$INFOTEXT
 
-Is this ok for you? Notice: canceling will exit ${PN}."
+Is this ok for you? Notice: selecting 'No' will exit ${PN}."
 
    dialog --title "$PN" --no-collapse \
           --yesno "$INFOTEXT" 0 0
@@ -431,9 +449,18 @@ interactive_mode()
 
   prompt_for_release
 
-  # FIXME: there seems to be a problem with grubdevice if it's /dev/md*
+  prompt_for_hostname
+
+  # use first disk of sw-raid for grub by default, install grub on
+  # all involved disks later on
   if echo "$TARGET" | grep -q '/dev/md' ; then
-     echo "debug: SELECTED_PARTITIONS = $SELECTED_PARTITIONS">&2
+     if [ -n "$SELECTED_PARTITIONS" ] ; then # using sw-raid
+        # use hdX and not hdX,Y for $GRUB
+        TMPDEVICE=$(echo ${SELECTED_PARTITIONS} | awk '{print $1}') # use first disk only
+        GRUB="$(grubdevice ${TMPDEVICE%%[0-9]})" # like: hd0
+        GROOT="$(grubdevice ${TMPDEVICE})"       # like: hd0,0
+        echo "debug: GRUB = $GRUB - GROOT = $GROOT" >/tmp/debug # FIXME
+     fi
   else
      [ -n "$BOOT_PARTITION" ] && GRUB="$(grubdevice $BOOT_PARTITION)"
      [ -n "$TARGET" ]         && GROOT="$(grubdevice $TARGET)"
@@ -671,10 +698,10 @@ preparechroot() {
   # make sure we have our files for later use via chroot-script
   cp /etc/debootstrap/config    $MNTPOINT/etc/debootstrap/
   # make sure we adjust the configuration variables accordingly:
-  sed -i "s/RELEASE=.*/RELEASE=\"$RELEASE\"/" $MNTPOINT/etc/debootstrap/config
-  sed -i "s/TARGET=.*/TARGET=\"$TARGET\"/"    $MNTPOINT/etc/debootstrap/config
-  sed -i "s/GRUB=.*/GRUB=\"$GRUB\"/"          $MNTPOINT/etc/debootstrap/config
-  sed -i "s/GROOT=.*/GROOT=\"$GROOT\"/"       $MNTPOINT/etc/debootstrap/config
+  sed -i "s#RELEASE=.*#RELEASE=\"$RELEASE\"#" $MNTPOINT/etc/debootstrap/config
+  sed -i "s#TARGET=.*#TARGET=\"$TARGET\"#"    $MNTPOINT/etc/debootstrap/config
+  sed -i "s#GRUB=.*#GRUB=\"$GRUB\"#"          $MNTPOINT/etc/debootstrap/config
+  sed -i "s#GROOT=.*#GROOT=\"$GROOT\"#"       $MNTPOINT/etc/debootstrap/config
 
   cp /etc/debootstrap/packages  $MNTPOINT/etc/debootstrap/packages
 
@@ -689,7 +716,7 @@ preparechroot() {
   # provide system's /etc/hosts to the target:
   if ! [ -f "$MNTPOINT/etc/hosts" ] ; then
      cp /etc/hosts $MNTPOINT/etc/hosts
-     sed -i "s/127.0.0.1 .*/127.0.0.1       localhost  $HOSTNAME/" /etc/hosts
+     sed -i "s#127.0.0.1 .*#127.0.0.1       localhost  $HOSTNAME#" /etc/hosts
   fi
 
   # setup default locales
@@ -737,15 +764,19 @@ grub_install() {
      echo "Notice: \$GRUB or \$GROOT not defined, will not install grub therefor."
   elif [ -n "$SELECTED_PARTITIONS" ] ; then # using sw-raid
      for device in $SELECTED_PARTITIONS ; do
-        GRUB=$(grubdevice $device)
+        # TMPDEVICE=$(echo ${SELECTED_PARTITIONS} | awk '{print $1}')
+        # GRUB="$(grubdevice ${TMPDEVICE})"
+        # GRUB="$(grubdevice ${TMPDEVICE%%[0-9]})"
+        # GRUB=$(grubdevice $device)
+        GRUB="$(grubdevice ${device%%[0-9]})"
         einfo "Installing grub on ${GRUB}:"
-        [ -x /usr/sbin/grub-install ] && GRUBINSTALL=/usr/sbin/grub-install || GRUBINSTALL=/sbin/grub-install
+        [ -x /usr/sbin/grub-install ] && GRUBINSTALL="/usr/sbin/grub-install --no-floppy" || GRUBINSTALL="/sbin/grub-install --no-floppy"
         $GRUBINSTALL --root-directory="$MNTPOINT" "(${GRUB})"
         eend $?
      done
   else
      einfo "Installing grub on ${GRUB}:"
-     [ -x /usr/sbin/grub-install ] && GRUBINSTALL=/usr/sbin/grub-install || GRUBINSTALL=/sbin/grub-install
+     [ -x /usr/sbin/grub-install ] && GRUBINSTALL="/usr/sbin/grub-install --no-floppy" || GRUBINSTALL="/sbin/grub-install --no-floppy"
      $GRUBINSTALL --root-directory="$MNTPOINT" "(${GRUB})"
      eend $?
   fi
@@ -792,10 +823,12 @@ done
 # }}}
 
 # finalize {{{
+einfo "Removing ${CHROOT_VARIABLES}" ; rm "$CHROOT_VARIABLES" ; eend $?
+einfo "Removing ${STAGES}" ; rmdir "$STAGES" ; eend $?
+
 # Remove temporary mountpoint again
 if echo "$MNTPOINT" | grep -q '/mnt/debootstrap\.' ; then
    einfo "Removing directory ${MNTPOINT}" ; rmdir "$MNTPOINT" ; eend $?
-   einfo "Removing ${CHROOT_VARIABLES}" ; rm "$CHROOT_VARIABLES" ; eend $?
 fi
 # }}}