Merge remote-tracking branch 'origin/pr/111'
authorMichael Prokop <mika@grml.org>
Wed, 14 Nov 2018 21:12:40 +0000 (22:12 +0100)
committerMichael Prokop <mika@grml.org>
Wed, 14 Nov 2018 21:12:40 +0000 (22:12 +0100)
1  2 
grml-debootstrap

diff --combined grml-debootstrap
@@@ -298,13 -298,7 +298,13 @@@ cleanup() 
  
    if [ -n "${ORIG_TARGET}" ] ; then
      einfo "Removing loopback mount of file ${ORIG_TARGET}."
 -    kpartx -d "${ORIG_TARGET}" ; eend $?
 +    kpartx -d "${ORIG_TARGET}"
 +    # Workaround for a bug in kpartx which doesn't clean up properly,
 +    # see Debian Bug #891077 and Github-PR grml/grml-debootstrap#112
 +    if dmsetup ls | grep -q "^${LOOP_PART} "; then
 +      kpartx -d "/dev/${LOOP_DISK}" >/dev/null
 +    fi
 +    eend $?
    fi
  }
  
@@@ -1393,6 -1387,21 +1393,21 @@@ prepare_vm() 
       bailout 1
    fi
  
+   # make sure loop module is present and an usable loop device exists
+   modprobe -q loop
+   if ! losetup -f >/dev/null 2>&1; then
+     eerror "Error finding usable loop device" ; eend 1
+     bailout 1
+   fi
+   # if dm-mod isn't available then kpartx will fail with
+   # "Is device-mapper driver missing from kernel? [...]"
+   modprobe -q dm-mod
+   if ! grep -q 'device-mapper' /proc/misc >/dev/null 2>&1 ; then
+     einfo "Device-mapper support missing in kernel."
+     bailout 1
+   fi
    ORIG_TARGET="$TARGET" # store for later reuse
  
    if [ -n "$VMFILE" ]; then
    parted -s "${TARGET}" 'mkpart primary ext4 2M -1'
    parted -s "${TARGET}" 'set 1 boot on'
  
-   # 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 || ! grep -q 'device-mapper' /proc/misc >/dev/null 2>&1 ; then
-     einfo "Device-mapper not ready yet, trying to load dm-mod module."
-     modprobe dm-mod ; eend $?
-   fi
-   # make sure loop module is present
-   if ! losetup -f >/dev/null 2>&1; then
-     einfo "Can not find a usable loop device, retrying after loading loop module."
-     modprobe loop
-     if losetup -f >/dev/null 2>&1; then
-       einfo "Found a usable loop device now, continuing."
-     else
-       eerror "Error finding usable loop device" ; eend 1
-       bailout 1
-     fi
-   fi
    DEVINFO=$(kpartx -asv "$TARGET") # e.g. 'add map loop0p1 (254:5): 0 20477 linear 7:0 3'
    if [ -z "${DEVINFO}" ] ; then
      eerror "Error setting up loopback device." ; eend 1
    # hopefully this always works as expected
    LOOP_PART="${DEVINFO##add map }" # 'loop0p1 (254:5): 0 20477 linear 7:0 3'
    LOOP_PART="${LOOP_PART// */}"    # 'loop0p1'
 +  LOOP_DISK="${LOOP_PART%p*}"      # 'loop0'
    export TARGET="/dev/mapper/$LOOP_PART" # '/dev/mapper/loop1p1'
  
    if [ -z "$TARGET" ] ; then
    try_umount 3 "${MNTPOINT}"/dev
    umount "${MNTPOINT}"
    kpartx -d "${ORIG_TARGET}" >/dev/null
 +  # Workaround for a bug in kpartx which doesn't clean up properly,
 +  # see Debian Bug #891077 and Github-PR grml/grml-debootstrap#112
 +  if dmsetup ls | grep -q "^${LOOP_PART} "; then
 +    kpartx -d "/dev/${LOOP_DISK}" >/dev/null
 +  fi
  }
  # }}}