186 lines
4.9 KiB
Bash
Executable file
186 lines
4.9 KiB
Bash
Executable file
#!/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
|
|
|