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 # Patch the bad copies of the sys/types.h file
142 echo -n "Ensuring that sys/types.h includes sys/bitypes.h"
143 fgrep "<sys/bitypes.h>" /usr/include/sys/types.h >/dev/null
144 if [ ! "$?" = "0" ]; then
146 rm -f /usr/include/sys/types.h.rej
147 (cd /usr/include/sys; patch -p0 -f -F30 -s) <patch-include
148 if [ ! "$?" = "0" ]; then
149 touch /usr/include/sys/types.h.rej
151 if [ -f /usr/include/sys/types.h.rej ]; then
152 echo " --- FAILED!!!! You must fix this yourself!"
153 echo "The /usr/include/sys/types.h file must include the file"
154 echo "<sys/bitypes.h> after it includes the <linux/types.h> file."
155 echo -n "Please change it so that it does."
156 rm -f /usr/include/sys/types.h.rej
158 echo -n " -- completed"
161 echo -n " -- skipping"
167 # Check for the root user
171 if [ $my_uid -ne 0 ]; then
173 echo "********************************************************************"
174 echo "Hello, $my_name. Since you are not running as the root user, it"
175 echo "is possible that this script will fail to install the needed files."
176 echo "If this happens then please use the root account and re-execute the"
177 echo "'make kernel' command. (This script is paused for 10 seconds.)"
178 echo "********************************************************************"
187 echo "Notice to the user:"
189 echo "It is perfectly legal for this script to run without making any changes"
190 echo "to your system. This means that the system currently contains the"
191 echo "necessary changes to support this package. Please do not attempt to"
192 echo "force this script to replace any file nor make any patch. If you do so"
193 echo "then it is probable that you are actually putting older, buggier, code"
194 echo "over the newer, fixed, code. Thank you."
196 echo Installing into kernel version $KERNEL in $LINUXSRC
199 if [ -f $LINUXSRC/drivers/net/ppp.h ]; then
200 echo Moving old $LINUXSRC/drivers/net/ppp.h file out of the way
201 mv $LINUXSRC/drivers/net/ppp.h $LINUXSRC/drivers/net/ppp.old.h
205 for FILE in $LINUXSRC/drivers/net/bsd_comp.c \
206 $LINUXSRC/drivers/net/ppp_deflate.c \
207 $LINUXSRC/drivers/net/zlib.c \
208 $LINUXSRC/drivers/net/zlib.h \
209 $LINUXSRC/include/linux/if_ppp.h \
210 $LINUXSRC/include/linux/if_pppvar.h \
211 $LINUXSRC/include/linux/ppp-comp.h \
212 $LINUXSRC/include/linux/ppp_defs.h
217 installfile $LINUXSRC/drivers/net/ppp.c yes
219 for FILE in if.h if_arp.h route.h
221 if [ ! -f $LINUXSRC/include/linux/$FILE ]; then
222 echo Installing new $1
223 cp $FILE $LINUXSRC/include/linux/$FILE
225 touch $LINUXSRC/include/linux/$FILE
230 echo -n 'Adding BSD compression module to drivers makefile...'
231 NETMK=$LINUXSRC/drivers/net/Makefile
232 fgrep bsd_comp.o $NETMK >/dev/null
233 if [ ! "$?" = "0" ]; then
234 if [ -f $NETMK.orig ]; then
235 mv $NETMK.orig $NETMK
237 sed 's/ppp.o$/ppp.o bsd_comp.o/g' <$NETMK >$NETMK.temp
240 mv $NETMK $NETMK.orig
243 mv $NETMK.temp $NETMK
246 echo -n '(already there--skipping)'
249 echo -n 'Adding Deflate compression module to drivers makefile...'
250 NETMK=$LINUXSRC/drivers/net/Makefile
251 fgrep ppp_deflate.o $NETMK >/dev/null
252 if [ ! "$?" = "0" ]; then
254 sed 's/bsd_comp.o$/bsd_comp.o ppp_deflate.o/g' <$NETMK >$NETMK.temp
257 mv $NETMK $NETMK.orig
260 mv $NETMK.temp $NETMK
263 echo -n '(already there--skipping)'
268 # install header stub files in /usr/include/net
270 for FILE in if_ppp.h \
278 if [ ! -f /usr/include/net/$FILE ]; then
279 echo Installing stub include file in /usr/include/net/$FILE
280 echo "#include <linux/$FILE>" > /usr/include/net/$FILE
282 chown 0:0 /usr/include/net/$FILE
284 chmod 444 /usr/include/net/$FILE
286 touch /usr/include/net/$FILE
294 if [ ! -f /usr/include/netinet/$FILE ]; then
295 echo Installing stub include file in /usr/include/netinet/$FILE
296 if [ ! -f $LINUXSRC/include/linux/$FILE ]; then
297 echo "#include \"$LINUXSRC/net/inet/$FILE\"" >/usr/include/netinet/$FILE
299 echo "#include <linux/$FILE>" > /usr/include/netinet/$FILE
301 chown 0:0 /usr/include/netinet/$FILE
303 chmod 444 /usr/include/netinet/$FILE
305 touch /usr/include/netinet/$FILE
312 echo "Kernel driver files installation done."