blob: 6a2755254a03fd113a5ae567d33112a66adec627 [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...
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."
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" ];
118 echo "WARNING: this program should be run as root!"
119fi
120
Linus Walleijeb8c6fe2006-02-03 09:46:22 +0000121
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
128if test -d ${HOTPLUGPATH}
129then
130 echo "Hotplug in ${HOTPLUGPATH}"
131else
132 echo "Hotplug missing on this system. Cannot install."
133 exit 1
134fi
135
136if test -d ${HOTPLUGPATH}/usb
137then
138 echo "Has usb subdirectory."
139else
140 mkdir ${HOTPLUGPATH}/usb
141fi
142
143echo "Installing script."
Linus Walleij4bfee572008-05-21 19:18:21 +0000144${INSTALL} libmtp.sh ${HOTPLUGPATH}/usb
Linus Walleijeb8c6fe2006-02-03 09:46:22 +0000145echo "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.
153echo "Checking hotplugging CVS version..."
154echo "/etc/hotplug/usb/*.usermap support was added in august 2002"
155EDITMAP="yes"
156CVSTAG=`grep '\$Id:' /etc/hotplug/usb.agent`
157if [ "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
172fi
173if [ "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
180fi
181
182echo "Hotplugging successfully installed."
183
184exit 0
185