Support raid1 only for now, update changelog and TODO
[grml-debootstrap.git] / grml-debootstrap
index 8488ad8..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
 }
@@ -381,7 +399,7 @@ elif [ -n "$INTERACTIVE" ] ; then
    INFOTEXT="Please recheck configuration before execution:
    "
    [ -n "$TARGET" ]  && INFOTEXT="$INFOTEXT
-   Target:                 $TARGET"
+   Target:          $TARGET"
    [ -n "$GRUB" ]    && INFOTEXT="$INFOTEXT
    Install grub:    $GRUB"
    [ -n "$RELEASE" ] && INFOTEXT="$INFOTEXT
@@ -391,9 +409,9 @@ 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" \
+   dialog --title "$PN" --no-collapse \
           --yesno "$INFOTEXT" 0 0
 
 else # if not running automatic installation display configuration and prompt for execution:
@@ -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)"
@@ -523,7 +550,7 @@ ISODIR=${ISODIR%%/}
 # }}}
 
 # provide variables to chroot system {{{
-CHROOT_VARIABLES="/etc/debootstrap/variables_${SHORT_TARGET}"
+CHROOT_VARIABLES="/var/cache/grml-debootstrap/variables_${SHORT_TARGET}"
 touch $CHROOT_VARIABLES
 chmod 600 $CHROOT_VARIABLES # make sure nobody except root can read it
 [ -n "$ARCH" ]   && echo "ARCH=$ARCH"     >  $CHROOT_VARIABLES
@@ -671,13 +698,15 @@ 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
-  cp $CHROOT_VARIABLES          $MNTPOINT/etc/debootstrap/variables # do NOT use $CHROOT_VARIABLES inside chroot!
+
+  # notice: do NOT use $CHROOT_VARIABLES inside chroot but statically file instead!
+  cp $CHROOT_VARIABLES          $MNTPOINT/etc/debootstrap/variables
 
   cp -a /etc/debootstrap/extrapackages/ $MNTPOINT/etc/debootstrap/
 
@@ -687,14 +716,14 @@ 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
   [ -n "$LOCALES" ] && cp /etc/debootstrap/locale.gen  $MNTPOINT/etc/locale.gen
 
   # MAKEDEV is just a forking bomb crap, let's do it on our own instead :)
-  ( cd $MNTPOINT/dev && tar jxf /etc/debootstrap/devices.tar.gz )
+  ( cd $MNTPOINT/dev && tar zxf /etc/debootstrap/devices.tar.gz )
 
   # copy any existing existing files to chroot
   [ -d /etc/debootstrap/boot  ] && cp -a /etc/debootstrap/boot/*  $MNTPOINT/boot/
@@ -735,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
@@ -789,8 +822,14 @@ for i in mkfs tunefs mount_target debootstrap_system preparechroot \
 done
 # }}}
 
-# stages {{{
-  echo done > $STAGES/grml-debootstrap
+# 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 $?
+fi
 # }}}
 
 # end dialog of autoinstallation {{{