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
}
bailout 1
fi
- # make sure loop module is present and an usable loop device exists
+ # make sure loop module is present and a usable loop device exists
+ modprobe -q loop
if ! losetup -f >/dev/null 2>&1; then
- einfo "Can not find a usable loop device, retrying after loading loop module."
- if ! modprobe loop > /dev/null 2>&1; then
- eerror "Error loading loop module" ; eend 1
- bailout 1
- fi
- eend $?
- 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
+ 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 not ready yet, trying to load dm-mod module."
- if ! modprobe dm-mod > /dev/null 2>&1; then
- eerror "Error loading dm-mod module" ; eend 1
- bailout 1
- fi
- eend $?
+ eerror "Device-mapper support missing in kernel." ; eend 1
+ bailout 1
fi
ORIG_TARGET="$TARGET" # store for later reuse
# 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
}
# }}}