From 9794a6fb7c9c478444d791875d7930995f33820e Mon Sep 17 00:00:00 2001 From: Gerhard Brauer Date: Sun, 26 Jul 2009 10:57:46 +0200 Subject: [PATCH] Use the archisolabel= command line option to mount the archiso device. If the archisolabel= option is specified on the kernel commandline, a device /dev/archiso will be created and will be used to boot the live system. Patch from brain0 Signed-off-by: Gerhard Brauer Signed-off-by: Aaron Griffin --- archiso/hooks/archiso | 69 +++++++++++-------------------------- archiso/hooks/archiso-early | 8 ++--- 2 files changed, 25 insertions(+), 52 deletions(-) diff --git a/archiso/hooks/archiso b/archiso/hooks/archiso index d779478..688a880 100644 --- a/archiso/hooks/archiso +++ b/archiso/hooks/archiso @@ -50,61 +50,34 @@ run_hook () ramdisk_size="75%" fi msg -n ":: Mounting tmpfs, size=${ramdisk_size}..." - mount -t tmpfs -o "size=${ramdisk_size}" tmpfs /tmpfs + mount -t tmpfs -o "size=${ramdisk_size}" tmpfs /tmpfs msg "done." - # external drives may need to settle - msg ":: Waiting for devices to settle..." - /sbin/udevadm trigger --subsystem-match=usb - /sbin/udevadm settle - usbdelay=$(( ${usbdelay:-0} + 1 )) - msg ":: Waiting ${usbdelay}s for USB devices" - /bin/sleep "${usbdelay}" - - msg ":: Scanning for boot device..." + msg ":: Waiting for boot device..." /bin/mkdir -p /bootmnt - found=0 - - /bin/modprobe -q isofs >/dev/null 2>&1 - msg ":: Scanning cd drives..." - for cdrom in /dev/hd[a-z] /dev/sr[0-9]* /dev/scd[a-z] /dev/sg[0-9]*; do - [ ! -e "${cdrom}" ] && continue - if mount -r -t iso9660 "${cdrom}" /bootmnt >/dev/null 2>&1; then - if [ -e "/bootmnt/isomounts" ]; then - found=1 - msg "${cdrom}" - break - fi - else - echo "Failed to mount ${cdrom}" - fi - [ ${found} -eq 0 ] && umount /bootmnt >/dev/null 2>&1 + while ! poll_device /dev/archiso 30; do + echo "ERROR: boot device didn't show up after 30 seconds..." + echo " Falling back to interactive prompt" + echo " You can try to fix the problem manually, log out when you are finished" + PS1="ramfs$ " /bin/sh -i done - if [ ${found} -eq 0 ]; then - msg ":: Scanning usb drives..." - for usb in /dev/sd[a-z][0-9]; do - [ ! -e "${usb}" ] && continue - if mount -r -t vfat "${usb}" /bootmnt >/dev/null 2>&1 ||\ - mount -r -t ext2 "${usb}" /bootmnt >/dev/null 2>&1; then - if [ -e "/bootmnt/isomounts" ]; then - found=1 - msg "${usb}" - break - fi - else - echo "Failed to mount ${usb}" - fi - [ ${found} -eq 0 ] && umount /bootmnt >/dev/null 2>&1 - done - fi - - if [ ${found} -eq 0 ]; then - echo "ERROR: cannot find boot device, cannot continue..." - echo " Falling back to interactive prompt" - PS1="ramfs$ " /bin/sh -i + eval $(fstype < /dev/archiso 2>/dev/null) + if [ -n "${FSTYPE}" -a "${FSTYPE}" != "unknown" ]; then + if mount -r -t "${FSTYPE}" /dev/archiso /bootmnt >/dev/null 2>&1; then + if [ -e "/bootmnt/isomounts" ]; then + echo "SUCCESS: Mounted archiso volume successfully." + else + echo "ERROR: Mounting was successful, but the isomounts file does not exist." + exit 1 + fi + else + echo "ERROR: Failed to mount /dev/archiso" exit 1 + fi + else + echo "ERROR: /dev/archiso found, but the filesystem type is unknown." fi /bin/modprobe -q squashfs >/dev/null 2>&1 diff --git a/archiso/hooks/archiso-early b/archiso/hooks/archiso-early index 884c4be..d57b73b 100644 --- a/archiso/hooks/archiso-early +++ b/archiso/hooks/archiso-early @@ -1,8 +1,8 @@ # vim: set ft=sh: run_hook () { - # Set our usbdelay time. Default: 0 - cd / - /bin/mkdir -p etc/modprobe.d/ - echo "options usb-storage delay_use=${usbdelay:-0}" > /etc/modprobe.d/usb-delay + if [ -n "${archisolabel}" ]; then + echo "ACTION==\"add|change\", SUBSYSTEM==\"block\", IMPORT{program}=\"vol_id --export \$tempnode\"" > /lib/udev/rules.d/00-archiso-device.rules + echo "ENV{ID_FS_LABEL_ENC}==\"${archisolabel}\", SYMLINK+=\"archiso\"" >> /lib/udev/rules.d/00-archiso-device.rules + fi }