blob: 14b156078331b87e5071542768a5ab26b6b054b8 [file] [log] [blame]
Linus Walleijbce7cca2007-09-01 18:52:00 +00001#!/bin/bash
Linus Walleijeb8c6fe2006-02-03 09:46:22 +00002
3INSTALL="@INSTALL@"
4HOTPLUGPATH=/etc/hotplug
5SCRIPTNAME=libmtp.sh
6USERMAP=libmtp.usermap
7UDEVPATH=/etc/udev/rules.d
8UDEVRULES=libmtp.rules
jefferaie3f1bba2007-05-24 23:27:13 +00009HALBASEPATH=/usr/share/hal/fdi/information
10HALPATH=/usr/share/hal/fdi/information/20thirdparty
11HALRULES=libmtp.fdi
Linus Walleijeb8c6fe2006-02-03 09:46:22 +000012
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...
Linus Walleij24232be2012-01-06 17:44:24 +010025 if [ "x${script}" = "x$2" ]; then
26 if [ "x${manid}" = "x$3" ]; then
Linus Walleijeb8c6fe2006-02-03 09:46:22 +000027 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."
jefferaie3f1bba2007-05-24 23:27:13 +000080 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}
Linus Walleijeb8c6fe2006-02-03 09:46:22 +000094 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
Linus Walleij54176362007-09-01 18:58:50 +0000117if [ "x${USER}" != "xroot" ];
Linus Walleij24232be2012-01-06 17:44:24 +0100118then
Linus Walleij54176362007-09-01 18:58:50 +0000119 echo "WARNING: this program should be run as root!"
120fi
121
Linus Walleijeb8c6fe2006-02-03 09:46:22 +0000122
123# This script locates the hotplug distribution on a certain host
Linus Walleij24232be2012-01-06 17:44:24 +0100124# and sets up userland hotplugging scripts according to rules.
Linus Walleijeb8c6fe2006-02-03 09:46:22 +0000125# The in-parameters are the hotplug directory and the name of a
Linus Walleij24232be2012-01-06 17:44:24 +0100126# file of hotplug device entries and a script to be executed for
Linus Walleijeb8c6fe2006-02-03 09:46:22 +0000127# 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
Linus Walleij24232be2012-01-06 17:44:24 +0100137if test -d ${HOTPLUGPATH}/usb
Linus Walleijeb8c6fe2006-02-03 09:46:22 +0000138then
139 echo "Has usb subdirectory."
140else
141 mkdir ${HOTPLUGPATH}/usb
142fi
143
144echo "Installing script."
Linus Walleij4bfee572008-05-21 19:18:21 +0000145${INSTALL} libmtp.sh ${HOTPLUGPATH}/usb
Linus Walleijeb8c6fe2006-02-03 09:46:22 +0000146echo "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