if [ -n "$MNTPOINT" ] ; then
if grep -q "$MNTPOINT" /proc/mounts ; then
# make sure nothing is left inside chroot so we can unmount it
- [ -x "$MNTPOINT"/etc/init.d/ssh ] && "$MNTPOINT"/etc/init.d/ssh stop
- [ -x "$MNTPOINT"/etc/init.d/mdadm ] && "$MNTPOINT"/etc/init.d/mdadm stop
+ for service in ssh mdadm ; do
+ if [ -x "${MNTPOINT}/etc/init.d/${service}" ] ; then
+ chroot "$MNTPOINT" "/etc/init.d/${service}" stop
+ fi
+ done
[ -x "$MNTPOINT"/bin/umount ] && chroot "$MNTPOINT" umount -a >/dev/null 2>&1
# make sure we have what we need {{{
if [ -n "$VIRTUAL" ] ; then
- check4progs kpartx mksh parted qemu-img || bailout 1
+ check4progs grub-mkimage kpartx mksh parted qemu-img || bailout 1
fi
# }}}
AVAILABLE_PARTITIONS=$(LANG=C fdisk -l 2>/dev/null | \
sed 's/*//' | \
grep -v 'Extended$' | \
- gawk -v num=0 -v ORS=' ' '/^\/dev\// {print $1}'; ls /dev/md* 2>/dev/null || true);
+ gawk -v num=0 -v ORS=' ' '/^\/dev\// {print $1}'; ls /dev/md[0-9]* 2>/dev/null || true);
if [ -z "$AVAILABLE_PARTITIONS" ] ; then
dialog --title "$PN" --trim \
fi
PARTITION_LIST=$(for i in $AVAILABLE_PARTITIONS ; do
- echo "$i $(blkid -s TYPE -o value "$i" 2>/dev/null || echo '[no_filesystem_yet]')"
+ fs="$(blkid -s TYPE -o value "$i" 2>/dev/null)"
+ [ -n "$fs" ] || fs='[no_filesystem_yet]'
+ echo "$i" "$fs"
+ unset fs
done)
TARGET=$(dialog --title "$PN" --single-quoted --stdout \
fi
# }}}
+# Support for generic release codenames is unavailable. {{{
+if [ "$RELEASE" = "stable" ] || [ "$RELEASE" = "testing" ] ; then
+ eerror "Generic release codenames (stable, testing) are unsupported. \
+Please use specific codenames such as lenny, squeeze, wheezy or jessie." ; eend 1
+ bailout 1
+fi
+# }}}
+
checkconfiguration
# finally make sure at least $TARGET is set [the partition for the new system] {{{
bailout 1
fi
- cp "${MNTPOINT}"/usr/lib/grub/i386-pc/* "${MNTPOINT}/boot/grub/"
+ case "$RELEASE" in
+ lenny|squeeze|wheezy)
+ cp "${MNTPOINT}"/usr/lib/grub/i386-pc/* "${MNTPOINT}/boot/grub/"
+ ;;
+ *)
+ cp -a "${MNTPOINT}"/usr/lib/grub/i386-pc "${MNTPOINT}/boot/grub/"
+ ;;
+ esac
chroot "${MNTPOINT}" grub-mkimage -O i386-pc -p "(hd0,msdos1)/boot/grub" -o /tmp/core.img biosdisk part_msdos ext2
dd if="${MNTPOINT}/tmp/core.img" of="${ORIG_TARGET}" conv=notrunc seek=4
rm -f "${MNTPOINT}/tmp/core.img"
}
# }}}
+try_umount() {
+ local tries=$1
+ local mountpoint="$2"
+
+ for (( try=1; try<=tries; try++ )); do
+ if [[ ${try} -eq ${tries} ]]; then
+ # Last time, show errors this time
+ umount "${mountpoint}" && return 0
+ else
+ # Not last time, hide errors until fatal
+ if umount "${mountpoint}" 2>/dev/null ; then
+ return 0
+ else
+ sleep 1
+ fi
+ fi
+ done
+ return 1 # Tried enough
+}
+
# execute chroot-script {{{
chrootscript() {
if ! [ -r "$MNTPOINT/bin/chroot-script" ] ; then
else
chroot "$MNTPOINT" /bin/chroot-script ; RC=$?
fi
- umount "$MNTPOINT"/dev
+ try_umount 3 "$MNTPOINT"/dev
eend $RC
fi