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 1.2.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 1.2.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
84 # convenience function to exit if the last command failed
86 function bombiffailed () {
88 if [ $STATUS -ne 0 ]; then
89 echo "=== kinstall.sh exiting with failure status $STATUS"
95 # convenience function to compare two files marked with ==FILEVERSION
96 # version numbers; returns success if $1 is newer than $2
99 if [ -r $1 ] && f1rev=`fgrep "==FILEVERSION " $1 | sed 's/[^0-9]//g'`; then
100 if [ -r $2 ] && f2rev=`fgrep "==FILEVERSION " $2 | sed 's/[^0-9]//g'`; then
101 if [ "$f1rev" != "" ]; then
102 # return true if f2rev is empty or f1rev => f2rev
103 [ "$f2rev" = "" ] || [ $f1rev -ge $f2rev ]
105 # f1rev is empty, so false
109 true # no FILEVERSION in $2, so $1 is newer
112 false # no FILEVERSION in $1, so not newer
117 # Change the USE_SKB_PROTOCOL for correct operation on 1.3.x
118 function update_ppp () {
119 mv $LINUXSRC/drivers/net/ppp.c $LINUXSRC/drivers/net/ppp.c.in
120 if [ "$VERSION.$PATCHLEVEL" = "1.3" ]; then
121 sed 's/#define USE_SKB_PROTOCOL 0/#define USE_SKB_PROTOCOL 1/' <$LINUXSRC/drivers/net/ppp.c.in >$LINUXSRC/drivers/net/ppp.c
123 sed 's/#define USE_SKB_PROTOCOL 1/#define USE_SKB_PROTOCOL 0/' <$LINUXSRC/drivers/net/ppp.c.in >$LINUXSRC/drivers/net/ppp.c
125 rm $LINUXSRC/drivers/net/ppp.c.in
131 function installfile () {
133 if newer $1 $BASE; then
134 echo $1 is newer than $BASE, skipping
137 BACKUP=`echo $1 | sed 's/.c$/.old.c/;s/.h$/.old.h/'`
138 if [ -f $1 -a $BACKUP != $1 ]; then
139 echo Saving old $1 as `basename $BACKUP`
143 echo Installing new $1
148 if [ "$2" = "yes" ]; then
153 if [ -f $LINUXSRC/drivers/net/ppp.h ]; then
154 echo Moving old $LINUXSRC/drivers/net/ppp.h file out of the way
155 mv $LINUXSRC/drivers/net/ppp.h $LINUXSRC/drivers/net/ppp.old.h
159 for FILE in $LINUXSRC/drivers/net/bsd_comp.c \
160 $LINUXSRC/include/linux/if_ppp.h \
161 $LINUXSRC/include/linux/if_pppvar.h \
162 $LINUXSRC/include/linux/ppp-comp.h \
163 $LINUXSRC/include/linux/ppp_defs.h
168 installfile $LINUXSRC/drivers/net/ppp.c yes
170 for FILE in if.h if_arp.h route.h
172 if [ ! -f $LINUXSRC/include/linux/$FILE ]; then
173 echo Installing new $1
174 cp $FILE $LINUXSRC/include/linux/$FILE
176 touch $LINUXSRC/include/linux/$FILE
181 echo -n 'Adding BSD compression module to drivers makefile...'
182 NETMK=$LINUXSRC/drivers/net/Makefile
183 fgrep bsd_comp.o $NETMK >/dev/null
184 if [ ! "$?" = "0" ]; then
186 rm -f $NETMK.orig $NETMK.rej
187 if [ "$VERSION.$PATCHLEVEL" = "1.2" ]; then
188 (cd $LINUXSRC; patch -p1 -f -F30 -s) <patch-1.2
189 if [ ! "$?" = "0" ]; then
193 if [ "$VERSION.$PATCHLEVEL" = "1.3" ]; then
194 (cd $LINUXSRC; patch -p1 -f -F30 -s) <patch-1.3
195 if [ ! "$?" = "0" ]; then
203 if [ -e $NETMK.rej ]; then
205 if [ -e $NETMK.orig ]; then
206 mv $NETMK.orig $NETMK
208 sed 's/ppp.o$/ppp.o bsd_comp.o/g' <$NETMK >$NETMK.temp
211 mv $NETMK $NETMK.orig
214 mv $NETMK.temp $NETMK
218 if [ -e $NETMK.orig ]; then
219 mv $NETMK.orig $NETMK.old
222 echo -n '(already there--skipping)'
227 # install header stub files in /usr/include/net
229 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
253 if [ ! -f /usr/include/netinet/$FILE ]; then
254 echo Installing stub include file in /usr/include/netinet/$FILE
255 if [ ! -f $LINUXSRC/include/linux/$FILE ]; then
256 echo "#include \"$LINUXSRC/net/inet/$FILE\"" >/usr/include/netinet/$FILE
258 echo "#include <linux/$FILE>" > /usr/include/netinet/$FILE
260 chown 0:0 /usr/include/netinet/$FILE
262 chmod 444 /usr/include/netinet/$FILE
264 touch /usr/include/netinet/$FILE
269 echo "Kernel driver files installation done."