I'm always booting into versions of the kernel which don't match the version of the kernel in /usr/src/linux. This gives me the warning (eg when running `ps`)
Warning: /usr/src/linux/System.map has an incorrect kernel version.
As well, my version of ipvsadm doesn't work anymore (and will probably tell me that I don't have ipvsadm installed when I do).
My /usr/src directory has entries like
linux-1.0.3-2.2.18-TP
for the 2.2.18 kernel with the 1.0.3 ipvs patch applied and built with transparent proxy. I link this to linux-2.2.18
My /sbin director has ipvsadm-2.2.18 and ipvsadm-2.4.1 (ipvsadm versions match ipvs versions and not kernel versions, but it's close enough to kernel versions that labelling them by kernel versions works).
At bootup I run this script to get the right versions of these files.
#always have the right System.map, ipvsadm... #no matter which kernel version you're running #Joseph Mack (C) 2001 released under GPL, jmack@wm7d.net, #To use: #for files/directories which are kernel version specific. # #eg you'll get error messages about System.map being the wrong version unless #you have /usr/src/linux linked to the same version of linux as you booted from. #eg in /sbin: ipvsadm-2.4.1, ipvsadm-2.2.18 which is called as /sbin/ipvsadm # #in main you send a list of directories/files like /usr/src/linux/, /sbin/ipvsadm #for each item in this list, this program will #a. delete /usr/src/linux if linux is a link, otherwise do nothing if linux is a file #b. look for linux-x.x.x where x.x.x is the kernel version #c. ln -s linux-x.x.x linux, else issue notice if there is no linux-x.x.x # #--------------------- ip_vs(){ #IPVS_VERSION is assigned the version number of IPVS currently loaded if [ "$LINUX_KERNEL_SERIES" = "2.2" ] then IPVS_VERSION=`grep "IP Virtual Server version" /proc/net/ip_vs | awk '{print \$5}'` echo $IPVS_VERSION elif [ "$LINUX_KERNEL_SERIES" = "2.4" ] then IPVS_VERSION=`grep "IP Virtual Server version" /proc/net/ip_vs | awk '{print \$5}'` echo $IPVS_VERSION else echo "Error: kernel $UNAME_R not from 2.2 or 2.4 series" exit -1 fi } make_link(){ BASENAME=`/usr/bin/basename $1` #echo "BASENAME $BASENAME" cd `/usr/bin/dirname $1` #if $BASENAME a link or doesn't exist if [ -L $BASENAME -o ! \( -e $BASENAME \) ] then #only do something if we have a target if [ -d $BASENAME-${UNAME_R}-${IPVS_VERSION} -o -f $BASENAME-${UNAME_R}-${IPVS_VERSION} ] then if [ -L $BASENAME ] #if the filename is a link, delete it then /bin/rm $BASENAME fi #there is no $BASENAME now. /bin/ln -s $BASENAME-${UNAME_R}-${IPVS_VERSION} $BASENAME elif [ -d $BASENAME-${IPVS_VERSION}-${UNAME_R} -o -f $BASENAME-${IPVS_VERSION}-${UNAME_R} ] then if [ -L $BASENAME ] #if the filename is a link, delete it then /bin/rm $BASENAME fi #there is no $BASENAME now. /bin/ln -s $BASENAME-${IPVS_VERSION}-${UNAME_R} $BASENAME elif [ -d $BASENAME-${IPVS_VERSION} -o -f $BASENAME-${IPVS_VERSION} ] then if [ -L $BASENAME ] #if the filename is a link, delete it then /bin/rm $BASENAME fi #there is no $BASENAME now. /bin/ln -s $BASENAME-${IPVS_VERSION} $BASENAME elif [ -d $BASENAME-${UNAME_R} -o -f $BASENAME-${UNAME_R} ] then if [ -L $BASENAME ] #if the filename is a link, delete it then /bin/rm $BASENAME fi #there is no $BASENAME now. /bin/ln -s $BASENAME-${UNAME_R} $BASENAME else echo "no $BASENAME-${UNAME_R} or $BASENAME-${IPVS_VERSION} to link to" fi else echo "cannot delete $BASENAME, doesn't exist or is a regular file" fi cd - } #----------------- #main: echo "rc.system_map " UNAME_R=`/bin/uname -r` LINUX_KERNEL_SERIES=${UNAME_R%.*} ip_vs if [ $? != "0" ] then echo "Error: unable to determine IPVS version" exit -1 fi make_link /usr/src/linux make_link /sbin/ipvsadm make_link /sbin/ipvsadm-save make_link /sbin/ipvsadm-restore make_link /usr/src/ipvs #make_link /bin/foo #a test, foo-x.x.x doesn't exist #-----------------
Note:klogd is supposed to read files like /boot/System.map-<kernel_version> allowing you to have several kernels in /. However this doesn't solve the problem for general executables.
I needed a ramdisk for testing once and couldn't find the instructions for setting it up. Here they are
From: Jerry Glomph Black black@real.com
You specify the ramdisk size when you load the rd module, as an option.
/sbin/insmod rd rd_size=32768 /sbin/mke2fs -m0 /dev/ram0 mount -t ext2 /dev/ram0 /mnt
cscope is a code symbol navigating tool.
from Patrick O'Rourke, orourke@missioncriticallinux.com
A cscope for Linux is at http://sourceforge.net/projects/cscope/