You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
4.9 KiB
186 lines
4.9 KiB
#!/bin/bash |
|
|
|
INSTALL="@INSTALL@" |
|
HOTPLUGPATH=/etc/hotplug |
|
SCRIPTNAME=libmtp.sh |
|
USERMAP=libmtp.usermap |
|
UDEVPATH=/etc/udev/rules.d |
|
UDEVRULES=libmtp.rules |
|
HALBASEPATH=/usr/share/hal/fdi/information |
|
HALPATH=/usr/share/hal/fdi/information/20thirdparty |
|
HALRULES=libmtp.fdi |
|
|
|
# See if the parameter script ($2), device ($3) and productid ($4) |
|
# are already defined in the usermap ($1) |
|
function inmap { |
|
while read LINE; do |
|
if [ "x${LINE}" != "x" ]; then |
|
firstword=`echo ${LINE} | awk '{ print $1 }'` |
|
if [ ${firstword} != "#" ]; then |
|
# This is a device line entry |
|
script=${firstword} |
|
manid=`echo ${LINE} | awk '{ print $3 }'` |
|
productid=`echo ${LINE} | awk '{ print $4 }'` |
|
# Skip blank products... |
|
if [ "x${script}" = "x$2" ]; then |
|
if [ "x${manid}" = "x$3" ]; then |
|
if [ "x${productid}" = "x$4" ]; then |
|
echo "yes" |
|
return 0 |
|
fi |
|
fi |
|
fi |
|
fi |
|
fi |
|
done < $1 |
|
echo "no" |
|
return 0 |
|
} |
|
|
|
# Scan the usermap $2 for all devices in $1 to see if they are already |
|
# there, else patch the usermap. |
|
function patchusermap { |
|
# Nullify comment |
|
comment="" |
|
while read LINE; do |
|
if [ "x$LINE" != "x" ]; then |
|
firstword=`echo ${LINE} | awk '{ print $1 }'` |
|
if [ ${firstword} = "#" ]; then |
|
# This is a comment line, save it. |
|
comment=${LINE} |
|
else |
|
# This is a device line entry |
|
script=${firstword} |
|
manid=`echo ${LINE} | awk '{ print $3 }'` |
|
productid=`echo ${LINE} | awk '{ print $4 }'` |
|
# Skip blank products... |
|
if [ "x${manid}" != "x" ]; then |
|
# See if this product is already in the usermap |
|
echo "Checking for product ${productid} in $2..." |
|
if [ `inmap $2 ${script} ${manid} ${productid}` = "no" ]; then |
|
echo "Not present, adding to hotplug map." |
|
echo ${comment} >> $2 |
|
echo ${LINE} >> $2 |
|
comment="" |
|
else |
|
echo "Already installed." |
|
fi |
|
fi |
|
fi |
|
fi |
|
done < $1 |
|
} |
|
|
|
# Check for udev first |
|
if test -d ${UDEVPATH} ; then |
|
echo "You seem to have udev on your system. Installing udev rules..." |
|
${INSTALL} ${UDEVRULES} ${UDEVPATH} |
|
echo "You may need additional setup to get correct permissions on your device." |
|
echo "See the INSTALL file for information." |
|
echo "Do you also want to install HAL support or the old hotplug support (y/n)?" |
|
read IN |
|
if [ "$IN" = "y" ] || [ "$IN" = "Y" ]; then |
|
echo "Continuing..." |
|
else |
|
exit 0 |
|
fi |
|
fi |
|
|
|
# Check for HAL next |
|
if test -d ${HALBASEPATH} ; then |
|
echo "You seem to have HAL on your system. Installing HAL rules..." |
|
mkdir -p ${HALPATH} |
|
${INSTALL} ${HALRULES} ${HALPATH} |
|
echo "Do you also want to install the old hotplug support (y/n)?" |
|
read IN |
|
if [ "$IN" = "y" ] || [ "$IN" = "Y" ]; then |
|
echo "Continuing..." |
|
else |
|
exit 0 |
|
fi |
|
fi |
|
|
|
|
|
# Check prerequisites |
|
COMMAND=`which grep 2> /dev/null` |
|
if [ "x${COMMAND}" = "x" ]; |
|
then |
|
echo "Missing grep program. Fatal error." |
|
exit 1 |
|
fi |
|
COMMAND=`which awk 2> /dev/null` |
|
if [ "x${COMMAND}" = "x" ]; |
|
then |
|
echo "Missing awk program. Fatal error." |
|
exit 1 |
|
fi |
|
if [ "x${USER}" != "xroot" ]; |
|
then |
|
echo "WARNING: this program should be run as root!" |
|
fi |
|
|
|
|
|
# This script locates the hotplug distribution on a certain host |
|
# and sets up userland hotplugging scripts according to rules. |
|
# The in-parameters are the hotplug directory and the name of a |
|
# file of hotplug device entries and a script to be executed for |
|
# these deviced. |
|
|
|
if test -d ${HOTPLUGPATH} |
|
then |
|
echo "Hotplug in ${HOTPLUGPATH}" |
|
else |
|
echo "Hotplug missing on this system. Cannot install." |
|
exit 1 |
|
fi |
|
|
|
if test -d ${HOTPLUGPATH}/usb |
|
then |
|
echo "Has usb subdirectory." |
|
else |
|
mkdir ${HOTPLUGPATH}/usb |
|
fi |
|
|
|
echo "Installing script." |
|
${INSTALL} libmtp.sh ${HOTPLUGPATH}/usb |
|
echo "Installing usermap." |
|
${INSTALL} -m 644 ${USERMAP} ${HOTPLUGPATH}/usb |
|
# If we find a usb.usermap file, and we see that this distribution |
|
# of hotplug does not support private usermaps, then we need to |
|
# patch the usb.usermap file. |
|
# |
|
# Create a merged file, diff the files to each other, and if there |
|
# were mismatches, then patch the installed file. |
|
echo "Checking hotplugging CVS version..." |
|
echo "/etc/hotplug/usb/*.usermap support was added in august 2002" |
|
EDITMAP="yes" |
|
CVSTAG=`grep '\$Id:' /etc/hotplug/usb.agent` |
|
if [ "x${CVSTAG}" != "x" ]; then |
|
DATE=`echo ${CVSTAG} | awk '{ print $5 }'` |
|
echo "Hotplug version seems to be from ${DATE}" |
|
YEAR=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $1; }'` |
|
MONTH=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $2; }'` |
|
DAY=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $3; }'` |
|
if [ "${YEAR}" -gt "2002" ]; then |
|
EDITMAP="no" |
|
else |
|
if [ "${YEAR}" -eq "2002" ]; then |
|
if [ "${MONTH}" -ge "08" ]; then |
|
EDITMAP="no" |
|
fi |
|
fi |
|
fi |
|
fi |
|
if [ "x${EDITMAP}" == "xyes" ]; then |
|
echo "We need to edit the ${HOTPLUGPATH}/usb.usermap if it exists..." |
|
if test -f ${HOTPLUGPATH}/usb.usermap |
|
then |
|
echo "We have a usb.usermap..." |
|
patchusermap ${USERMAP} /etc/hotplug/usb.usermap |
|
fi |
|
fi |
|
|
|
echo "Hotplugging successfully installed." |
|
|
|
exit 0 |
|
|
|
|