blob: 6a2755254a03fd113a5ae567d33112a66adec627 [file] [log] [blame]
Yavor Goulishev3aa430d2011-05-23 11:54:45 -07001#!/bin/bash
2
3INSTALL="@INSTALL@"
4HOTPLUGPATH=/etc/hotplug
5SCRIPTNAME=libmtp.sh
6USERMAP=libmtp.usermap
7UDEVPATH=/etc/udev/rules.d
8UDEVRULES=libmtp.rules
9HALBASEPATH=/usr/share/hal/fdi/information
10HALPATH=/usr/share/hal/fdi/information/20thirdparty
11HALRULES=libmtp.fdi
12
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."
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
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}
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
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
117if [ "x${USER}" != "xroot" ];
118 echo "WARNING: this program should be run as root!"
119fi
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
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."
144${INSTALL} libmtp.sh ${HOTPLUGPATH}/usb
145echo "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