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 -lt 2 ]; then
66 echo You appear to be running $KERNEL. There is no support for
67 echo kernels predating 2.0.0. It is recommended that you upgrade
68 echo to the most recent 2.0.x kernel.
73 # convenience function to exit if the last command failed
77 if [ $STATUS -ne 0 ]; then
78 echo "=== kinstall.sh exiting with failure status $STATUS"
84 # convenience function to compare two files marked with ==FILEVERSION
85 # version numbers; returns success if $1 is newer than $2
90 pat='==FILEVERSION[ \t]+[0-9]+[ \t]*=='
92 # Find the revision in the kernel
94 if [ -r $file1 ]; then
95 f1rev=`egrep "$pat" $file1 | head -1 | sed 's/[^0-9]//g'`
98 # Find the revision of the local file
100 if [ -r $file2 ]; then
101 f2rev=`egrep "$pat" $file2 | head -1 | sed 's/[^0-9]//g'`
104 # Make the strings the same length to avoid comparison problems
105 f1rev=`echo "0000000000"$f1rev | tail -c 10`
106 f2rev=`echo "0000000000"$f2rev | tail -c 10`
108 # Test the order of the two revisions
109 if [ $f1rev -ge $f2rev ]; then
121 if newer $1 $BASE; then
122 echo $1 is newer than $BASE, skipping
125 BACKUP=`echo $1 | sed 's/.c$/.old.c/;s/.h$/.old.h/'`
126 if [ -f $1 -a $BACKUP != $1 ]; then
127 echo Saving old $1 as `basename $BACKUP`
131 echo Installing new $1
139 # Check for the root user
143 if [ $my_uid -ne 0 ]; then
145 echo "********************************************************************"
146 echo "Hello, $my_name. Since you are not running as the root user, it"
147 echo "is possible that this script will fail to install the needed files."
148 echo "If this happens then please use the root account and re-execute the"
149 echo "'make kernel' command. (This script is paused for 10 seconds.)"
150 echo "********************************************************************"
159 echo "Notice to the user:"
161 echo "It is perfectly legal for this script to run without making any changes"
162 echo "to your system. This means that the system currently contains the"
163 echo "necessary changes to support this package. Please do not attempt to"
164 echo "force this script to replace any file nor make any patch. If you do so"
165 echo "then it is probable that you are actually putting older, buggier, code"
166 echo "over the newer, fixed, code. Thank you."
168 echo Installing into kernel version $KERNEL in $LINUXSRC
171 if [ -f $LINUXSRC/drivers/net/ppp.h ]; then
172 echo Moving old $LINUXSRC/drivers/net/ppp.h file out of the way
173 mv $LINUXSRC/drivers/net/ppp.h $LINUXSRC/drivers/net/ppp.old.h
177 for FILE in $LINUXSRC/drivers/net/bsd_comp.c \
178 $LINUXSRC/drivers/net/ppp_deflate.c \
179 $LINUXSRC/drivers/net/zlib.c \
180 $LINUXSRC/drivers/net/zlib.h \
181 $LINUXSRC/include/linux/if_ppp.h \
182 $LINUXSRC/include/linux/if_pppvar.h \
183 $LINUXSRC/include/linux/ppp-comp.h \
184 $LINUXSRC/include/linux/ppp_defs.h
189 installfile $LINUXSRC/drivers/net/ppp.c yes
191 echo -n 'Adding BSD compression module to drivers makefile...'
192 NETMK=$LINUXSRC/drivers/net/Makefile
193 fgrep bsd_comp.o $NETMK >/dev/null
194 if [ ! "$?" = "0" ]; then
195 if [ -f $NETMK.orig ]; then
196 mv $NETMK.orig $NETMK
198 sed 's/ppp.o$/ppp.o bsd_comp.o/g' <$NETMK >$NETMK.temp
201 mv $NETMK $NETMK.orig
204 mv $NETMK.temp $NETMK
207 echo -n '(already there--skipping)'
210 echo -n 'Adding Deflate compression module to drivers makefile...'
211 NETMK=$LINUXSRC/drivers/net/Makefile
212 fgrep ppp_deflate.o $NETMK >/dev/null
213 if [ ! "$?" = "0" ]; then
215 sed 's/bsd_comp.o$/bsd_comp.o ppp_deflate.o/g' <$NETMK >$NETMK.temp
218 mv $NETMK $NETMK.orig
221 mv $NETMK.temp $NETMK
224 echo -n '(already there--skipping)'
229 # install header stub files in /usr/include/net
231 for FILE in if_ppp.h \
237 if [ ! -f /usr/include/net/$FILE ]; then
238 echo Installing stub include file in /usr/include/net/$FILE
239 echo "#include <linux/$FILE>" > /usr/include/net/$FILE
241 chown 0:0 /usr/include/net/$FILE
243 chmod 444 /usr/include/net/$FILE
245 touch /usr/include/net/$FILE
250 echo "Kernel driver files installation done."