This is probally oversimplified and incorrect on one level or another, but
this list is open discussion, so these comments may be freely modified and
what have you. 

The Linux kernel is a part of your Linux OS, I'd say you wouldn't have an OS
with out it, but the kernel by itself is not the OS. From the kernel you get
support for you hardware (drivers for your ethernet, modems, printer ports,
agp, scsi, hard disks, filesystems, etc...), but without tools like cp,
mount, mkfs, fsck, etc, the kernel is pretty worthless. (from the end-user
perspective anyway.)

In the case of Linux the OS itself is pretty basic. Consider a complete
Linux OS to be something containing all the tools you need to boot, login
to, and install software. For the sake of argument, this is a pretty useless
system. (Compare it to a plain DOS install.) So, all you have is the kernel,
a handful of admin tools, a shell, package management tools (apt, dpkg,
rpm), probally perl, and a small editor. (nvi, elvis, ae). 

At this point there is nothing really useful, but you are to the point where
you can install the real useful stuff like XFree86, development tools,
GNOME, etc.

This kind of seperation is good and bad. Good in that it makes Linux very
flexible. It's easy to get a headless webserver or a X-based workstation
from this point. (Most users won't actually see just this as various
distribution installers tend to hide this from the user, more on distros
later...) Bad in that it may just scare the new user who, *GASP* have never
used a command line only os. But hey, I'm all for scaring users. Break the
mold, not every system has to have a pretty face. 

So there you have a very ruff definition of the Linux Operating System.

Now we move on to a Linux Distribution. Distro War all you want, but what a
Distribution boils down to is Linux OS bundled with all the software you
could ever want and then some. (Well, I'm sure you'll find some excetions.)
Software including dev tools, webservers, Xservers, Xclients, etc. Each
distribution has different ways of installing, package managment,
administration, and what have you. Some things are common, some things
should be more common across Linux distributions (See Linux Standards Base,
a totally seperate rant. :)

So now we've got a ruff idea of what we're dealing with. So, why is it that
we have to compile this kernel thing and how do we go about doing so? Well,
quite often you don't have to compile the kernel. Your distribution
prepackages pre-compiled kernels that have just about every option turned on
(or at least compiled as modules) so you should have a rather functional
kernel out of the box. 

Some situations call for a new kernel to be compiled. New versions of the
kernel support new hardware, and other new features such as ReiserFS. And
then theres the geekish drive to run the latest and greatest, so we compile
a new kernel! 

The first thing to do is to get your kernel source code from
ftp.us.kernel.org (or a mirror). The latest kernel is 2.4.1. Most people are
probally still running on a 2.2 series kernel. (For most a 2.2 series kernel
is just dandy anyway.) You'll want to get 2.2.18 unless there is something
preventing you from going to this kernel (RedHat + Dell often ship biniary
only drivers for Adaptec RAID cards. Other hardware vendors may only support
certin versions of the kernel, other stuff like that.) 

So you have your kernel source, the next step is to extract it. The debate
as to where has been going on for some time now, and I've mentioned this in
the past. Linus says that the kernel source should be extracted to a users
home directory and compiled there as a normal user and should be installed
by root. (For fear of overwriting the header glibc was compiled agnist.)
Most distributions put these headers in /usr/lib/include, and thus
invalidating the /usr/src/ arguement. In most cases, it is safe to extract
and compile kernel source in /usr/src. Doing it as a normal user or as root
is a matter of personal preference. I usually use fakeroot (as a normal
user) to build a Debianized kernel package, and install said package as
root. In the end, the easiest way is to just logon as root and do it.

So your sitting in /usr/src/linux
Now what? Well, go with these two options.
make menuconfig or make xconfig
Use menuconfig to use the curses based kernel configuration. xconfig will
throw you into the xbased configuration, but if you don't have a good grasp
of how X works you probally want to stick with the curses based config.
(Some distributions prevent root from logging in via XDM/KDM/GDM.) Here
again the root/non-root arguement comes into play. Well, get your kernel
configured. In X, you will probally see a bunch of ? buttons leading to
"help." In the curses config, hit the ? key to bring up the help. Not all
paramaters are documented however. 

So you've configured your kernel source. Time to compile. I belive the
correct sequence is make dep && make clean && make bzImage && make modules
&& make modules_install
This process compiles the C source code into a biniary kernel. This would be
the actual compilation process. The rest is configuration and installation.

I perfer to use Debian's make-kpkg. Again, this is my personal preference,
but it's kinda nice to lump all of the above into one command. 

You should also backup your current kernel by moving it to a new location.
(mv /boot/vmlinuz-2.2.14 /boot/vmlinuz-2.2.14.old or something.) Usually the
/vmlinuz and /vmlinuz.old files are sym links to files under /boot. Lilo
usually references the /vmlinuz file however. (I perfer to reference
/boot/vmlinuz-version in lilo.conf and remove the /vmlinuz* sym links on /) 

A basic lilo.conf entry may look something like this:
image=/boot/vmlinuz-2.2.18
    label=2.2.18

(Perhaps you will have other options such as the root device. I don't, I
have stuff like that defined on a global basis instead of a per-kernel
basis.) 

After editing and saving lilo.conf, run lilo as root. Now the moment of
truth is opon you. Will your system boot on the new kernel? Cross your
fingers and give your box the three fingure salute. (Do both at the same
time for bonus points.)

Well, hopefully that cleared some things up. Maybe it added to the
confusion. Maybe parts were just plain wrong. Feel free to add to the
discussion. :)

--
Andy Zbikowski, Sys Admin   | (WEB) http://www.ltiflex.com
LTI Flexible Products, Inc. | (PH)  763-428-9119 (EX) 132
21801 Industrial Blvd       | (FX)  763-428-9126
Rogers, MN  55374           | (PCS) 612-306-6055
-------------- next part --------------
A non-text attachment was scrubbed...
Name: andyzb.vcf
Type: text/x-vcard
Size: 367 bytes
Desc: Card for Andy Zbikowski
Url : http://shadowknight.real-time.com/pipermail/tclug-list/attachments/20010212/a05e6d78/andyzb.vcf