Debian-Kernel-Compile-Howto  

<< HOWTO-Index

  NEW! Visit my Linux forums!

  This Howto is also available on HowtoForge! If you have also written tutorials, you can publish them there.

Subscribe to FalkoTimme.com Newsletter
and stay informed about my latest HOWTOs and projects.
Email
(If you want to unsubscribe from our newsletter, visit this link.)

Debian-Kernel-Compile-Howto (Kernel 2.6)

Version 1.1
Author: Falko Timme <ft [at] falkotimme [dot] com>
Last edited 07/15/2005

In some cases you might want to compile your own kernel that suits your needs better than the standard kernel that comes with your distribution. I will describe how to do this on a Debian Woody machine (a description for Debian Sarge can be found here!). Please note that this tutorial is for kernel 2.6 only! A tutorial for kernel 2.4 can be found here.

Be aware that there is some risk in doing so! For example, it could happen that your machine does not boot properly after you have installed the new kernel so you might be forced to boot from a rescue CD to repair your system. You have been warned! This document comes without warranty of any kind!

 

Kernel-Compile-Howto

First login to your Debian machine on the command line as root. Install the prerequisites that we need to compile the new kernel:

apt-get install kernel-package ncurses-dev fakeroot wget bzip2

Then go to /usr/src:

cd /usr/src

Then get the latest Linux kernel source (or the kernel source you need) from http://www.kernel.org/pub/linux/kernel/v2.6/:

wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.1.tar.bz2

Unpack the kernel sources:

tar xjf linux-2.6.8.1.tar.bz2

cd linux-2.6.8.1/

It is normally a good idea to take the configuration of your existing (working!) kernel 2.6 as a starting point for the configuration of your new kernel. Usually the current kernel configuration is saved in a file under /boot, e.g. /boot/config-2.6.3. We will load this configuration and then do the changes we desire. If you do not have the config file of a working kernel 2.6 this one might help you.

make menuconfig

Select Load an Alternate Configuration File and enter the location of the configuration file of your current kernel (or upload my kernel configuration to your machine and enter its path):

The configuration of your current kernel will be loaded, and you can now browse through the menu and change the configuration to suit your needs. When you are finished, save your new kernel configuration:

Then run the following commands (please note that make dep is not needed any more for kernel 2.6):

make-kpkg clean
fakeroot make-kpkg --revision=custom.1.0 kernel_image

If the compilation stops with an error, run

make clean

and then re-run the previous commands starting with

make menuconfig

Change the kernel configuration where the error occurs. If no error occurs you will find the new kernel as a Debian package called kernel-image-2.6.8.1_custom.1.0_i386.deb under /usr/src.

cd ../

Now you have to install some packages that are needed by kernel 2.6. Add the following line to /etc/apt/sources.list:

deb http://www.backports.org/debian/ woody module-init-tools initrd-tools procps

Then run:

apt-get update
apt-get install module-init-tools initrd-tools procps

If you are asked the following question:

"If you really want to remove modutils type 'yes':"

type yes.

It might also be necessary to update packages like bind9, quota, etc. - depending on your configuration. If you have problems with your existing packages try to get the appropriate package from www.backports.org.

Install your new kernel:

dpkg -i kernel-image-2.6.8.1_custom.1.0_i386.deb

Create a ramdisk of your new kernel (otherwise your system will most likely not boot):

cd /boot/
mkinitrd -o /boot/initrd.img-2.6.8.1 2.6.8.1

We are almost finished now. Edit the image=/vmlinuz stanza of your /etc/lilo.conf and add the line initrd=/boot/initrd.img-2.6.8.1:

# Boot up Linux by default.
#
default=Linux

image=/vmlinuz
        label=Linux
        read-only
        initrd=/boot/initrd.img-2.6.8.1
#        restricted
#        alias=1

Run

lilo

to update your boot loader and reboot your machine:

shutdown -r now

and if everything is ok your machine should come up with the new kernel. You can run

uname -a

to verify that. Good luck!

 

Update:

This is an excerpt from an email that R (Chandra) Chandrasekhar (thanks a lot for this one!) sent to me regarding the kernel configuration in case you use flash drives and nVidia cards:

"1. If you intend to use flash drives, de-select the following during <make xconfig>:

Block Devices -> Low Performance USB Block driver (BLK_DEV_UB)

There is a clear explanation at http://linux.usc.edu/pipermail/usclug-chat/2004-December/000111.html and at http://dev.gentoo.org/~dsd/gentoo-dev-sources/issues-current.htm#2.6.9-ub on why this is advisable until further development of the ub module.

I had to

apt-get install udev hotplug

to use the flash drive, but it worked like a charm after that!

2. If you have an nVidia card, de-select the following during <make xconfig>:

Graphics Support -> nVidia Riva support (FB_RIVA)

Kernel Hacking -> Use 4Kb for kernel stacks instead of 8Kb (4KSTACKS)

Processor Type and Features -> Local APIC support on uniprocessors (X86_UP_APIC)

To install the nVidia drivers, I followed the HOWTO at http://home.comcast.net/~andrex/Debian-nVidia/index.html and compiled the drivers from the Debian packages after applying the vmalloc_reserve.patch during kernel build."

Finally, beginners to web hosting can find useful resources such as this article comparing windows to unix hosting at cheapwebhostingseller.com.

 

  NEW! Visit my Linux forums!

  This Howto is also available on HowtoForge! If you have also written tutorials, you can publish them there.

If you find this page useful you can acknowledge your gratitude by making a donation (through PayPal):

<< HOWTO-Index

 
Copyright 2014, Falko Timme. All rights reserved.
     Home  |  News  |  HOWTOs  |  Projects  |  Forums  |  Support  |  About Me   |  Contact Information  |  Site Map