All Linux vendors have their own ways and requirements to get a framework in place to build a custom kernel, and Owl is no different, though you may actually find it easier doing it “the Owl way” compared to other distributions.
In the instructions below, it is assumed that you are already on Owl and that you have the default set of packages installed.
Prepare the /usr/src/world
setup as described in Owl/doc/BUILD, such as by following the download instructions found on the Owl upgrade page (including the otherwise-optional sources
download step) or by copying /rom/world
from an Owl CD. Depending on the approach you used, you may need to extract the native tree from its tarball:
su - build rm -rf native tar xzf native.tar.gz
or maybe extract just the packages
sub-tree (it's currently included as a tarball on our x86-64 CDs):
su - build cd native/Owl tar xjf packages.tar.bz2
This can be as simple as:
su - build nice -n19 make PACKAGE=kernel
You will get the kernel*.rpm binary packages under RPMS/
and a build log under logs/kernel
.
However, there's little point in you rebuilding the kernel without any changes (you could as well download and use the Owl pre-built kernel RPMs). If you want to make changes, please look inside the native/Owl/packages/kernel/
directory, which contains files like:
-rw------- 1 build sources 41628 Mar 12 18:56 dot-config-i686 -rw------- 1 build sources 37947 Mar 12 18:56 dot-config-x86_64 -rw------- 1 build sources 12704 Mar 27 14:39 kernel.spec -rw------- 1 build sources 65941 Mar 27 14:39 linux-2.6.18-238.5.1.el5.028stab085.2-owl.diff
It is sensible to make minor edits to dot-config-i686
and/or dot-config-x86_64
, but please be sure to also adjust the package revision number by editing EXTRAVERSION
in the *-owl.diff
patch file and Release
in kernel.spec
(these must be kept in sync, or the build will fail with File not found: /usr/src/world/rpm-work-1/buildroot/lib/modules/2.6.18-…
errors). For example, you might change EXTRAVERSION
from -238.5.1.el5.028stab085.2.owl3
to -238.5.1.el5.028stab085.2.owl3.local1
and Release
from %ovzversion.owl3
to %ovzversion.owl3.local1
(instead of local
, you may use your nickname or your network/company/project name). This is to avoid confusion with Owl official kernel revisions and to allow you to install your RPMs alongside the official ones.
For non-trivial kernel configuration changes (or just to be safe), you may prefer to do a non-RPM'ed kernel build (then either actually use the resulting kernel or just roll your build-tested changes back into the native tree for building an RPM package).
The Owl upgrade wiki page includes instructions on how to install the kernel RPMs.
Here's a sample sequence of shell commands. Indeed, the version numbers embedded in filenames will likely be different.
su - build mkdir kernel; cd kernel # optional tar xJf ~/sources/Owl/packages/kernel/linux-2.6.18.tar.xz cd linux-2.6.18 xzcat ~/sources/Owl/packages/kernel/patch-238.1.1.el5.028stab083.1-combined.xz | patch -p1 -T patch -p1 -Z < ~/native/Owl/packages/kernel/linux-2.6.18-238.5.1.el5.028stab085.2-owl.diff cp ~/native/Owl/packages/kernel/dot-config-i686 .config # or use dot-config-x86_64 when you're on x86-64 make oldconfig nice -n19 make -j8 # adjust the ''-j'' option parameter to match the number of logical CPUs for the build to run faster
This will build both the kernel image and modules. To build these separately, use make -j8 bzImage
and/or make -j8 modules
.
To make kernel configuration changes (before the actual kernel build, indeed), use make menuconfig
. To avoid confusion with Owl official kernel revisions, either set CONFIG_LOCALVERSION
(in make menuconfig
, this is “Local version - append to kernel release” under “General setup”) or edit EXTRAVERSION
in the Makefile
(do this before you configure the kernel for the first time!)
To install the resulting kernel, copy boot/i386/bzImage
(or boot/x86_64/bzImage
) and System.map
to under /boot
, preferably renaming these files to include the kernel version number - e.g., call them vmlinuz-2.6.18-238.5.1.el5.028stab085.2.owl3.local1
and System.map-238.5.1.el5.028stab085.2.owl3.local1
. 1) To install modules, use make modules_install
as root
(beware: if you did not add a LOCALVERSION or change EXTRAVERSION, then this may replace the installed modules from your kernel RPM package, which is bad). Then update the bootloader configuration and reboot the system as described below.
Edit your LILO bootloader configuration file (add a new section for the new kernel image) and make your changes take effect:
vi /etc/lilo.conf lilo
Please refer to:
Pre- and post-reboot actions/checklist for remote Linux servers