#!/bin/bash # Library to find CD devices. # # Copyright (C) 2003-2006 IBM # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # Create a list of potential devices. Note that this may pick up some non-block # devices; it is assumed that they will be filtered out by find_discs_with_media. function find_disc_devices() { NUM_DEVICES=`/bin/ls $(egrep '(cdr|dvd)' /etc/fstab | awk -F " " '{print $1}') /dev/cdr* /dev/dvd* /dev/cdrom/* /dev/sr* 2> /dev/null | sort | uniq | wc -l` if [ $NUM_DEVICES -lt 1 ]; then # No CDs at all? echo NONE fi /bin/ls $(egrep '(cdr|dvd)' /etc/fstab | awk -F " " '{print $1}') /dev/cdr* /dev/dvd* /dev/cdrom/* /dev/sr* 2> /dev/null | sort | uniq } # Try to find a disc with media in it. Hopefully, $DEFAULT_MOUNT already exists. function find_discs_with_media() { # If the caller doesn't specify a DEFAULT_MOUNT point, specify one. if [ -z "$DEFAULT_MOUNT" ]; then DEFAULT_MOUNT=/mnt fi POTENTIAL_DEVICES=`find_disc_devices` # Grab a list of all CD/DVD devices that we can find. for i in `echo "$POTENTIAL_DEVICES"` do # Did we get nothing at all? if [ "$i" == "NONE" ]; then echo NONE 0 return fi # Is this a link pointing to a device that's in the # list of potential discs AND isn't in fstab? # We want to avoid considering /dev entries that are symlinked # elsewhere ... but we also assume that anything in fstab was # put there for a reason and ought to be considered anyway. if [ -L "$i" ]; then IN_LIST=`echo "$POTENTIAL_DEVICES" | grep "$(readlink $i)" -c` if [ $IN_LIST -gt 0 ]; then IN_FSTAB=`grep "^$i[ ]" /etc/fstab -c` if [ $IN_FSTAB -eq 0 ]; then continue; fi fi fi # Block device? if [ -b "$i" ]; then IN_FSTAB=`grep -c "^$i[ ]" /etc/fstab` FSTAB_TYPE=`grep "^$i[ ]" /etc/fstab | awk -F " " '{print $3}'` if [ $IN_FSTAB -gt 0 -a "$FSTAB_TYPE" != "subfs" ]; then # This device is listed in fstab and is NOT of # type "subfs" (SLES9 weirdness); try to mount it. mount "$i" > /dev/null 2> /dev/null RESULT=$? if [ $RESULT -eq 0 ]; then # Mounted ok! umount "$i" echo "$i" 1 continue fi fi # Not in fstab, or the mount failed. mount "$i" "$DEFAULT_MOUNT" -t auto > /dev/null 2> /dev/null RESULT=$? if [ $RESULT -eq 0 ]; then # Mounted ok once we gave it options. umount "$i" echo "$i" 0 continue fi fi done }