Linus Walleij | bce7cca | 2007-09-01 18:52:00 +0000 | [diff] [blame] | 1 | #!/bin/bash |
Linus Walleij | eb8c6fe | 2006-02-03 09:46:22 +0000 | [diff] [blame] | 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 |
jefferai | e3f1bba | 2007-05-24 23:27:13 +0000 | [diff] [blame] | 9 | HALBASEPATH=/usr/share/hal/fdi/information |
| 10 | HALPATH=/usr/share/hal/fdi/information/20thirdparty |
| 11 | HALRULES=libmtp.fdi |
Linus Walleij | eb8c6fe | 2006-02-03 09:46:22 +0000 | [diff] [blame] | 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... |
Linus Walleij | 24232be | 2012-01-06 17:44:24 +0100 | [diff] [blame] | 25 | if [ "x${script}" = "x$2" ]; then |
| 26 | if [ "x${manid}" = "x$3" ]; then |
Linus Walleij | eb8c6fe | 2006-02-03 09:46:22 +0000 | [diff] [blame] | 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." |
jefferai | e3f1bba | 2007-05-24 23:27:13 +0000 | [diff] [blame] | 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} |
Linus Walleij | eb8c6fe | 2006-02-03 09:46:22 +0000 | [diff] [blame] | 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 |
Linus Walleij | 5417636 | 2007-09-01 18:58:50 +0000 | [diff] [blame] | 117 | if [ "x${USER}" != "xroot" ]; |
Linus Walleij | 24232be | 2012-01-06 17:44:24 +0100 | [diff] [blame] | 118 | then |
Linus Walleij | 5417636 | 2007-09-01 18:58:50 +0000 | [diff] [blame] | 119 | echo "WARNING: this program should be run as root!" |
| 120 | fi |
| 121 | |
Linus Walleij | eb8c6fe | 2006-02-03 09:46:22 +0000 | [diff] [blame] | 122 | |
| 123 | # This script locates the hotplug distribution on a certain host |
Linus Walleij | 24232be | 2012-01-06 17:44:24 +0100 | [diff] [blame] | 124 | # and sets up userland hotplugging scripts according to rules. |
Linus Walleij | eb8c6fe | 2006-02-03 09:46:22 +0000 | [diff] [blame] | 125 | # The in-parameters are the hotplug directory and the name of a |
Linus Walleij | 24232be | 2012-01-06 17:44:24 +0100 | [diff] [blame] | 126 | # file of hotplug device entries and a script to be executed for |
Linus Walleij | eb8c6fe | 2006-02-03 09:46:22 +0000 | [diff] [blame] | 127 | # these deviced. |
| 128 | |
| 129 | if test -d ${HOTPLUGPATH} |
| 130 | then |
| 131 | echo "Hotplug in ${HOTPLUGPATH}" |
| 132 | else |
| 133 | echo "Hotplug missing on this system. Cannot install." |
| 134 | exit 1 |
| 135 | fi |
| 136 | |
Linus Walleij | 24232be | 2012-01-06 17:44:24 +0100 | [diff] [blame] | 137 | if test -d ${HOTPLUGPATH}/usb |
Linus Walleij | eb8c6fe | 2006-02-03 09:46:22 +0000 | [diff] [blame] | 138 | then |
| 139 | echo "Has usb subdirectory." |
| 140 | else |
| 141 | mkdir ${HOTPLUGPATH}/usb |
| 142 | fi |
| 143 | |
| 144 | echo "Installing script." |
Linus Walleij | 4bfee57 | 2008-05-21 19:18:21 +0000 | [diff] [blame] | 145 | ${INSTALL} libmtp.sh ${HOTPLUGPATH}/usb |
Linus Walleij | eb8c6fe | 2006-02-03 09:46:22 +0000 | [diff] [blame] | 146 | echo "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. |
| 154 | echo "Checking hotplugging CVS version..." |
| 155 | echo "/etc/hotplug/usb/*.usermap support was added in august 2002" |
| 156 | EDITMAP="yes" |
| 157 | CVSTAG=`grep '\$Id:' /etc/hotplug/usb.agent` |
| 158 | if [ "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 |
| 173 | fi |
| 174 | if [ "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 |
| 181 | fi |
| 182 | |
| 183 | echo "Hotplugging successfully installed." |
| 184 | |
| 185 | exit 0 |
| 186 | |