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