mirror of
https://git.linuxfromscratch.org/lfs.git
synced 2025-01-19 13:37:39 +00:00
14377f4ac0
Fix a url in pkgmgfor LFS. Tweak a debian udev script for LFS. git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@9998 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689
121 lines
2.8 KiB
Bash
121 lines
2.8 KiB
Bash
#!/bin/sh -e
|
|
|
|
# Updated for LFS by B. Dubbs, 2012-09-23
|
|
# Fix RULES_LOCK location
|
|
|
|
|
|
RULES_FILE="/etc/udev/rules.d/82-persistent-cd.rules"
|
|
|
|
##############################################################################
|
|
lock_rules_file() {
|
|
RULES_LOCK="/run/udev/lock-${RULES_FILE##*/}"
|
|
|
|
if [ ! -d /run/udev/ ]; then
|
|
echo "write_cd_aliases: /run/udev does not exist!" >&2
|
|
exit 2
|
|
fi
|
|
|
|
retry=10
|
|
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
|
|
}
|
|
|
|
##############################################################################
|
|
find_next_available() {
|
|
# use echo to convert newlines to spaces
|
|
local links=`echo $(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" $RULES_FILE
|
|
}
|
|
|
|
write_rule() {
|
|
local match="$1"
|
|
local link="$2"
|
|
local comment="$3"
|
|
|
|
[ -e "$RULES_FILE" ] || PRINT_HEADER=1
|
|
{
|
|
if [ "$PRINT_HEADER" ]; then
|
|
PRINT_HEADER=
|
|
echo "# This file was automatically generated by the $0"
|
|
echo "# program, probably run by the 83-cdrom.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\", SUBSYSTEM==\"block\", $match, ENV{ID_CDROM}==\"1\", 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
|
|
|
|
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
|
|
|