Run unmount of chroot's /dev twice
[grml-debootstrap.git] / grml-debootstrap
index 1ab3dd7..619d651 100755 (executable)
@@ -199,12 +199,12 @@ cleanup() {
 
       [ -x "$MNTPOINT"/bin/umount ] && chroot "$MNTPOINT" umount -a >/dev/null 2>&1
 
-      # ugly, but make sure we really don't leave anything (/proc /proc is intended)
-      for ARG in /sys /proc /proc ; do
+      # ugly, but make sure we really don't leave anything (/proc /proc and
+      # /dev /dev are intended, trying to work around timing issues, see #657023)
+      for ARG in /sys /proc /proc /dev /dev ; do
         [ -x "$MNTPOINT"/bin/umount ] && chroot "$MNTPOINT" umount $ARG >/dev/null 2>&1
         umount "$MNTPOINT"/$ARG >/dev/null 2>&1
       done
-      umount "$MNTPOINT"/dev >/dev/null 2>&1
 
       if [ -n "$ISODIR" ] ; then
         [ -d "$MNTPOINT/$ISODIR" ] && umount "$MNTPOINT/$ISODIR" >/dev/null 2>&1
@@ -264,7 +264,7 @@ stage() {
 # }}}
 
 # make sure we have what we need {{{
-check4progs debootstrap dialog || bailout 1
+check4progs debootstrap || bailout 1
 # }}}
 
 # source main configuration file {{{
@@ -354,7 +354,7 @@ fi
 
 # make sure we have what we need {{{
 if [ -n "$VIRTUAL" ] ; then
-  check4progs kpartx mksh qemu-img || bailout 1
+  check4progs kpartx mksh parted qemu-img || bailout 1
 fi
 # }}}
 
@@ -748,6 +748,8 @@ fi
 # interactive mode {{{
 interactive_mode()
 {
+  check4progs dialog || bailout 1
+
   welcome_dialog
 
   prompt_for_release
@@ -952,6 +954,13 @@ prepare_vm() {
   dd if=/dev/zero bs=1 conv=notrunc count=64 seek=446 of="$TARGET"
   parted -s "${TARGET}" 'mkpart primary ext3 2M -1'
 
+  # if dm-mod isn't available then kpartx will fail with
+  # "Is device-mapper driver missing from kernel? [...]"
+  if ! kpartx -av $TARGET >/dev/null 2>&1 ; then
+    einfo "Device-mapper not ready yet, trying to load dm-mod module."
+    modprobe dm-mod ; eend $?
+  fi
+
   DEVINFO=$(kpartx -av $TARGET) # 'add map loop1p1 (253:0): 0 6289408 linear /dev/loop1 2048'
   if [ -z "${DEVINFO}" ] ; then
     eerror "Error setting up loopback device." ; eend 1