Revert "Updated grml-debootstrap parameter handling"
[grml-debootstrap.git] / grml-debootstrap
index 83ae0d3..2e386bf 100755 (executable)
@@ -11,7 +11,7 @@ set -e # exit on any error
 
 # variables {{{
 PN="$(basename $0)"
-VERSION='0.33-pre1'
+VERSION='0.34'
 MNTPOINT="/mnt/debootstrap.$$"
 
 # inside the chroot system locales might not be available, so use minimum:
@@ -64,7 +64,8 @@ Configuration options:
       --password <pwd>     Use specified password as password for user root.
       --bootappend <line>  Add specified appendline to kernel whilst booting.
       --chroot-scripts <d> Execute chroot scripts from specified directory.
-      --scripts <dir>      Execute scripts from specified directory.
+      --pre-scripts <dir>  Execute scripts from specified directory (before chroot-scripts).
+      --scripts <dir>      Execute scripts from specified directory (after chroot-scripts).
 
 Other options:
 
@@ -141,6 +142,7 @@ fi
 [ "$_opt_packages_set" ]        && PACKAGES='yes'
 [ "$_opt_debconf_set" ]         && DEBCONF='yes'
 [ "$_opt_scripts_set" ]         && SCRIPTS='yes'
+[ "$_opt_pre_scripts_set" ]     && PRE_SCRIPTS='yes'
 [ "$_opt_chroot_scripts_set" ]  && CHROOT_SCRIPTS='yes'
 [ "$_opt_keep_src_list" ]       && KEEP_SRC_LIST='yes'
 [ "$_opt_hostname" ]            && HOSTNAME=$_opt_hostname
@@ -235,7 +237,7 @@ prompt_for_bootmanager()
         MBRDISK=$(readlink -f $MBRDISK)
      else
         # fall back to old behaviour
-        MBRDISK=$(echo ${TARGET} | sed -e 's/[0-9][0-9]*$/')
+        MBRDISK=$(echo ${TARGET} | sed -e 's/[0-9][0-9]*$//')
      fi
 
      MBRPART="MBR of $MBRDISK"
@@ -574,15 +576,17 @@ set_target_directory(){
     TUNE2FS=''
     FSCK=''
     GRUB=''
+    # make sure we normalise the path to an absolute directory name so something like:
+    #  mkdir -p foo/a bar/a; (cd foo; grml-debootstrap -t a)&; (cd bar; grml-debootstrap -t a)&; wait
+    # works
+    TARGET="$(readlink -f $TARGET)"
 }
 
-case $TARGET in
-  /dev/shm/*) set_target_directory ;;
-  /dev/*)
+if [ -b "$TARGET" ] ; then
     PARTITION=1
-    ;;
-  *) set_target_directory ;;
-esac
+else
+    set_target_directory
+fi
 # }}}
 
 # architecture setup {{{
@@ -754,8 +758,10 @@ debootstrap_system() {
   if grep -q "$MNTPOINT" /proc/mounts || [ -n "$DIRECTORY" ] ; then
      einfo "Running $DEBOOTSTRAP $DEBOOTSTRAP_OPT for release ${RELEASE}${ARCHINFO} using ${MIRROR}${ISO}"
      if [ -n "$MIRROR" ] ; then
+        einfo "Executing: $DEBOOTSTRAP $ARCHCMD $KEYRING $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $MIRROR"
         $DEBOOTSTRAP $ARCHCMD $KEYRING $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $MIRROR
      else
+        einfo "Executing: $DEBOOTSTRAP $ARCHCMD $KEYRING $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $ISO"
         $DEBOOTSTRAP $ARCHCMD $KEYRING $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $ISO
      fi
      eend $?
@@ -858,6 +864,22 @@ preparechroot() {
 }
 # }}}
 
+# execute all scripts in /etc/debootstrap/pre-scripts/ {{{
+execute_pre_scripts() {
+   # make sure we have $MNTPOINT available for our scripts
+   export MNTPOINT
+   if [ -d "$_opt_pre_scripts" ] || [ "$PRE_SCRIPTS" = 'yes' ] ; then
+      [ -d "$_opt_pre_scripts" ] && pre_scripts="$_opt_pre_scripts" || pre_scripts="$CONFFILES/pre-scripts/"
+      for script in ${pre_scripts}/* ; do
+         if [ -x "$script" ] ; then
+            einfo "Executing pre-script $script"
+            $script ; eend $?
+         fi
+      done
+   fi
+}
+# }}}
+
 # execute all scripts in /etc/debootstrap/scripts/ {{{
 execute_scripts() {
    # make sure we have $MNTPOINT available for our scripts
@@ -900,18 +922,21 @@ grub_install() {
      return 0
   fi
 
+  if ! [ -x "$(which grub-install)" ] ; then
+     echo "Error: grub-install not available. (Error while installing grub package?)"
+     return 1
+  fi
+
   if [ -n "$SELECTED_PARTITIONS" ] ; then # using sw-raid
      for device in $SELECTED_PARTITIONS ; do
         GRUB="${device%%[0-9]}"
         einfo "Installing grub on ${GRUB}:"
-        [ -x /usr/sbin/grub-install ] && GRUBINSTALL="/usr/sbin/grub-install --no-floppy" || GRUBINSTALL="/sbin/grub-install --no-floppy"
-        $GRUBINSTALL --root-directory="$MNTPOINT" "$GRUB"
+        grub-install --no-floppy --root-directory="$MNTPOINT" "$GRUB"
         eend $?
      done
   else
      einfo "Installing grub on ${GRUB}:"
-     [ -x /usr/sbin/grub-install ] && GRUBINSTALL="/usr/sbin/grub-install --no-floppy" || GRUBINSTALL="/sbin/grub-install --no-floppy"
-     $GRUBINSTALL --root-directory="$MNTPOINT" "$GRUB"
+     grub-install --no-floppy --root-directory="$MNTPOINT" "$GRUB"
      eend $?
   fi
 }
@@ -956,7 +981,7 @@ fscktool() {
 
 # now execute all the functions {{{
 for i in mkfs tunefs mount_target debootstrap_system preparechroot \
-         chrootscript execute_scripts grub_install umount_chroot   \
+         execute_pre_scripts chrootscript execute_scripts grub_install umount_chroot   \
          fscktool ; do
     if stage "${i}" ; then
        $i && ( stage "${i}" done && rm -f "${STAGES}/${i}" ) || bailout 2 "i"