3 # kinstall.sh -- install updated kernel PPP driver in Linux kernel source
4 # Michael Callahan callahan@maths.ox.ac.uk 17 May 1995
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
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
15 # In addition, we have to edit the Makefile in the drivers/net
16 # directory to add support for the ppp-comp compression option.
18 # Finally, we have to check that certain include file stubs in
19 # /usr/include/net exist, or else pppd won't compile. Phew!
21 LINUXSRC=/usr/src/linux
24 echo usage: $0 [linux-source-directory]
33 # Make sure we can find the kernel source
35 LINUXMK=$LINUXSRC/Makefile
37 if [ ! -r $LINUXMK -o ! -d $LINUXSRC/drivers ]; then
38 echo There appears to be no kernel source distribution in $LINUXSRC.
39 echo Give the top-level kernel source directory as the argument to
41 echo usage: $0 [linux-source-directory]
46 # Check that the kernel source Makefile includes the
47 # VERSION, PATCHLEVEL, SUBLEVEL version-numbering scheme
49 if [ `egrep '^VERSION|^PATCHLEVEL|^SUBLEVEL' $LINUXMK | wc -l` -ne 3 ]; then
50 echo You appear to have a very old kernel. You must upgrade.
51 echo It is recommended that you upgrade to the most recent 2.0.X kernel.
56 # Set the VERSION, PATCHLEVEL, SUBLEVEL variables
57 VERSION=`egrep '^VERSION' $LINUXMK | sed 's/[^0-9]//g'`
58 PATCHLEVEL=`egrep '^PATCHLEVEL' $LINUXMK | sed 's/[^0-9]//g'`
59 SUBLEVEL=`egrep '^SUBLEVEL' $LINUXMK | sed 's/[^0-9]//g'`
61 KERNEL=$VERSION.$PATCHLEVEL.$SUBLEVEL
64 # Pass judgement on the kernel version
65 if [ $VERSION -eq 1 ]; then
66 if [ $PATCHLEVEL -eq 0 -o $PATCHLEVEL -eq 1 -a $SUBLEVEL -lt 14 ]; then
67 echo You appear to be running $KERNEL. There is no support for
68 echo kernels predating 1.1.14. It is recommended that you upgrade
69 echo to the most recent 2.0.X kernel.
72 if [ $PATCHLEVEL -eq 1 ]; then
73 echo You appear to be running $KERNEL. It is recommended that you
74 echo upgrade to the most recent 1.2.X kernel.
75 echo However, installation will proceed.
80 echo Installing into kernel version $KERNEL in $LINUXSRC
83 echo "Notice to the user:"
85 echo "It is perfectly legal for this script to run without making any changes"
86 echo "to your system. This only means that the system currently contains the"
87 echo "necessary changes to support this package. Please do not attempt to"
88 echo "force this script to replace any file or make any patch. If you do so"
89 echo "then it is probable that you are actually putting older, buggier, code"
90 echo "over newer, fixed, code. Thank you."
92 echo Installing into kernel version $KERNEL in $LINUXSRC
96 # convenience function to exit if the last command failed
100 if [ $STATUS -ne 0 ]; then
101 echo "=== kinstall.sh exiting with failure status $STATUS"
107 # convenience function to compare two files marked with ==FILEVERSION
108 # version numbers; returns success if $1 is newer than $2
113 pat='==FILEVERSION[ \t]+[0-9]+[ \t]*=='
115 # Find the revision in the kernel
117 if [ -r $file1 ]; then
118 f1rev=`egrep "$pat" $file1 | head -1 | sed 's/[^0-9]//g'`
121 # Find the revision of the local file
123 if [ -r $file2 ]; then
124 f2rev=`egrep "$pat" $file2 | head -1 | sed 's/[^0-9]//g'`
127 # Make the strings the same length to avoid comparison problems
128 f1rev=`echo "0000000000"$f1rev | tail -c 10`
129 f2rev=`echo "0000000000"$f2rev | tail -c 10`
131 # Test the order of the two revisions
132 if [ $f1rev -ge $f2rev ]; then
140 # Change the USE_SKB_PROTOCOL for correct operation on 1.3.x
142 mv $LINUXSRC/drivers/net/ppp.c $LINUXSRC/drivers/net/ppp.c.in
143 if [ "$VERSION.$PATCHLEVEL" = "1.3" ]; then
144 sed 's/#define USE_SKB_PROTOCOL 0/#define USE_SKB_PROTOCOL 1/' <$LINUXSRC/drivers/net/ppp.c.in >$LINUXSRC/drivers/net/ppp.c
146 sed 's/#define USE_SKB_PROTOCOL 1/#define USE_SKB_PROTOCOL 0/' <$LINUXSRC/drivers/net/ppp.c.in >$LINUXSRC/drivers/net/ppp.c
148 rm $LINUXSRC/drivers/net/ppp.c.in
156 if newer $1 $BASE; then
157 echo $1 is newer than $BASE, skipping
160 BACKUP=`echo $1 | sed 's/.c$/.old.c/;s/.h$/.old.h/'`
161 if [ -f $1 -a $BACKUP != $1 ]; then
162 echo Saving old $1 as `basename $BACKUP`
166 echo Installing new $1
171 if [ "$2" = "yes" ]; then
177 # Patch the bad copies of the sys/types.h file
180 echo -n "Ensuring that sys/types.h includes sys/bitypes.h"
181 fgrep "<sys/bitypes.h>" /usr/include/sys/types.h >/dev/null
182 if [ ! "$?" = "0" ]; then
184 rm -f /usr/include/sys/types.h.rej
185 (cd /usr/include/sys; patch -p0 -f -F30 -s) <patch-include
186 if [ ! "$?" = "0" ]; then
187 touch /usr/include/sys/types.h.rej
189 if [ -f /usr/include/sys/types.h.rej ]; then
190 echo " --- FAILED!!!! You must fix this yourself!"
191 echo "The /usr/include/sys/types.h file must include the file"
192 echo "<sys/bitypes.h> after it includes the <linux/types.h> file."
193 echo -n "Please change it so that it does."
194 rm -f /usr/include/sys/types.h.rej
196 echo -n " -- completed"
199 echo -n " -- skipping"
205 # Check for the root user
209 if [ $my_uid -ne 0 ]; then
211 echo "********************************************************************"
212 echo "Hello, $my_name. Since you are not running as the root user, it"
213 echo "is possible that this script will fail to install the needed files."
214 echo "If this happens then please use the root account and re-execute the"
215 echo "'make kernel' command. (This script is paused for 10 seconds.)"
216 echo "********************************************************************"
225 echo "Notice to the user:"
227 echo "It is perfectly legal for this script to run without making any changes"
228 echo "to your system. This means that the system currently contains the"
229 echo "necessary changes to support this package. Please do not attempt to"
230 echo "force this script to replace any file nor make any patch. If you do so"
231 echo "then it is probable that you are actually putting older, buggier, code"
232 echo "over the newer, fixed, code. Thank you."
234 echo Installing into kernel version $KERNEL in $LINUXSRC
237 if [ -f $LINUXSRC/drivers/net/ppp.h ]; then
238 echo Moving old $LINUXSRC/drivers/net/ppp.h file out of the way
239 mv $LINUXSRC/drivers/net/ppp.h $LINUXSRC/drivers/net/ppp.old.h
243 for FILE in $LINUXSRC/drivers/net/bsd_comp.c \
244 $LINUXSRC/drivers/net/ppp_deflate.c \
245 $LINUXSRC/drivers/net/zlib.c \
246 $LINUXSRC/drivers/net/zlib.h \
247 $LINUXSRC/include/linux/if_ppp.h \
248 $LINUXSRC/include/linux/if_pppvar.h \
249 $LINUXSRC/include/linux/ppp-comp.h \
250 $LINUXSRC/include/linux/ppp_defs.h
255 installfile $LINUXSRC/drivers/net/ppp.c yes
257 for FILE in if.h if_arp.h route.h
259 if [ ! -f $LINUXSRC/include/linux/$FILE ]; then
260 echo Installing new $1
261 cp $FILE $LINUXSRC/include/linux/$FILE
263 touch $LINUXSRC/include/linux/$FILE
268 echo -n 'Adding BSD compression module to drivers makefile...'
269 NETMK=$LINUXSRC/drivers/net/Makefile
270 fgrep bsd_comp.o $NETMK >/dev/null
271 if [ ! "$?" = "0" ]; then
273 rm -f $NETMK.orig $NETMK.rej
274 if [ "$VERSION.$PATCHLEVEL" = "1.2" ]; then
275 (cd $LINUXSRC; patch -p1 -f -F30 -s) <patch-1.2
276 if [ ! "$?" = "0" ]; then
280 if [ "$VERSION.$PATCHLEVEL" = "1.3" ]; then
281 (cd $LINUXSRC; patch -p1 -f -F30 -s) <patch-1.3
282 if [ ! "$?" = "0" ]; then
290 if [ -f $NETMK.rej ]; then
292 if [ -f $NETMK.orig ]; then
293 mv $NETMK.orig $NETMK
295 sed 's/ppp.o$/ppp.o bsd_comp.o/g' <$NETMK >$NETMK.temp
298 mv $NETMK $NETMK.orig
301 mv $NETMK.temp $NETMK
305 if [ -f $NETMK.orig ]; then
306 mv $NETMK.orig $NETMK.old
309 echo -n '(already there--skipping)'
312 echo -n 'Adding Deflate compression module to drivers makefile...'
313 NETMK=$LINUXSRC/drivers/net/Makefile
314 fgrep ppp_deflate.o $NETMK >/dev/null
315 if [ ! "$?" = "0" ]; then
317 sed 's/bsd_comp.o$/bsd_comp.o ppp_deflate.o/g' <$NETMK >$NETMK.temp
320 mv $NETMK $NETMK.orig
323 mv $NETMK.temp $NETMK
326 echo -n '(already there--skipping)'
331 # install header stub files in /usr/include/net
333 for FILE in if_ppp.h \
341 if [ ! -f /usr/include/net/$FILE ]; then
342 echo Installing stub include file in /usr/include/net/$FILE
343 echo "#include <linux/$FILE>" > /usr/include/net/$FILE
345 chown 0:0 /usr/include/net/$FILE
347 chmod 444 /usr/include/net/$FILE
349 touch /usr/include/net/$FILE
357 if [ ! -f /usr/include/netinet/$FILE ]; then
358 echo Installing stub include file in /usr/include/netinet/$FILE
359 if [ ! -f $LINUXSRC/include/linux/$FILE ]; then
360 echo "#include \"$LINUXSRC/net/inet/$FILE\"" >/usr/include/netinet/$FILE
362 echo "#include <linux/$FILE>" > /usr/include/netinet/$FILE
364 chown 0:0 /usr/include/netinet/$FILE
366 chmod 444 /usr/include/netinet/$FILE
368 touch /usr/include/netinet/$FILE
375 echo "Kernel driver files installation done."
377 if [ "$VERSION.$PATCHLEVEL" = "1.2" ]; then
379 echo "Please make sure that you apply the kernel patches in the"
380 echo "linux/Other.Patches directory. You should apply both the 1.2.13 and"
381 echo "slhc.patch files or the driver in the kernel may not compile."
382 echo "The instructions are in each of these files and the README.Linux"