Ensure that grub-pc is installed in VMs even when using --nopackages
[grml-debootstrap.git] / grml-debootstrap
index 5604849..7fd52a2 100755 (executable)
@@ -69,6 +69,7 @@ MNTPOINT="/mnt/debootstrap.$$"
 [ -n "$MKFS" ] || MKFS='mkfs.ext4'
 [ -n "$MKFS_OPTS" ] || MKFS_OPTS=''
 [ -n "$PACKAGES" ] || PACKAGES='yes'
+[ -n "$POST_SCRIPTS" ] || POST_SCRIPTS='yes'
 [ -n "$PRE_SCRIPTS" ] || PRE_SCRIPTS='yes'
 [ -n "$RECONFIGURE" ] || RECONFIGURE='console-data'
 [ -n "$RELEASE" ] || RELEASE='jessie'
@@ -83,6 +84,7 @@ MNTPOINT="/mnt/debootstrap.$$"
 # inside the chroot system locales might not be available, so use minimum:
 export LANG=C
 export LC_ALL=C
+export LANGUAGE=C
 
 # make sure interactive mode is only executed when
 # using an empty configuration file or option --interactive
@@ -378,7 +380,13 @@ fi
 [ "$_opt_packages_set" ]        && PACKAGES='yes'
 [ "$_opt_nopackages" ]          && PACKAGES=''
 [ "$_opt_debconf_set" ]         && DEBCONF='yes'
-[ "$_opt_scripts_set" ]         && SCRIPTS='yes'
+
+if [ "$_opt_scripts_set" ] ; then
+  ewarn "Deprecation NOTE: --scripts option is deprecated, please switch to --post-scripts instead."
+  SCRIPTS='yes' # deprecated since grml-debootstrap >=0.71
+fi
+
+[ "$_opt_post_scripts_set" ]    && POST_SCRIPTS='yes'
 [ "$_opt_pre_scripts_set" ]     && PRE_SCRIPTS='yes'
 [ "$_opt_chroot_scripts_set" ]  && CHROOT_SCRIPTS='yes'
 [ "$_opt_keep_src_list" ]       && KEEP_SRC_LIST='yes'
@@ -1150,6 +1158,12 @@ finalize_vm() {
 # chroot-script skips installation for unset ${GRUB}
 if [[ -z "${GRUB}" ]] || ! dd if="${GRUB}" bs=512 count=1 2>/dev/null | cat -v | fgrep -q GRUB; then
   einfo "Installing Grub as bootloader."
+
+  if ! chroot "${MNTPOINT}" dpkg --list grub-pc 2>/dev/null | grep -q '^ii' ; then
+    echo "Notice: grub-pc package not present yet, installing it therefore."
+    DEBIAN_FRONTEND=$DEBIAN_FRONTEND chroot "$MNTPOINT" apt-get -y install $DPKG_OPTIONS grub-pc
+  fi
+
   mkdir -p "${MNTPOINT}/boot/grub"
   if ! [ -d "${MNTPOINT}"/usr/lib/grub/i386-pc/ ] ; then
      eerror "Error: grub not installed inside Virtual Machine. Can not install bootloader." ; eend 1
@@ -1276,6 +1290,7 @@ preparechroot() {
   [ -n "$NOPASSWORD" ]          && echo "NOPASSWORD=\"true\""                                                      >> "$CHROOT_VARIABLES"
   [ -n "$NOKERNEL" ]            && echo "NOKERNEL=\"true\""                                                        >> "$CHROOT_VARIABLES"
   [ -n "$PACKAGES" ]            && echo "PACKAGES='$(sed "s,','\\\\'',g" <<<"${PACKAGES}")'"                       >> "$CHROOT_VARIABLES"
+  [ -n "$POST_SCRIPTS" ]        && echo "POST_SCRIPTS='$(sed "s,','\\\\'',g" <<<"${POST_SCRIPTS}")'"               >> "$CHROOT_VARIABLES"
   [ -n "$PRE_SCRIPTS" ]         && echo "PRE_SCRIPTS='$(sed "s,','\\\\'',g" <<<"${PRE_SCRIPTS}")'"                 >> "$CHROOT_VARIABLES"
   [ -n "$RECONFIGURE" ]         && echo "RECONFIGURE='$(sed "s,','\\\\'',g" <<<"${RECONFIGURE}")'"                 >> "$CHROOT_VARIABLES"
   [ -n "$RELEASE" ]             && echo "RELEASE='$(sed "s,','\\\\'',g" <<<"${RELEASE}")'"                         >> "$CHROOT_VARIABLES"
@@ -1398,33 +1413,45 @@ iface eth0 inet dhcp
 
 # 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
+  # make sure hostname is set even before chroot-script get executed
+  echo "$HOSTNAME" > /etc/hostname
+
+  # 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
-   export MNTPOINT
-   if [ -d "$_opt_scripts" ] || [ "$SCRIPTS" = 'yes' ] ; then
-      [ -d "$_opt_scripts" ] && scripts="$_opt_scripts" || scripts="$CONFFILES/scripts/"
-      for script in ${scripts}/* ; do
-         if [ -x "$script" ] ; then
-            einfo "Executing script $script"
-            $script ; eend $?
-         fi
-      done
-   fi
+# execute all scripts in /etc/debootstrap/post-scripts/ {{{
+execute_post_scripts() {
+  # make sure we have $MNTPOINT available for our scripts
+  export MNTPOINT
+
+  if [ -d "$_opt_scripts" ] || [ "$SCRIPTS"  = 'yes'] ; then
+    # legacy support for /etc/debootstrap/scripts/
+    [ -d "$_opt_scripts" ] && post_scripts="$_opt_scripts" || post_scripts="${CONFFILES}/scripts/"
+    ewarn "Deprecation NOTE: --scripts/SCRIPTS are deprecated, please switch to --post-scripts/POST_SCRIPTS instead."
+  elif [ -d "$_opt_post_scripts" ] || [ "$POST_SCRIPTS" = 'yes' ] ; then
+    [ -d "$_opt_post_scripts" ] && post_scripts="$_opt_post_scripts" || post_scripts="${CONFFILES}/post-scripts/"
+  fi
+
+  if [ -n "$post_scripts" ] ; then
+    for script in "${post_scripts}"/* ; do
+      if [ -x "$script" ] ; then
+        einfo "Executing post-script $script"
+        "$script" ; eend $?
+      fi
+    done
+  fi
 }
 # }}}
 
@@ -1528,7 +1555,7 @@ fscktool() {
 
 # now execute all the functions {{{
 for i in prepare_vm mkfs tunefs mount_target debootstrap_system \
-         preparechroot execute_pre_scripts chrootscript execute_scripts \
+         preparechroot execute_pre_scripts chrootscript execute_post_scripts \
          umount_chroot finalize_vm fscktool ; do
     if stage "${i}" ; then
       if "$i" ; then