mirror of
git://slackware.nl/current.git
synced 2025-01-10 05:25:51 +01:00
271 lines
9.4 KiB
Text
271 lines
9.4 KiB
Text
|
#!/bin/sh
|
||
|
# FIXME: UDF fs support?
|
||
|
RDIR=/dev/tty4
|
||
|
NDIR=/dev/null
|
||
|
TMP=/var/log/setup/tmp
|
||
|
if [ ! -d $TMP ]; then
|
||
|
mkdir -p $TMP
|
||
|
fi
|
||
|
T_PX="`cat $TMP/SeTT_PX`"
|
||
|
rm -f $TMP/SeTmount $TMP/SeTDS $TMP/SeTCDdev $TMP/reply
|
||
|
|
||
|
dialog --title "SCANNING FOR CD or DVD DRIVE" --menu \
|
||
|
"Make sure the Slackware disc is in your CD/DVD drive, \
|
||
|
and then press ENTER to begin the scanning process. \
|
||
|
Or, if you'd rather specify the device name manually \
|
||
|
(experts only), choose that option below." \
|
||
|
11 72 2 \
|
||
|
"auto" "Scan for the CD or DVD drive (recommended)" \
|
||
|
"manual" "Manually specify CD or DVD by device name" \
|
||
|
2> $TMP/reply
|
||
|
if [ ! -r $TMP/reply ]; then
|
||
|
# cancel or esc
|
||
|
rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTCDdev $TMP/errordo
|
||
|
exit
|
||
|
fi
|
||
|
|
||
|
if [ "`cat $TMP/reply`" = "manual" ]; then
|
||
|
dialog --title "MANUAL CD/DVD DEVICE SELECTION" --menu \
|
||
|
"Please select your CD/DVD device from the list below. \
|
||
|
If you don't see your device listed, choose 'custom'. \
|
||
|
This will let you type in any device name. (and if necessary, \
|
||
|
will create the device)" \
|
||
|
18 70 9 \
|
||
|
"custom" "Type in the CD or DVD device to use" \
|
||
|
"/dev/sr0" "First CD/DVD drive" \
|
||
|
"/dev/sr1" "Second CD/DVD drive" \
|
||
|
"/dev/sr2" "Third CD/DVD drive" \
|
||
|
"/dev/sr3" "Fourth CD/DVD drive" \
|
||
|
"/dev/hdb" "CD/DVD slave on first IDE bus" \
|
||
|
"/dev/hda" "CD/DVD master on first IDE bus (unlikely)" \
|
||
|
"/dev/hdc" "CD/DVD master on second IDE bus" \
|
||
|
"/dev/hdd" "CD/DVD slave on second IDE bus" \
|
||
|
"/dev/hde" "CD/DVD master on third IDE bus" \
|
||
|
"/dev/hdf" "CD/DVD slave on third IDE bus" \
|
||
|
"/dev/hdg" "CD/DVD master on fourth IDE bus" \
|
||
|
"/dev/hdh" "CD/DVD slave on fourth IDE bus" \
|
||
|
"/dev/pcd0" "First parallel port ATAPI CD" \
|
||
|
"/dev/pcd1" "Second parallel port ATAPI CD" \
|
||
|
"/dev/pcd2" "Third parallel port ATAPI CD" \
|
||
|
"/dev/pcd3" "Fourth parallel port ATAPI CD" \
|
||
|
"/dev/aztcd" "Non-IDE Aztech CD/DVD" \
|
||
|
"/dev/cdu535" "Sony CDU-535 CD/DVD" \
|
||
|
"/dev/gscd" "Non-IDE GoldStar CD/DVD" \
|
||
|
"/dev/sonycd" "Sony CDU-31a CD/DVD" \
|
||
|
"/dev/optcd" "Optics Storage CD/DVD" \
|
||
|
"/dev/sjcd" "Sanyo non-IDE CD/DVD" \
|
||
|
"/dev/mcdx0" "Non-IDE Mitsumi drive 1" \
|
||
|
"/dev/mcdx1" "Non-IDE Mitsumi drive 2" \
|
||
|
"/dev/sbpcd" "Old non-IDE SoundBlaster CD/DVD" \
|
||
|
"/dev/cm205cd" "Philips LMS CM-205 CD/DVD" \
|
||
|
"/dev/cm206cd" "Philips LMS CM-206 CD/DVD" \
|
||
|
"/dev/mcd" "Old non-IDE Mitsumi CD/DVD" \
|
||
|
2> $TMP/reply
|
||
|
if [ ! -r $TMP/reply ]; then
|
||
|
# cancel or esc
|
||
|
rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTCDdev $TMP/errordo
|
||
|
exit
|
||
|
fi
|
||
|
REPLY="`cat $TMP/reply`"
|
||
|
if [ "$REPLY" = "custom" ]; then
|
||
|
dialog --title "ENTER CD/DVD DEVICE MANUALLY" --inputbox \
|
||
|
"Please enter the name of the CD/DVD device (such as /dev/hdc) that \
|
||
|
you wish to use to mount the Slackware CD/DVD:" \
|
||
|
9 70 2> $TMP/reply
|
||
|
if [ ! -r $TMP/reply ]; then
|
||
|
# cancel or esc
|
||
|
rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTCDdev $TMP/errordo
|
||
|
exit
|
||
|
fi
|
||
|
DRIVE_FOUND="`cat $TMP/reply`"
|
||
|
if [ ! -r $DRIVE_FOUND ]; then # no such device
|
||
|
rm -f $TMP/majorminor
|
||
|
dialog --title "MKNOD CD/DVD DEVICE" --inputbox \
|
||
|
"There doesn't seem to be a device by the name of $DRIVE_FOUND in the \
|
||
|
/dev directory, so we will have to create it using the major and minor \
|
||
|
numbers for the device. If you're using a bootdisk with a custom CD/DVD \
|
||
|
driver on it, you should be able to find these numbers in the \
|
||
|
documentation. Also, see the 'devices.txt' file that comes with the \
|
||
|
Linux kernel source. If you don't know the numbers, you'll have to hit \
|
||
|
Esc to abort. Enter the major and minor numbers for the new device, \
|
||
|
separated by one space:" \
|
||
|
15 72 2> $TMP/majorminor
|
||
|
if [ ! -r $TMP/majorminor ]; then
|
||
|
# cancel or esc
|
||
|
rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTCDdev $TMP/errordo
|
||
|
exit
|
||
|
fi
|
||
|
MAJOR="`cat $TMP/majorminor`"
|
||
|
dialog --title "MAKING DEVICE IN /dev" --infobox \
|
||
|
"mknod $DRIVE_FOUND b $MAJOR" 3 40
|
||
|
mknod $DRIVE_FOUND b $MAJOR 2> $RDIR
|
||
|
sleep 1
|
||
|
if [ ! -r $DRIVE_FOUND ]; then
|
||
|
dialog --title "MKNOD FAILED" --msgbox \
|
||
|
"Sorry, but the mknod command failed to make the device. You'll need to \
|
||
|
go back and try selecting your source media again. Press ENTER to abort \
|
||
|
the source media selection process." 8 60
|
||
|
rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTCDdev $TMP/errordo
|
||
|
exit
|
||
|
fi
|
||
|
fi
|
||
|
else
|
||
|
DRIVE_FOUND=$REPLY
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
# Search for SCSI/PATA/SATA CD/DVD drives:
|
||
|
if [ "$DRIVE_FOUND" = "" ]; then
|
||
|
dialog --title "SCANNING" --infobox "Scanning for a \
|
||
|
CD/DVD drive containing a Slackware disc..." 4 50
|
||
|
sleep 1
|
||
|
for device in \
|
||
|
/dev/sr0 /dev/sr1 /dev/sr2 /dev/sr3 \
|
||
|
; do
|
||
|
mount -o ro -t iso9660 $device /var/log/mount 1> $RDIR 2> $RDIR
|
||
|
if [ $? = 0 ]; then
|
||
|
DRIVE_FOUND=$device
|
||
|
umount /var/log/mount
|
||
|
break
|
||
|
fi
|
||
|
done
|
||
|
fi
|
||
|
|
||
|
# Search the old IDE interfaces:
|
||
|
if [ "$DRIVE_FOUND" = "" ]; then
|
||
|
dialog --title "SCANNING" --infobox "Scanning for an IDE \
|
||
|
CD/DVD drive containing a Slackware disc..." 4 56
|
||
|
sleep 1
|
||
|
for device in \
|
||
|
/dev/hdd /dev/hdc /dev/hdb /dev/hda \
|
||
|
/dev/hde /dev/hdf /dev/hdg /dev/hdh \
|
||
|
/dev/hdi /dev/hdj /dev/hdk /dev/hdl \
|
||
|
/dev/hdm /dev/hdn /dev/hdo /dev/hdp \
|
||
|
; do
|
||
|
mount -o ro -t iso9660 $device /var/log/mount 1> $RDIR 2> $RDIR
|
||
|
if [ $? = 0 ]; then
|
||
|
DRIVE_FOUND=$device
|
||
|
umount /var/log/mount
|
||
|
break
|
||
|
fi
|
||
|
done
|
||
|
fi
|
||
|
|
||
|
# Search for parallel port ATAPI CD/DVD drives:
|
||
|
if [ "$DRIVE_FOUND" = "" ]; then
|
||
|
dialog --title "SCANNING" --infobox "Scanning for a parallel port \
|
||
|
ATAPI CD/DVD drive containing a Slackware disc..." 4 52
|
||
|
sleep 1
|
||
|
for device in \
|
||
|
/dev/pcd0 /dev/pcd1 /dev/pcd2 /dev/pcd3 \
|
||
|
; do
|
||
|
mount -o ro -t iso9660 $device /var/log/mount 1> $RDIR 2> $RDIR
|
||
|
if [ $? = 0 ]; then
|
||
|
DRIVE_FOUND=$device
|
||
|
umount /var/log/mount
|
||
|
break
|
||
|
fi
|
||
|
done
|
||
|
fi
|
||
|
|
||
|
# Still not found? OK, we will search for CD/DVD drives on old, pre-ATAPI
|
||
|
# proprietary interfaces. There aren't too many of these still around, and
|
||
|
# the scan won't actually work unless a bootdisk that supports the drive is
|
||
|
# used, and any necessary parameters have been passed to the kernel.
|
||
|
if [ "$DRIVE_FOUND" = "" ]; then
|
||
|
dialog --title "SCANNING" --msgbox "No IDE/SCSI drive, so we will try \
|
||
|
scanning for CD drives on \
|
||
|
old proprietary interfaces, such as SoundBlaster pre-IDE CD drives, \
|
||
|
Sony CDU-31a, Sony 535, old Mitsumi pre-IDE, old Optics, etc. For this \
|
||
|
scan to work at all, you'll need to be using a bootdisk that supports \
|
||
|
your CD drive. Please press ENTER to begin this last-chance scan \
|
||
|
for old, obsolete hardware." 11 60
|
||
|
for device in \
|
||
|
/dev/sonycd /dev/gscd /dev/optcd /dev/sjcd /dev/mcdx0 /dev/mcdx1 \
|
||
|
/dev/cdu535 /dev/sbpcd /dev/aztcd /dev/cm205cd /dev/cm206cd \
|
||
|
/dev/bpcd /dev/mcd \
|
||
|
; do
|
||
|
mount -o ro -t iso9660 $device /var/log/mount 1> $RDIR 2> $RDIR
|
||
|
if [ $? = 0 ]; then
|
||
|
DRIVE_FOUND=$device
|
||
|
umount /var/log/mount
|
||
|
break
|
||
|
fi
|
||
|
done
|
||
|
fi
|
||
|
|
||
|
if [ "$DRIVE_FOUND" = "" ]; then
|
||
|
dialog --title "CD/DVD DRIVE NOT FOUND" --msgbox \
|
||
|
"A CD/DVD drive could not be found on any of the devices that were \
|
||
|
scanned. Possible reasons include using a bootdisk or kernel that \
|
||
|
doesn't support your drive, failing to pass parameters needed by some \
|
||
|
drives to the kernel, not having the Slackware disc in your CD/DVD \
|
||
|
drive, or using a drive connected to a Plug and Play soundcard (in this \
|
||
|
case, connecting the drive directly to the IDE interface often helps). \
|
||
|
Please make sure you are using the correct bootdisk for your hardware, \
|
||
|
consult the BOOTING file for possible information on \
|
||
|
forcing the detection of your drive, and then reattempt installation. \
|
||
|
If all else fails, see FAQ.TXT for information about copying \
|
||
|
parts of this CD to your DOS partition and installing it from there.\n\
|
||
|
\n\
|
||
|
You will now be returned to the main menu. If you want to try looking \
|
||
|
for the CD again, you may skip directly to the SOURCE menu selection." \
|
||
|
0 0
|
||
|
rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTCDdev $TMP/errordo
|
||
|
exit
|
||
|
fi
|
||
|
|
||
|
while [ 0 ]; do # time to try to mount the CD/DVD device:
|
||
|
mount -o ro -t iso9660 $DRIVE_FOUND /var/log/mount 1> $RDIR 2> $RDIR
|
||
|
if [ $? = 0 ]; then # mounted successfully
|
||
|
dialog --title "CD/DVD DRIVE FOUND" --sleep 1 --infobox \
|
||
|
"A Slackware disc was found in device $DRIVE_FOUND." 3 52
|
||
|
break
|
||
|
else # failed to mount
|
||
|
dialog --title "MOUNT ERROR" --menu "There was an error \
|
||
|
attempting to mount the CD/DVD on $DRIVE_FOUND. \
|
||
|
Maybe the device name is incorrect, the disc is not in the \
|
||
|
drive, or the kernel you are using does not support the \
|
||
|
device. (possibly an incorrect bootdisk) \
|
||
|
What would you like to do now?" \
|
||
|
13 70 3 \
|
||
|
"1" "Abort CD installation" \
|
||
|
"2" "Attempt to mount the CD/DVD device again" \
|
||
|
"3" "Ignore the error and continue" 2> $TMP/errordo
|
||
|
if [ ! $? = 0 ]; then
|
||
|
rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTCDdev $TMP/errordo
|
||
|
exit;
|
||
|
fi
|
||
|
DOWHAT="`cat $TMP/errordo`"
|
||
|
rm -f $TMP/errordo
|
||
|
if [ $DOWHAT = 1 ]; then
|
||
|
rm -f $TMP/SeTDS $TMP/SeTmount $TMP/SeTCDdev
|
||
|
exit
|
||
|
elif [ $DOWHAT = 2 ]; then
|
||
|
dialog --title "ATTEMPTING TO MOUNT CD/DVD on $DRIVE_FOUND" \
|
||
|
--infobox "Attempting to mount your CD/DVD again with the \
|
||
|
following command: mount -o ro -t iso9660 $DRIVE_FOUND \
|
||
|
/var/log/mount" 4 69
|
||
|
umount /var/log/mount 1> $NDIR 2> $NDIR
|
||
|
sleep 1
|
||
|
elif [ $DOWHAT = 3 ]; then
|
||
|
# Ignore error, really bad plan but whatever
|
||
|
break
|
||
|
fi
|
||
|
fi
|
||
|
done
|
||
|
# since we should have mounted successfully, let's refresh
|
||
|
# the link for /dev/cdrom on the target partition:
|
||
|
if [ ! -d $T_PX/dev ]; then
|
||
|
mkdir $T_PX/dev
|
||
|
chown root.root $T_PX/dev
|
||
|
chmod 755 $T_PX/dev
|
||
|
fi
|
||
|
( cd $T_PX/dev ; ln -sf $DRIVE_FOUND cdrom )
|
||
|
|
||
|
# Pass information about the source directory to the next install stage:
|
||
|
echo "/var/log/mount/slackware" > $TMP/SeTDS
|
||
|
echo "-source_mounted" > $TMP/SeTmount
|
||
|
echo "$DRIVE_FOUND" > $TMP/SeTCDdev
|
||
|
echo "/dev/null" > $TMP/SeTsource
|