#!/bin/sh set -e . /usr/share/debconf/confmodule . /lib/chroot-setup.sh # This code is copied from chroot-setup.sh, and is needed until after a d-i # release whose initrds contain a sufficiently new version of di-utils. if ! type chroot_cleanup_localmounts >/dev/null 2>&1; then # Variant of chroot_cleanup that only cleans up chroot_setup's mounts. chroot_cleanup_localmounts () { rm -f /target/usr/sbin/policy-rc.d mv /target/sbin/start-stop-daemon.REAL /target/sbin/start-stop-daemon if [ -x /target/sbin/initctl.REAL ]; then mv /target/sbin/initctl.REAL /target/sbin/initctl fi # Undo the mounts done by the packages during installation. # Reverse sorting to umount the deepest mount points first. # Items with count of 1 are new. for dir in $( (cat /tmp/mount.pre /tmp/mount.pre /tmp/mount.post ) | \ sort -r | uniq -c | grep "^[[:space:]]*1[[:space:]]" | \ sed "s/^[[:space:]]*[0-9][[:space:]]//"); do if ! umount $dir; then logger -t $0 "warning: Unable to umount '$dir'" fi done rm -f /tmp/mount.pre /tmp/mount.post rm -f /var/run/chroot-setup.lock } fi file="$1" if [ ! -e /cdrom/.disk/base_installable ] && [ -z "$OVERRIDE_BASE_INSTALLABLE" ]; then exit 0 fi if [ ! -s /cdrom/.disk/info ]; then exit 0 fi cd_mountable=1 db_get cdrom-detect/hybrid || true if [ "$RET" = true ] || [ -d /hd-media ]; then cd_mountable="" else db_get cdrom-detect/usb-hdd || true if [ "$RET" = true ]; then cd_mountable="" fi fi if [ "$OVERRIDE_LEAVE_CD_MOUNTED" ]; then cd_mountable="" fi cd_type=$(cat /cdrom/.disk/cd_type) case $cd_type in */single) cd_mountable="" ;; esac remount_cd() { if [ "$ROOT" ] && [ "$cd_mountable" ]; then fs=iso9660 if db_get cdrom-detect/cdrom_fs && [ "$RET" ]; then fs="$RET" fi OS=$(udpkg --print-os) case "$OS" in hurd) OPTIONS=ro ;; *) OPTIONS=ro,exec ;; esac db_get cdrom-detect/cdrom_device $logoutput mount -t "$fs" -o $OPTIONS $RET /cdrom || true fi } bail_out() { remount_cd rm -f $ROOT$tmp $ROOT$tmp~ rm -f /var/lib/install-cd.id db_input critical apt-setup/cdrom/failed || true db_go || exit 10 exit 1 } # Save identification of installation CD save_label() { local ident if ! ident="$(LC_ALL=C $logoutput_pass $chroot $ROOT apt-cdrom ident < /dev/null)"; then bail_out fi echo "$ident" | grep "^Identifying" | head -n1 | cut -d" " -f2 \ >/var/lib/install-cd.id echo "$ident" | grep "^Stored label:" | head -n1 | sed "s/^[^:]*: //" \ >>/var/lib/install-cd.id } logoutput="" logoutput_pass="" if [ "$CATCHLOG" ]; then logoutput="log-output -t apt-setup" logoutput_pass="$logoutput --pass-stdout" fi chroot= if [ "$ROOT" ]; then chroot=chroot # Allow apt-cdrom to manage mounting/unmounting CDs in /target if [ "$cd_mountable" ]; then rm -f $ROOT/etc/apt/apt.conf.d/00NoMountCDROM $logoutput umount /target/media/cdrom* || true $logoutput umount /cdrom || true fi chroot_setup # Needed until after a d-i release with new enough di-utils. mountpoints > /tmp/mount.post trap chroot_cleanup_localmounts EXIT HUP INT QUIT TERM fi tmp=$($chroot $ROOT tempfile) # apt-cdrom can be interactive, avoid that if $logoutput $chroot $ROOT apt-cdrom add \ -o Dir::Etc::SourceList=$tmp \ > $file if [ "$ROOT" ] && [ "$cd_mountable" ]; then save_label fi else bail_out fi remount_cd rm -f $ROOT$tmp $ROOT$tmp~