X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=extras%2Frule_generator%2Fwrite_cd_rules;h=398cd2737b2c6aac12fcbd74d83e5a050fd0350d;hp=232daeb86b11ad2ae1de8beb256775e21fbe3434;hb=b822542608326092e177fd1707ca7fb53b2846c4;hpb=fbcbf70bb21a618024ce8c1ea0b4f6718c2a8dd2 diff --git a/extras/rule_generator/write_cd_rules b/extras/rule_generator/write_cd_rules index 232daeb86..398cd2737 100644 --- a/extras/rule_generator/write_cd_rules +++ b/extras/rule_generator/write_cd_rules @@ -11,12 +11,19 @@ # under the terms of the GNU General Public License as published by the # Free Software Foundation version 2 of the License. +# debug, if UDEV_LOG= +if [ -n "$UDEV_LOG" ]; then + if [ "$UDEV_LOG" -ge 7 ]; then + set -x + fi +fi + RULES_FILE="/etc/udev/rules.d/70-persistent-cd.rules" . /lib/udev/rule_generator.functions find_next_available() { - raw_find_next_available "$(find_all_rules 'SYMLINK+=' $1)" + raw_find_next_available "$(find_all_rules 'SYMLINK\+=' "$1")" } write_rule() { @@ -28,10 +35,10 @@ write_rule() { 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 "# program, 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 "# You can modify it, as long as you keep each rule on a single" + echo "# line, and set the \$GENERATED variable." echo "" fi @@ -50,6 +57,38 @@ if [ -z "$ID_CDROM" ]; then exit 1 fi +if [ "$1" ]; then + METHOD="$1" +else + METHOD='by-path' +fi + +case "$METHOD" in + by-path) + if [ -z "$ID_PATH" ]; then + echo "$DEVPATH not supported by path_id. by-id may work." >&2 + exit 1 + fi + RULE="ENV{ID_PATH}==\"$ID_PATH\"" + ;; + + by-id) + if [ "$ID_SERIAL" ]; then + RULE="ENV{ID_SERIAL}==\"$ID_SERIAL\"" + elif [ "$ID_MODEL" -a "$ID_REVISION" ]; then + RULE="ENV{ID_MODEL}==\"$ID_MODEL\", ENV{ID_REVISION}==\"$ID_REVISION\"" + else + echo "$DEVPATH not supported by ata_id. by-path may work." >&2 + exit 1 + fi + ;; + + *) + echo "Invalid argument (must be either by-path or by-id)." >&2 + exit 1 + ;; +esac + # Prevent concurrent processes from modifying the file at the same time. lock_rules_file @@ -58,7 +97,7 @@ choose_rules_file link_num=$(find_next_available 'cdrom[0-9]*') -match="ENV{ID_CDROM}==\"?*\", ENV{ID_PATH}==\"$ID_PATH\"" +match="ENV{ID_CDROM}==\"?*\", $RULE" comment="$ID_MODEL ($ID_PATH)"