linux-hotplug.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Eddie Shi" <eddieshi@broadcom.com>
To: linux-hotplug@vger.kernel.org
Subject: RE: My first usb storage automount script :)
Date: Fri, 03 Jan 2003 23:27:04 +0000	[thread overview]
Message-ID: <marc-linux-hotplug-104163663411597@msgid-missing> (raw)
In-Reply-To: <marc-linux-hotplug-103962396823038@msgid-missing>

Hi,
  Does anyone know whether this will work on the following situation:

  1. The usb-storage device (ie USB card reader) is alreay plugged in the
system.

  2. No CF/MS/SM/SD are plugged in yet.

  Given the above assumption , Will the system automount the CF when the CF
card is plugged in ? Or We still need to manually enter " mount -t vfat
/dev/sda1 /cf ".

  I guess what I would like to see is to have something like CD's automount
when a CD is inserted.


  Thanks


Eddie
----------------------------------------------------------------------------
------------------
Hi there,

I just wanted to share what I hacked up through some frustration. It's a
script that will automatically mount usb devices that are attached.

It ties in to the hotplug architecture as closely as possible, without
changing anything. So then I subscribed to this list to announce it.

Of course, that's when I discovered
http://users.actrix.co.nz/michael/usbmount.html by Michael Hamilton.

So I'll first give a rundown of differences:
My solution:
- only mounts the device that was just inserted (with some luck)
- is called automount_usb, so that, by changing the usb.usermap, it gets
  called every time a device is inserted and not just the first time
- creates remover scripts that have /bin/sh as the only dependency
- creates nicely readable names as mount points
- supports devices with multiple partitions
- is really small

But Michael's solution:
- makes KDE icons
- is easier to read

So, please have a look at the attached code, and tell me what you think
about the device detection code. Michael, if you read this, we could
perhaps merge the two efforts and get all the features.

Also, let's start a thread on making a gui.agent script that gets called
by the hotplug scripts. It would notify the user of hotplug events.
I feel that it should be called with the same environment as the other
agents, with an extra HOTPLUG_PATH variable indicating the path on which
the device is available, if applicable.

This could then be used by KDE, Gnome etc to notify the user.

Cheers,

Wout.

PS: /Please/ change usb.agent so that it creates /var/run/usb/ before
pointing remover scripts there...
["automount_usb" (TEXT/PLAIN)]

#!/bin/sh
# Automount hotplugged usb storage devices. Copyright (c) 2002, Wout Mertens
# This script is released under the GPL.

# The usb devices will be mounted for the console user.
# To work, this needs:
# - kernel support:
#   - hotplugging, /proc, usbdevfs and devfs
#   - as modules: usb-storage, sd_mod, scsi_mod
#   - filesystems that will be mounted, like vfat
# - ls, tr, echo, awk, basename, stat, grep, mount, umount, mkdir, rm, sed

# TODO Fix usb.agent so that /var/run/usb gets created if missing
# TODO Some rigid way of getting this run. Currently, I do
#  grep usb-storage /lib/modules/*/modules.usbmap|sed
's/usb-storage/automount_usb/' \
>> /etc/hotplug/usb.usermap # TODO Lots of testing
# TODO nice way of setting options
# TODO Also, the error checking should probably be more robust
# TODO Some clean way of handling disconnects while writing.
# TODO Make a generic event system for GUIs that shows that something was
#   mounted for the user. Proposal: /etc/hotplug/gui.agent gets
#   called with ACTION­d/remove, NAME=nice_name, PATH=new_path, etc.
#   Not just for new storage, scanners and so on are useful too...

# Dump debug
mesg () {
	#return
	/usr/bin/logger -t $0 "$*"
}

# Figure out the device to mount
NUM=`basename $DEVICE|sed 's/^0*//'`
SERIAL=`awk -F= '/^T:.*/{if($0~/Dev#= *'$NUM' \
/){t=1}else{t=0}}t=1&&/SerialNumber/{print $2;exit}' /proc/bus/usb/devices`
\
PRODUCT=`awk -F= '/^T:.*/{if($0~/Dev#= *'$NUM'
/){t=1}else{t=0}}t=1&&/Product/{print \
$2;exit}' /proc/bus/usb/devices` # Use the serial or the product name to
find which \
scsi host was just created if [ -n "$SERIAL" ]; then
	SCSI=`grep -l $SERIAL /proc/scsi/usb-storage-*/*|tail -1`
elif [ -n "$PRODUCT" ]; then
	SCSI=`grep -l $PRODUCT /proc/scsi/usb-storage-*/*|tail -1`
fi

mesg Device No. $NUM, serial $SERIAL, name $PRODUCT, path $SCSI

# Mount it
if [ -n "$SCSI" ]; then
	# The name of the file is the number of the SCSI host
	SCSI=`basename $SCSI`
	PARTS=`ls /dev/scsi/host$SCSI/*/*/*/part*`
	MOUNTPATH=/mnt/usb/`echo $PRODUCT|tr '[ /?*"]' _`
	if [ -e "$MOUNTPATH" ]; then
		if mount|grep "$MOUNTPATH">/dev/null; then
			# TODO I'm too lazy to write proper collision avoidance code
			MOUNTPATH="$MOUNTPATH".$$
		fi
	fi
	# I'm hoping that mount ignores options that don't apply to the fs
	# These options should prevent abuse and make it writeable for the
	# console user.
	MOUNTOPTS='-osync,nosuid'`stat -c',uid=%u,gid=%g' /dev/console`
	mesg Mounting $PARTS on $MOUNTPATH, options $MOUNTOPTS

	[ `echo $PARTS|wc -w` -eq 1 ] && MOUNTDIRECT=1
	REMOVE	for i in $PARTS; do
		if [ -n "$MOUNTDIRECT" ]; then
			T=$MOUNTPATH
		else
			T=$MOUNTPATH/`basename $i`
		fi
		mkdir -p $T
		if mount $MOUNTOPTS $i $T; then
			REMOVE="umount $T;$REMOVE;rmdir $T"
		else
			rmdir $T
		fi
	done

	# Create remover
	echo "#!/bin/sh" > $REMOVER
	echo $REMOVE | sed 's/;;/;/g' >> $REMOVER
	chmod +x $REMOVER
else
	exit 1
fi









-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

  reply	other threads:[~2003-01-03 23:27 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-12-11 16:22 My first usb storage automount script :) Wout Mertens
2003-01-03 23:27 ` Eddie Shi [this message]
2003-01-07 12:37 ` Wout Mertens
2003-01-07 14:56 ` Tom Clark
2003-01-07 19:13 ` Eddie Shi
2003-01-07 20:37 ` Wout Mertens
2003-01-07 22:07 ` Tom Clark

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=marc-linux-hotplug-104163663411597@msgid-missing \
    --to=eddieshi@broadcom.com \
    --cc=linux-hotplug@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).