-#!/bin/sh
-
-#set -e
-
-# initramfs-tools header
-
-PREREQ=""
-
-prereqs()
-{
- echo "${PREREQ}"
-}
-
-case "${1}" in
- prereqs)
- prereqs
- exit 0
- ;;
-esac
-
-# live-initramfs header
-
-if [ -n "${NOUSER}" ]
-then
- exit 0
-fi
-
-. /scripts/live-functions
-. /scripts/live-helpers
-
-log_begin_msg "Adding live session user..."
-
-# live-initramfs script
-
-mountpoint=/cdrom
-
-is_updates_path ()
-{
- # Driver packages are stored in ubuntu-drivers/<kver>/
- # subdirectory. Each package contains a module for a specific
- # kernel flavour.
-
- path=${1}
- abi="$(uname -r)"
- kver="$(echo "$abi" | cut -d- -f1,2)"
- kbase="$(echo "$abi" | cut -d- -f1)"
-
- for leaf in "$abi" "$kver" "$kbase"
- do
- update_dir="$path/ubuntu-drivers/$leaf"
-
- [ -d "$update_dir" ] || continue
-
- if [ "$(echo ${update_dir}/*_${DPKG_ARCH}.deb)" != \
- "${update_dir}/*_${DPKG_ARCH}.deb" ]
- then
- echo "${update_dir}"
- return 0
- fi
- done
-
- return 1
-}
-
-is_nice_device ()
-{
- sysfs_path="${1#/sys}"
-
- if /lib/udev/path_id "${sysfs_path}" | grep -E -q "ID_PATH=(usb|pci-[^-]*-(ide|scsi|usb))"
- then
- return 0
- fi
-
- return 1
-}
-
-is_supported_fs ()
-{
- # FIXME: do something better like the scan of supported filesystems
- fstype="${1}"
-
- case ${fstype} in
- vfat|iso9660|udf|ext2|ext3|ntfs)
- return 0
- ;;
- esac
-
- return 1
-}
-
-check_dev_updates ()
-{
- sysdev="${1}"
- devname="${2}"
-
- if [ -z "${devname}" ]
- then
- devname=$(sys2dev "${sysdev}")
- fi
-
- fstype=$(get_fstype "${devname}")
-
- if is_supported_fs ${fstype}
- then
- mount -t ${fstype} -o ro "${devname}" $mountpoint || continue
-
- if is_updates_path ${mountpoint}
- then
- return 0
- else
- umount ${mountpoint}
- fi
- fi
-
- return 1
-}
-
-find_driver_updates ()
-{
- for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram)
- do
- devname=$(sys2dev "${sysblock}")
- fstype=$(get_fstype "${devname}")
-
- if /lib/udev/cdrom_id ${devname} > /dev/null
- then
- if check_dev_updates "null" "${devname}"
- then
- return 0
- fi
- elif is_nice_device "${sysblock}"
- then
- for dev in $(subdevices "${sysblock}")
- do
- if check_dev_updates "${dev}"
- then
- return 0
- fi
- done
- fi
- done
-
- return 1
-}
-
-pulsate ()
-{
- if [ -x /sbin/usplash_write ]
- then
- /sbin/usplash_write "PULSATE"
- fi
-}
-
-updates="false"
-
-for x in $(cat /proc/cmdline)
-do
- case ${x} in
- debian-installer/driver-update=*)
- updates=${x#debian-installer/driver-update=}
- ;;
- esac
-done
-
-if [ "${updates}" != "true" ]
-then
- log_end_msg
- exit 0
-fi
-
-# Not sure what to do for network installs. I assume there isn't even a CD
-# for this anyway, so fail.
-if [ -n "${NETBOOT}" ]
-then
- log_end_msg
- exit 0;
-fi
-
-#if chroot /root [ -f /etc/gdm/gdm-cdd.conf ]
-#then
-# GDMCONF=/etc/gdm/gdm-cdd.conf
-#else
-# GDMCONF=/etc/gdm/gdm.conf
-#fi
-
-if [ -x /usr/bin/eject ]
-then
- eject
-fi
-
-log_wait_msg "Insert a driver CD and press ENTER (${DPKG_ARCH})"
-
-log_begin_msg "Looking for driver update CD"
-
-for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13
-do
- updates_root=$(find_driver_updates)
-
- if [ "${updates_root}" ]
- then
- break;
- fi
-
- sleep 1
-done
-
-log_end_msg
-
-if [ -z "${updates_root}" ]
-then
- log_begin_msg "Could not find driver updates"
- log_wait_msg "Re-insert install CD and press ENTER"
- exit 0
-fi
-
-log_begin_msg "Copying driver updates to temporary location"
-
-mkdir -p /tmp/driver-updates
-cp ${updates_root}/*_${DPKG_ARCH}.deb /tmp/driver-updates/
-umount ${mountpoint}
-
-if [ -x /usr/bin/eject ]
-then
- eject
-fi
-
-log_end_msg
-
-log_wait_msg "Re-insert install CD and press ENTER."