1#!/bin/bash 2 3INSTALL="@INSTALL@" 4HOTPLUGPATH=/etc/hotplug 5SCRIPTNAME=libmtp.sh 6USERMAP=libmtp.usermap 7UDEVPATH=/etc/udev/rules.d 8UDEVRULES=libmtp.rules 9HALBASEPATH=/usr/share/hal/fdi/information 10HALPATH=/usr/share/hal/fdi/information/20thirdparty 11HALRULES=libmtp.fdi 12 13# See if the parameter script ($2), device ($3) and productid ($4) 14# are already defined in the usermap ($1) 15function inmap { 16 while read LINE; do 17 if [ "x${LINE}" != "x" ]; then 18 firstword=`echo ${LINE} | awk '{ print $1 }'` 19 if [ ${firstword} != "#" ]; then 20 # This is a device line entry 21 script=${firstword} 22 manid=`echo ${LINE} | awk '{ print $3 }'` 23 productid=`echo ${LINE} | awk '{ print $4 }'` 24 # Skip blank products... 25 if [ "x${script}" = "x$2" ]; then 26 if [ "x${manid}" = "x$3" ]; then 27 if [ "x${productid}" = "x$4" ]; then 28 echo "yes" 29 return 0 30 fi 31 fi 32 fi 33 fi 34 fi 35 done < $1 36 echo "no" 37 return 0 38} 39 40# Scan the usermap $2 for all devices in $1 to see if they are already 41# there, else patch the usermap. 42function patchusermap { 43 # Nullify comment 44 comment="" 45 while read LINE; do 46 if [ "x$LINE" != "x" ]; then 47 firstword=`echo ${LINE} | awk '{ print $1 }'` 48 if [ ${firstword} = "#" ]; then 49 # This is a comment line, save it. 50 comment=${LINE} 51 else 52 # This is a device line entry 53 script=${firstword} 54 manid=`echo ${LINE} | awk '{ print $3 }'` 55 productid=`echo ${LINE} | awk '{ print $4 }'` 56 # Skip blank products... 57 if [ "x${manid}" != "x" ]; then 58 # See if this product is already in the usermap 59 echo "Checking for product ${productid} in $2..." 60 if [ `inmap $2 ${script} ${manid} ${productid}` = "no" ]; then 61 echo "Not present, adding to hotplug map." 62 echo ${comment} >> $2 63 echo ${LINE} >> $2 64 comment="" 65 else 66 echo "Already installed." 67 fi 68 fi 69 fi 70 fi 71 done < $1 72} 73 74# Check for udev first 75if test -d ${UDEVPATH} ; then 76 echo "You seem to have udev on your system. Installing udev rules..." 77 ${INSTALL} ${UDEVRULES} ${UDEVPATH} 78 echo "You may need additional setup to get correct permissions on your device." 79 echo "See the INSTALL file for information." 80 echo "Do you also want to install HAL support or the old hotplug support (y/n)?" 81 read IN 82 if [ "$IN" = "y" ] || [ "$IN" = "Y" ]; then 83 echo "Continuing..." 84 else 85 exit 0 86 fi 87fi 88 89# Check for HAL next 90if test -d ${HALBASEPATH} ; then 91 echo "You seem to have HAL on your system. Installing HAL rules..." 92 mkdir -p ${HALPATH} 93 ${INSTALL} ${HALRULES} ${HALPATH} 94 echo "Do you also want to install the old hotplug support (y/n)?" 95 read IN 96 if [ "$IN" = "y" ] || [ "$IN" = "Y" ]; then 97 echo "Continuing..." 98 else 99 exit 0 100 fi 101fi 102 103 104# Check prerequisites 105COMMAND=`which grep 2> /dev/null` 106if [ "x${COMMAND}" = "x" ]; 107then 108 echo "Missing grep program. Fatal error." 109 exit 1 110fi 111COMMAND=`which awk 2> /dev/null` 112if [ "x${COMMAND}" = "x" ]; 113then 114 echo "Missing awk program. Fatal error." 115 exit 1 116fi 117if [ "x${USER}" != "xroot" ]; 118then 119 echo "WARNING: this program should be run as root!" 120fi 121 122 123# This script locates the hotplug distribution on a certain host 124# and sets up userland hotplugging scripts according to rules. 125# The in-parameters are the hotplug directory and the name of a 126# file of hotplug device entries and a script to be executed for 127# these deviced. 128 129if test -d ${HOTPLUGPATH} 130then 131 echo "Hotplug in ${HOTPLUGPATH}" 132else 133 echo "Hotplug missing on this system. Cannot install." 134 exit 1 135fi 136 137if test -d ${HOTPLUGPATH}/usb 138then 139 echo "Has usb subdirectory." 140else 141 mkdir ${HOTPLUGPATH}/usb 142fi 143 144echo "Installing script." 145${INSTALL} libmtp.sh ${HOTPLUGPATH}/usb 146echo "Installing usermap." 147${INSTALL} -m 644 ${USERMAP} ${HOTPLUGPATH}/usb 148# If we find a usb.usermap file, and we see that this distribution 149# of hotplug does not support private usermaps, then we need to 150# patch the usb.usermap file. 151# 152# Create a merged file, diff the files to each other, and if there 153# were mismatches, then patch the installed file. 154echo "Checking hotplugging CVS version..." 155echo "/etc/hotplug/usb/*.usermap support was added in august 2002" 156EDITMAP="yes" 157CVSTAG=`grep '\$Id:' /etc/hotplug/usb.agent` 158if [ "x${CVSTAG}" != "x" ]; then 159 DATE=`echo ${CVSTAG} | awk '{ print $5 }'` 160 echo "Hotplug version seems to be from ${DATE}" 161 YEAR=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $1; }'` 162 MONTH=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $2; }'` 163 DAY=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $3; }'` 164 if [ "${YEAR}" -gt "2002" ]; then 165 EDITMAP="no" 166 else 167 if [ "${YEAR}" -eq "2002" ]; then 168 if [ "${MONTH}" -ge "08" ]; then 169 EDITMAP="no" 170 fi 171 fi 172 fi 173fi 174if [ "x${EDITMAP}" == "xyes" ]; then 175 echo "We need to edit the ${HOTPLUGPATH}/usb.usermap if it exists..." 176 if test -f ${HOTPLUGPATH}/usb.usermap 177 then 178 echo "We have a usb.usermap..." 179 patchusermap ${USERMAP} /etc/hotplug/usb.usermap 180 fi 181fi 182 183echo "Hotplugging successfully installed." 184 185exit 0 186 187