From mboxrd@z Thu Jan 1 00:00:00 1970 From: md@Linux.IT (Marco d'Itri) Date: Wed, 29 Mar 2006 11:50:13 +0000 Subject: persistent CD aliases Message-Id: <20060329115013.GA9763@wonderland.linux.it> MIME-Version: 1 Content-Type: multipart/mixed; boundary="GRPZ8SYKNexpdSJ7" List-Id: To: linux-hotplug@vger.kernel.org --GRPZ8SYKNexpdSJ7 Content-Type: multipart/mixed; boundary="Qxx1br4bt0+wmkIi" Content-Disposition: inline --Qxx1br4bt0+wmkIi Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable I am attaching the rules and the script which I am using in the Debian=20 package to generate on demand aliases for CD readers. --=20 ciao, Marco --Qxx1br4bt0+wmkIi Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="cd-aliases-generator.rules" # These rules generate rules for the /dev/{cdrom,dvd,...} symlinks and # write them in /etc/udev/rules.d/z20_persistent-cd.rules. # # If you want to configure them manually then just delete the symlink # pointing to this file. # # The default symlink for this file is z75_cd-aliases-generator.rules. ACTION!="add", GOTO="cd_aliases_generator_end" SUBSYSTEM!="block", GOTO="cd_aliases_generator_end" ENV{GENERATED}=="?*", GOTO="cd_aliases_generator_end" # The variables for IDE devices are imported in permissions.rules. KERNEL=="sr[0-9]*", IMPORT{program}="cdrom_id --export $tempnode" ENV{ID_CDROM}=="?*", PROGRAM="write_cd_aliases", SYMLINK+="%c" LABEL="cd_aliases_generator_end" --Qxx1br4bt0+wmkIi Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=write_cd_aliases #!/bin/sh -e RULES_FILE="/etc/udev/rules.d/z25_persistent-cd.rules" ############################################################################## lock_rules_file() { RULES_LOCK="/dev/.udev/.lock-${RULES_FILE##*/}" retry=30 while ! mkdir $RULES_LOCK 2> /dev/null; do if [ $retry -eq 0 ]; then echo "Cannot lock $RULES_FILE!" >&2 exit 2 fi sleep 1 retry=$(($retry - 1)) done } unlock_rules_file() { rmdir $RULES_LOCK || true } # returns true if a directory is writeable writeable() { if ln -s check $1/.is-writeable 2> /dev/null; then rm -f $1/.is-writeable return 0 else return 1 fi } choose_rules_file() { [ -e "$RULES_FILE" ] || PRINT_HEADER=1 if writeable ${RULES_FILE%/*}; then RO_RULES_FILE='/dev/null' else RO_RULES_FILE=$RULES_FILE RULES_FILE="/dev/.udev/tmp-rules--${RULES_FILE##*/}" fi } ############################################################################## find_next_available() { local links="$(find_all_symlinks $1)" local basename=${links%%[0-9]*} local max=-1 for name in $links; do local num=${name#$basename} [ "$num" ] || num=0 [ $num -gt $max ] && max=$num done max=$(($max + 1)) # "name0" actually is just "name" [ $max -eq 0 ] && return echo "$max" } find_all_symlinks() { local linkre="$1" local match="$2" [ -e $RULES_FILE ] || return local search='.*[[:space:],]SYMLINK+="\('"$linkre"'\)"[[:space:]]*\(,.*\|\\\|\)$' sed -n -e "${match}s/${search}/\1/p" $RO_RULES_FILE $RULES_FILE } write_rule() { local match="$1" local link="$2" local comment="$3" { if [ "$PRINT_HEADER" ]; then PRINT_HEADER= echo "# This file was automatically generated by the $0" echo "# program, probably run by the cd-aliases-generator.rules rules file." echo "#" echo "# You can modify it, as long as you keep each rule on a single line" echo "# and set the \$GENERATED variable." echo "" fi [ "$comment" ] && echo "# $comment" echo "ACTION==\"add\", $match, SYMLINK+=\"$link\", ENV{GENERATED}=\"1\"" } >> $RULES_FILE SYMLINKS="$SYMLINKS $link" } ############################################################################## if [ -z "$DEVPATH" ]; then echo "Missing \$DEVPATH." >&2 exit 1 fi if [ -z "$ID_CDROM" ]; then echo "$DEVPATH is not a CD reader." >&2 exit 1 fi # Prevent parallel processes from modifying the file at the same time. lock_rules_file # Check if the rules file is writeable. choose_rules_file link_num=$(find_next_available 'cdrom[0-9]*') #match="ENV{ID_PATH}==\"$ID_PATH\"" #kernel=${DEVPATH##*/} #match="KERNEL==\"$kernel\"" id=${PHYSDEVPATH##*/} match="BUS==\"$PHYSDEVBUS\", ID==\"$id\"" comment="$ID_MODEL ($ID_PATH)" write_rule "$match" "cdrom$link_num" "$comment" [ "$ID_CDROM_CD_RW" ] && write_rule "$match" "cdrw$link_num" [ "$ID_CDROM_DVD" ] && write_rule "$match" "dvd$link_num" [ "$ID_CDROM_DVD_RW" ] && write_rule "$match" "dvdrw$link_num" unlock_rules_file echo $SYMLINKS exit 0 --Qxx1br4bt0+wmkIi-- --GRPZ8SYKNexpdSJ7 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2.2 (GNU/Linux) iD8DBQFEKnR1FGfw2OHuP7ERAmhAAJ4gk6VkOqjKgSVah/1WPa9PoeO6wgCdGX0Z /m14BqpmXAkSP3B8NjosK0k= =fkMc -----END PGP SIGNATURE----- --GRPZ8SYKNexpdSJ7-- ------------------------------------------------------- This SF.Net email is sponsored by xPML, a groundbreaking scripting language that extends applications into web and mobile media. Attend the live webcast and join the prime developer group breaking into this new coding territory! http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642 _______________________________________________ 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