]> git.ozlabs.org Git - ppp.git/blob - linux/kinstall.sh
added add_fd, remove_fd, removed wait_loop_output, wait_time.
[ppp.git] / linux / kinstall.sh
1 #!/bin/sh
2 #
3 #  kinstall.sh -- install updated kernel PPP driver in Linux kernel source
4 #     Michael Callahan callahan@maths.ox.ac.uk 17 May 1995
5 #
6 #  This script is complicated because we want to avoid installing a driver
7 #  in a kernel if it won't work in that kernel.  This means two things:
8 #    1) we check the version of the kernel and refuse to install if the
9 #       kernel is too old;
10 #    2) we check that the files already in the kernel aren't more recent
11 #       than the one we're about to install.
12 #  If either 1) or 2) occurs then we exit with an error message and don't
13 #  touch anything.
14 #
15 #  In addition, we have to edit the Makefile in the drivers/net
16 #  directory to add support for the ppp-comp compression option.
17
18 LINUXSRC=/usr/src/linux
19
20 if [ $# -gt 1 ]; then
21    echo usage: $0 [linux-source-directory]
22    exit 1
23 fi
24
25 if [ $# -eq 1 ]; then
26    LINUXSRC=$1
27 fi
28
29 #
30 #  Make sure we can find the kernel source
31
32 LINUXMK=$LINUXSRC/Makefile
33
34 if [ ! -r $LINUXMK -o ! -d $LINUXSRC/drivers ]; then
35   echo There appears to be no kernel source distribution in $LINUXSRC.
36   echo Give the top-level kernel source directory as the argument to
37   echo this script.
38   echo usage: $0 [linux-source-directory]
39   exit 1
40 fi
41
42 #
43 #  Check that the kernel source Makefile includes the 
44 #    VERSION, PATCHLEVEL, SUBLEVEL version-numbering scheme
45 #    introduced in 1.0.1
46 if [ `egrep '^VERSION|^PATCHLEVEL|^SUBLEVEL' $LINUXMK | wc -l` -ne 3 ]; then
47   echo You appear to have a very old kernel. You must upgrade.
48   echo It is recommended that you upgrade to the most recent 2.0.x kernel.
49   exit 1
50 fi
51
52 #
53 #  Set the VERSION, PATCHLEVEL, SUBLEVEL variables
54 VERSION=`egrep '^VERSION' $LINUXMK | sed 's/[^0-9]//g'`
55 PATCHLEVEL=`egrep '^PATCHLEVEL' $LINUXMK | sed 's/[^0-9]//g'`
56 SUBLEVEL=`egrep '^SUBLEVEL' $LINUXMK | sed 's/[^0-9]//g'`
57
58 KERNEL=$VERSION.$PATCHLEVEL.$SUBLEVEL
59
60 #
61 #  Pass judgement on the kernel version
62 if [ $VERSION -lt 2 ]; then
63     echo You appear to be running $KERNEL. There is no support for
64     echo kernels predating 2.0.0.  It is recommended that you upgrade
65     echo to the most recent 2.0.x kernel.
66     exit 1
67 fi
68
69 #
70 # convenience function to exit if the last command failed
71
72 bombiffailed () {
73   STATUS=$?
74   if [ $STATUS -ne 0 ]; then
75     echo "=== kinstall.sh exiting with failure status $STATUS"
76     exit $STATUS
77   fi
78 }
79
80 #
81 # convenience function to compare two files marked with ==FILEVERSION
82 # version numbers; returns success if $1 is not older than $2
83
84 newer () {
85   file1=$1
86   file2=$2
87   pat='==FILEVERSION[ \t]+[0-9]+[ \t]*=='
88
89   # Find the revision in the kernel
90   f1rev=""
91   if [ -r $file1 ]; then
92     f1rev=`egrep "$pat" $file1 | head -1 | sed 's/[^0-9]//g'`
93   fi
94
95   # Find the revision of the local file
96   f2rev=""
97   if [ -r $file2 ]; then
98     f2rev=`egrep "$pat" $file2 | head -1 | sed 's/[^0-9]//g'`
99   fi
100
101   # Make the strings the same length to avoid comparison problems
102   f1rev=`echo "0000000000"$f1rev | tail -c 10`
103   f2rev=`echo "0000000000"$f2rev | tail -c 10`
104
105   # Test the order of the two revisions
106   if [ $f1rev -ge $f2rev ]; then
107     true ; return
108   fi
109
110   false ; return
111 }
112
113 #
114 #  Install the files.
115
116 installfile () {
117   BASE=`basename $1`
118   if newer $1 $BASE; then
119     echo $1 is not older than $BASE, skipping
120     return 0
121   fi
122   BACKUP=`echo $1 | sed 's/.c$/.old.c/;s/.h$/.old.h/'`
123   if [ -f $1 -a $BACKUP != $1 ]; then
124     echo Saving old $1 as `basename $BACKUP`
125     mv $1 $BACKUP
126     bombiffailed
127   fi
128   echo Installing new $1
129   cp $BASE $1
130   bombiffailed
131   touch $1
132   bombiffailed
133 }
134
135 #
136 # Check for the root user
137 test_root() {
138   my_uid=`id -u`
139   my_name=`id -u -n`
140   if [ $my_uid -ne 0 ]; then
141     echo
142     echo "********************************************************************"
143     echo "Hello, $my_name. Since you are not running as the root user, it"
144     echo "is possible that this script will fail to install the needed files."
145     echo "If this happens then please use the root account and re-execute the"
146     echo "'make kernel' command.  (This script is paused for 10 seconds.)"
147     echo "********************************************************************"
148     echo
149     sleep 10s
150   fi
151 }
152
153 test_root
154
155 echo
156 echo "Notice to the user:"
157 echo
158 echo "It is perfectly legal for this script to run without making any changes"
159 echo "to your system. This means that the system currently contains the"
160 echo "necessary changes to support this package. Please do not attempt to"
161 echo "force this script to replace any file nor make any patch. If you do so"
162 echo "then it is probable that you are actually putting older, buggier, code"
163 echo "over the newer, fixed, code. Thank you."
164 echo
165 echo Installing into kernel version $KERNEL in $LINUXSRC
166 echo
167
168 if [ -f $LINUXSRC/drivers/net/ppp.h ]; then
169   echo Moving old $LINUXSRC/drivers/net/ppp.h file out of the way
170   mv $LINUXSRC/drivers/net/ppp.h $LINUXSRC/drivers/net/ppp.old.h
171   bombiffailed
172 fi
173
174 for FILE in $LINUXSRC/drivers/net/bsd_comp.c \
175             $LINUXSRC/drivers/net/ppp_deflate.c \
176             $LINUXSRC/drivers/net/zlib.c \
177             $LINUXSRC/drivers/net/zlib.h \
178             $LINUXSRC/include/linux/if_ppp.h \
179             $LINUXSRC/include/linux/if_pppvar.h \
180             $LINUXSRC/include/linux/ppp-comp.h \
181             $LINUXSRC/include/linux/ppp_defs.h
182   do
183   installfile $FILE no
184 done
185
186 installfile $LINUXSRC/drivers/net/ppp.c yes
187
188 echo -n 'Adding BSD compression module to drivers makefile...'
189 NETMK=$LINUXSRC/drivers/net/Makefile
190 fgrep bsd_comp.o $NETMK >/dev/null
191 if [ ! "$?" = "0" ]; then
192    if [ -f $NETMK.orig ]; then
193       mv $NETMK.orig $NETMK
194    fi
195    sed 's/ppp.o$/ppp.o bsd_comp.o/g' <$NETMK >$NETMK.temp
196    bombiffailed
197    echo -n '.'
198    mv $NETMK $NETMK.orig
199    bombiffailed
200    echo -n '.'
201    mv $NETMK.temp $NETMK
202    bombiffailed
203 else
204    echo -n '(already there--skipping)'
205 fi
206 echo
207 echo -n 'Adding Deflate compression module to drivers makefile...'
208 NETMK=$LINUXSRC/drivers/net/Makefile
209 fgrep ppp_deflate.o $NETMK >/dev/null
210 if [ ! "$?" = "0" ]; then
211    echo -n '.'
212    sed 's/bsd_comp.o$/bsd_comp.o ppp_deflate.o/g' <$NETMK >$NETMK.temp
213    bombiffailed
214    echo -n '.'
215    mv $NETMK $NETMK.orig
216    bombiffailed
217    echo -n '.'
218    mv $NETMK.temp $NETMK
219    bombiffailed
220 else
221    echo -n '(already there--skipping)'
222 fi
223 echo
224
225 # #
226 # # install header stub files in /usr/include/net
227
228 # for FILE in if_ppp.h \
229 #             if_pppvar.h \
230 #             ppp-comp.h \
231 #           if.h \
232 #             ppp_defs.h
233 #   do
234 #   if [ ! -f /usr/include/net/$FILE ]; then
235 #     echo Installing stub include file in /usr/include/net/$FILE
236 #     echo "#include <linux/$FILE>" > /usr/include/net/$FILE
237 #     bombiffailed
238 #     chown 0:0 /usr/include/net/$FILE
239 #     bombiffailed
240 #     chmod 444 /usr/include/net/$FILE
241 #     bombiffailed
242 #     touch /usr/include/net/$FILE
243 #     bombiffailed
244 #   fi
245 # done
246
247 echo "Kernel driver files installation done."
248
249 exit 0