13aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#!/bin/bash 23aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 33aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevINSTALL="@INSTALL@" 43aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevHOTPLUGPATH=/etc/hotplug 53aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevSCRIPTNAME=libmtp.sh 63aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevUSERMAP=libmtp.usermap 73aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevUDEVPATH=/etc/udev/rules.d 83aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevUDEVRULES=libmtp.rules 93aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevHALBASEPATH=/usr/share/hal/fdi/information 103aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevHALPATH=/usr/share/hal/fdi/information/20thirdparty 113aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevHALRULES=libmtp.fdi 123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# See if the parameter script ($2), device ($3) and productid ($4) 143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# are already defined in the usermap ($1) 153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunction inmap { 163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while read LINE; do 173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if [ "x${LINE}" != "x" ]; then 183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev firstword=`echo ${LINE} | awk '{ print $1 }'` 193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if [ ${firstword} != "#" ]; then 203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # This is a device line entry 213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev script=${firstword} 223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev manid=`echo ${LINE} | awk '{ print $3 }'` 233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev productid=`echo ${LINE} | awk '{ print $4 }'` 243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Skip blank products... 253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if [ "x${script}" = "x$2" ]; then 263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if [ "x${manid}" = "x$3" ]; then 273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if [ "x${productid}" = "x$4" ]; then 283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "yes" 293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return 0 303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done < $1 363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "no" 373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return 0 383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Scan the usermap $2 for all devices in $1 to see if they are already 413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# there, else patch the usermap. 423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfunction patchusermap { 433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Nullify comment 443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev comment="" 453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while read LINE; do 463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if [ "x$LINE" != "x" ]; then 473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev firstword=`echo ${LINE} | awk '{ print $1 }'` 483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if [ ${firstword} = "#" ]; then 493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # This is a comment line, save it. 503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev comment=${LINE} 513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # This is a device line entry 533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev script=${firstword} 543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev manid=`echo ${LINE} | awk '{ print $3 }'` 553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev productid=`echo ${LINE} | awk '{ print $4 }'` 563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Skip blank products... 573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if [ "x${manid}" != "x" ]; then 583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # See if this product is already in the usermap 593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "Checking for product ${productid} in $2..." 603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if [ `inmap $2 ${script} ${manid} ${productid}` = "no" ]; then 613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "Not present, adding to hotplug map." 623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo ${comment} >> $2 633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo ${LINE} >> $2 643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev comment="" 653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "Already installed." 673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done < $1 723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Check for udev first 753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif test -d ${UDEVPATH} ; then 763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "You seem to have udev on your system. Installing udev rules..." 773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ${INSTALL} ${UDEVRULES} ${UDEVPATH} 783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "You may need additional setup to get correct permissions on your device." 793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "See the INSTALL file for information." 803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "Do you also want to install HAL support or the old hotplug support (y/n)?" 813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev read IN 823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if [ "$IN" = "y" ] || [ "$IN" = "Y" ]; then 833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "Continuing..." 843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit 0 863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi 883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Check for HAL next 903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif test -d ${HALBASEPATH} ; then 913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "You seem to have HAL on your system. Installing HAL rules..." 923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev mkdir -p ${HALPATH} 933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ${INSTALL} ${HALRULES} ${HALPATH} 943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "Do you also want to install the old hotplug support (y/n)?" 953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev read IN 963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if [ "$IN" = "y" ] || [ "$IN" = "Y" ]; then 973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "Continuing..." 983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit 0 1003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 1013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi 1023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Check prerequisites 1053aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevCOMMAND=`which grep 2> /dev/null` 1063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif [ "x${COMMAND}" = "x" ]; 1073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevthen 1083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "Missing grep program. Fatal error." 1093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit 1 1103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi 1113aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevCOMMAND=`which awk 2> /dev/null` 1123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif [ "x${COMMAND}" = "x" ]; 1133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevthen 1143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "Missing awk program. Fatal error." 1153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit 1 1163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi 1173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif [ "x${USER}" != "xroot" ]; 1183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "WARNING: this program should be run as root!" 1193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi 1203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# This script locates the hotplug distribution on a certain host 1233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# and sets up userland hotplugging scripts according to rules. 1243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# The in-parameters are the hotplug directory and the name of a 1253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# file of hotplug device entries and a script to be executed for 1263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# these deviced. 1273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif test -d ${HOTPLUGPATH} 1293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevthen 1303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "Hotplug in ${HOTPLUGPATH}" 1313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevelse 1323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "Hotplug missing on this system. Cannot install." 1333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit 1 1343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi 1353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif test -d ${HOTPLUGPATH}/usb 1373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevthen 1383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "Has usb subdirectory." 1393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevelse 1403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev mkdir ${HOTPLUGPATH}/usb 1413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi 1423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevecho "Installing script." 1443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev${INSTALL} libmtp.sh ${HOTPLUGPATH}/usb 1453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevecho "Installing usermap." 1463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev${INSTALL} -m 644 ${USERMAP} ${HOTPLUGPATH}/usb 1473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# If we find a usb.usermap file, and we see that this distribution 1483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# of hotplug does not support private usermaps, then we need to 1493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# patch the usb.usermap file. 1503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# 1513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Create a merged file, diff the files to each other, and if there 1523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# were mismatches, then patch the installed file. 1533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevecho "Checking hotplugging CVS version..." 1543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevecho "/etc/hotplug/usb/*.usermap support was added in august 2002" 1553aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEDITMAP="yes" 1563aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevCVSTAG=`grep '\$Id:' /etc/hotplug/usb.agent` 1573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif [ "x${CVSTAG}" != "x" ]; then 1583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev DATE=`echo ${CVSTAG} | awk '{ print $5 }'` 1593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "Hotplug version seems to be from ${DATE}" 1603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev YEAR=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $1; }'` 1613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev MONTH=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $2; }'` 1623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev DAY=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $3; }'` 1633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if [ "${YEAR}" -gt "2002" ]; then 1643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev EDITMAP="no" 1653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 1663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if [ "${YEAR}" -eq "2002" ]; then 1673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if [ "${MONTH}" -ge "08" ]; then 1683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev EDITMAP="no" 1693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 1703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 1713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 1723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi 1733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif [ "x${EDITMAP}" == "xyes" ]; then 1743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "We need to edit the ${HOTPLUGPATH}/usb.usermap if it exists..." 1753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -f ${HOTPLUGPATH}/usb.usermap 1763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev then 1773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "We have a usb.usermap..." 1783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev patchusermap ${USERMAP} /etc/hotplug/usb.usermap 1793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 1803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi 1813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevecho "Hotplugging successfully installed." 1833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevexit 0 1853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 186