1 #!/bin/bash 2 3 INSTALL="@INSTALL@" 4 HOTPLUGPATH=/etc/hotplug 5 SCRIPTNAME=libmtp.sh 6 USERMAP=libmtp.usermap 7 UDEVPATH=/etc/udev/rules.d 8 UDEVRULES=libmtp.rules 9 HALBASEPATH=/usr/share/hal/fdi/information 10 HALPATH=/usr/share/hal/fdi/information/20thirdparty 11 HALRULES=libmtp.fdi 12 13 # See if the parameter script ($2), device ($3) and productid ($4) 14 # are already defined in the usermap ($1) 15 function 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. 42 function 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 75 if 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 87 fi 88 89 # Check for HAL next 90 if 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 101 fi 102 103 104 # Check prerequisites 105 COMMAND=`which grep 2> /dev/null` 106 if [ "x${COMMAND}" = "x" ]; 107 then 108 echo "Missing grep program. Fatal error." 109 exit 1 110 fi 111 COMMAND=`which awk 2> /dev/null` 112 if [ "x${COMMAND}" = "x" ]; 113 then 114 echo "Missing awk program. Fatal error." 115 exit 1 116 fi 117 if [ "x${USER}" != "xroot" ]; 118 echo "WARNING: this program should be run as root!" 119 fi 120 121 122 # This script locates the hotplug distribution on a certain host 123 # and sets up userland hotplugging scripts according to rules. 124 # The in-parameters are the hotplug directory and the name of a 125 # file of hotplug device entries and a script to be executed for 126 # these deviced. 127 128 if test -d ${HOTPLUGPATH} 129 then 130 echo "Hotplug in ${HOTPLUGPATH}" 131 else 132 echo "Hotplug missing on this system. Cannot install." 133 exit 1 134 fi 135 136 if test -d ${HOTPLUGPATH}/usb 137 then 138 echo "Has usb subdirectory." 139 else 140 mkdir ${HOTPLUGPATH}/usb 141 fi 142 143 echo "Installing script." 144 ${INSTALL} libmtp.sh ${HOTPLUGPATH}/usb 145 echo "Installing usermap." 146 ${INSTALL} -m 644 ${USERMAP} ${HOTPLUGPATH}/usb 147 # If we find a usb.usermap file, and we see that this distribution 148 # of hotplug does not support private usermaps, then we need to 149 # patch the usb.usermap file. 150 # 151 # Create a merged file, diff the files to each other, and if there 152 # were mismatches, then patch the installed file. 153 echo "Checking hotplugging CVS version..." 154 echo "/etc/hotplug/usb/*.usermap support was added in august 2002" 155 EDITMAP="yes" 156 CVSTAG=`grep '\$Id:' /etc/hotplug/usb.agent` 157 if [ "x${CVSTAG}" != "x" ]; then 158 DATE=`echo ${CVSTAG} | awk '{ print $5 }'` 159 echo "Hotplug version seems to be from ${DATE}" 160 YEAR=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $1; }'` 161 MONTH=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $2; }'` 162 DAY=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $3; }'` 163 if [ "${YEAR}" -gt "2002" ]; then 164 EDITMAP="no" 165 else 166 if [ "${YEAR}" -eq "2002" ]; then 167 if [ "${MONTH}" -ge "08" ]; then 168 EDITMAP="no" 169 fi 170 fi 171 fi 172 fi 173 if [ "x${EDITMAP}" == "xyes" ]; then 174 echo "We need to edit the ${HOTPLUGPATH}/usb.usermap if it exists..." 175 if test -f ${HOTPLUGPATH}/usb.usermap 176 then 177 echo "We have a usb.usermap..." 178 patchusermap ${USERMAP} /etc/hotplug/usb.usermap 179 fi 180 fi 181 182 echo "Hotplugging successfully installed." 183 184 exit 0 185 186