I am proposing that the attached patches be merged from Ubuntu. These allow d-i to work when the contents of a Debian install ISO are written to a USB disk.
For more background on the cdrom-detect change, please read through the discussion here: https://bugs.launchpad.net/ubuntu/+bug/234185 Additionally, I would like to request that someone sponsor an upload of usb-creator, a tool originally created for Ubuntu that takes a CD or ISO file, writes it to a USB disk, and modifies the syslinux configuration to add the try-usb option. Thank you for your consideration.
=== modified file 'debian/cdrom-detect.postinst' --- debian/cdrom-detect.postinst 2008-06-22 21:58:03 +0000 +++ debian/cdrom-detect.postinst 2008-12-05 19:18:41 +0000 @@ -32,13 +32,42 @@ do mounted=0 + if db_get cdrom-detect/try-usb && [ "$RET" = "true" ]; then + devices="$(list-devices usb-partition)" + for device in $devices; do + if mount -t vfat -o ro,exec $device /cdrom && + [ -e /cdrom/.disk/info ]; then + log "CD-ROM mount succeeded: device=$device" + mounted=1 + db_set cdrom-detect/cdrom_device $device + break + else + log "CD-ROM mount failed: device=$device" + umount /cdrom 2>/dev/null || true + fi + done + fi + + if [ "$mounted" = "1" ]; then + break + fi + + wrong=0 devices="$(list-devices cd; list-devices maybe-usb-floppy)" for device in $devices; do if mount -t iso9660 -o ro,exec $device /cdrom; then log "CD-ROM mount succeeded: device=$device" - mounted=1 - db_set cdrom-detect/cdrom_device $device - break + if [ -e /cdrom/.disk/info ]; then + CDNAME=`cat /cdrom/.disk/info` + log "Detected CD '$CDNAME'" + mounted=1 + db_set cdrom-detect/cdrom_device $device + break + else + log "The CD on $device is not a Debian CD!" + wrong=1 + umount /cdrom 2>/dev/null || true + fi else log "CD-ROM mount failed: device=$device" fi @@ -48,6 +77,12 @@ break fi + if [ "$wrong" = "1" ]; then + db_input critical cdrom-detect/wrong-cd || [ $? -eq 30 ] + db_go + fail + fi + # If a device was detected but the mount failed, ask for the CD. if [ -n "$devices" ]; then db_input critical cdrom-detect/retry || [ $? -eq 30 ] === modified file 'debian/cdrom-detect.templates' --- debian/cdrom-detect.templates 2008-06-22 21:58:03 +0000 +++ debian/cdrom-detect.templates 2008-12-05 19:29:10 +0000 @@ -84,6 +84,11 @@ . Please insert a suitable CD to continue with the installation. +Template: cdrom-detect/try-usb +Type: boolean +Description: for internal use only + Preseed this to true to try to mount /cdrom from USB partitions. + Template: cdrom-detect/no-release Type: error # Translators: DO NOT TRANSLATE "Release". This is the name of a file. === modified file 'debian/changelog' --- debian/changelog 2008-09-21 21:55:47 +0000 +++ debian/changelog 2008-12-05 19:57:03 +0000 @@ -1,3 +1,14 @@ +cdrom-detect (1.31) UNRELEASED; urgency=low + + * Merge from Ubuntu: + - Try to find an image on every CD device, not just the first. + - allow installation from USB media with CD contents + - enabled if template cdrom-detect/try-usb=true + - probe vfat partitions on USB drives + * Bump the dependency on di-utils to 1.66 for the above change. + + -- Evan Dandrea <[EMAIL PROTECTED]> Fri, 05 Dec 2008 11:44:43 -0800 + cdrom-detect (1.30) unstable; urgency=low [ Updated translations ] === modified file 'debian/control' --- debian/control 2008-04-08 11:22:07 +0000 +++ debian/control 2008-12-05 19:43:35 +0000 @@ -10,6 +10,6 @@ Package: cdrom-detect XC-Package-Type: udeb Architecture: all -Depends: ${misc:Depends}, hw-detect, di-utils (>= 1.48) +Depends: ${misc:Depends}, hw-detect, di-utils (>= 1.66) XB-Installer-Menu-Item: 1300 Description: Detect CDROM devices and mount the CD
=== modified file 'debian/changelog' --- debian/changelog 2008-09-29 18:30:48 +0000 +++ debian/changelog 2008-12-05 19:40:21 +0000 @@ -1,3 +1,11 @@ +debian-installer-utils (1.66) UNRELEASED; urgency=low + + * Merge from Ubuntu: + - list-devices: new "usb-partition" type for detecting partitions on USB + drives. + + -- Evan Dandrea <[EMAIL PROTECTED]> Fri, 05 Dec 2008 11:38:33 -0800 + debian-installer-utils (1.65) unstable; urgency=low * When looking for partitions, only consider device subdirectories that end === modified file 'list-devices' --- list-devices 2008-09-29 18:22:57 +0000 +++ list-devices 2008-12-05 19:37:11 +0000 @@ -6,9 +6,9 @@ logger -t list-devices "deprecated parameter maybe-floppy" TYPE=floppy ;; - cd|disk|partition|floppy|maybe-usb-floppy) ;; + cd|disk|partition|floppy|maybe-usb-floppy|usb-partition) ;; *) - echo "Usage: $0 cd|disk|partition|floppy|maybe-usb-floppy" >&2 + echo "Usage: $0 cd|disk|partition|floppy|maybe-usb-floppy|usb-partition" >&2 exit 2 ;; esac @@ -40,6 +40,12 @@ # Also allow misdetected USB devices scan_partition=: ;; + usb-partition) + for x in /sys/block/*/*; do + [ -d "$x" ] || continue + syspaths="${syspaths:+$syspaths }$x" + done + ;; *) for x in /sys/block/*; do [ -d "$x" ] || continue @@ -85,6 +91,13 @@ match=: fi fi + # Disk partitions, but only on USB drives + if ! $match && [ "$TYPE" = usb-partition ]; then + if device_info env "$devpath" | grep -q '^ID_BUS=usb' && \ + device_info env "$devpath" | grep -q '^ID_TYPE=disk'; then + match=: + fi + fi if $match; then if ! name="$(device_info name "$devpath")"; then name="$(printf %s "${devpath##*/}" | \
=== modified file 'debian/changelog' --- debian/changelog 2008-09-22 00:48:37 +0000 +++ debian/changelog 2008-12-06 00:16:06 +0000 @@ -1,3 +1,12 @@ +apt-setup (1:0.41) UNRELEASED; urgency=low + + * Merge from Ubuntu: + - Check to make sure the CD filesystem is iso9660 before remounting it as + such. Do not write a CD identifier if we're not working with iso9660 + so pkgsel does not try to unmount such disks. + + -- Evan Dandrea <[EMAIL PROTECTED]> Fri, 05 Dec 2008 16:15:08 -0800 + apt-setup (1:0.40) unstable; urgency=low [ Colin Watson ] === modified file 'generators/40cdrom' --- generators/40cdrom 2008-09-18 11:00:54 +0000 +++ generators/40cdrom 2008-12-06 00:14:02 +0000 @@ -9,8 +9,14 @@ exit 0 fi +cdfstype=$(mount | grep "on /cdrom " | cut -d' ' -f5) +isofs= +if [ "$cdfstype" = "iso9660" ]; then + isofs=1 +fi + remount_cd() { - if [ "$ROOT" ] && [ ! -d /hd-media ]; then + if [ "$ROOT" ] && [ -n "$isofs" ] && [ ! -d /hd-media ]; then db_get cdrom-detect/cdrom_device $logoutput mount -t iso9660 -o ro,exec $RET /cdrom || true fi @@ -52,7 +58,7 @@ # Allow apt-cdrom to manage mounting/unmounting CDs in /target # (except for hd-media installs) - if [ ! -d /hd-media ]; then + if [ ! -d /hd-media ] && [ -n "$isofs" ]; then rm -f $ROOT/etc/apt/apt.conf.d/00NoMountCDROM # Also removes the bind-mount in /target @@ -68,7 +74,7 @@ </dev/null; then cat $ROOT$tmp >> $file - if [ "$ROOT" ] && [ ! -d /hd-media ]; then + if [ "$ROOT" ] && [ -n "$isofs" ] && [ ! -d /hd-media ]; then save_label fi else
=== modified file 'debian/changelog' --- debian/changelog 2008-09-22 01:13:33 +0000 +++ debian/changelog 2008-12-06 00:24:08 +0000 @@ -1,3 +1,10 @@ +partman-target (59) UNRELEASED; urgency=low + + * Merge from Ubuntu: + - Remove the cdrom mounpoint if the filesystem is not iso9660 or udf. + + -- Evan Dandrea <[EMAIL PROTECTED]> Fri, 05 Dec 2008 16:23:44 -0800 + partman-target (58) unstable; urgency=low [ Giuseppe Iuculano ] === added file 'debian/partman-target.install' --- debian/partman-target.install 1970-01-01 00:00:00 +0000 +++ debian/partman-target.install 2008-12-06 00:31:26 +0000 @@ -0,0 +1,1 @@ +finish-install.d usr/lib === added directory 'finish-install.d' === added file 'finish-install.d/02remove_broken_cdrom' --- finish-install.d/02remove_broken_cdrom 1970-01-01 00:00:00 +0000 +++ finish-install.d/02remove_broken_cdrom 2008-12-06 00:23:07 +0000 @@ -0,0 +1,16 @@ +#!/bin/sh +while read line; do + set -- $line + if echo "$2" | grep -qs "\(/cdrom\|/media/cdrom\)"; then + fs="$(PATH="/lib/udev:$PATH" vol_id --type "$1" || true)" + if [ -n "$fs" ] && [ "$fs" != "iso9660" ] && [ "$fs" != "udf" ]; then + + : + else + echo "$line" + fi + else + echo "$line" + fi +done < /target/etc/fstab > /target/etc/fstab.new +mv /target/etc/fstab.new /target/etc/fstab