Difference between revisions of "Kernel build"
m (change example based on 2.6.18-028test015.1) |
(get rid of <pre> tags -- use indentation instead) |
||
Line 7: | Line 7: | ||
'''Note''': some of the paths below include $TOPDIR, which is distribution-dependent and can be further redefined by user. To find out the proper location on your system, issue this command: | '''Note''': some of the paths below include $TOPDIR, which is distribution-dependent and can be further redefined by user. To find out the proper location on your system, issue this command: | ||
− | + | rpm --eval "%{_topdir}" | |
=== Download === | === Download === | ||
Line 14: | Line 14: | ||
=== Installation === | === Installation === | ||
Install the downloaded SRC RPM with the following command: | Install the downloaded SRC RPM with the following command: | ||
− | + | ||
− | # rpm -ihv ovzkernel-2.6.18-028test015.1.src.rpm | + | # rpm -ihv ovzkernel-2.6.18-028test015.1.src.rpm |
− | |||
After successfull installation, you can usually find kernel sources in <code>$TOPDIR/SOURCES/</code> | After successfull installation, you can usually find kernel sources in <code>$TOPDIR/SOURCES/</code> | ||
Line 25: | Line 24: | ||
Put your patch into SOURCES directory with the following command: | Put your patch into SOURCES directory with the following command: | ||
− | + | ||
− | # cp <patch> $TOPDIR/SOURCES/ | + | # cp <patch> $TOPDIR/SOURCES/ |
− | |||
Then open spec file <code>$TOPDIR/SPECS/kernel-ovz.spec</code> in the editor and add the following lines: | Then open spec file <code>$TOPDIR/SPECS/kernel-ovz.spec</code> in the editor and add the following lines: | ||
− | + | ||
− | Patch100000: <patch-name> | + | Patch100000: <patch-name> |
− | + | ||
and | and | ||
− | + | ||
− | %patch100000 -p1 | + | %patch100000 -p1 |
− | + | ||
in appropriate places where similar text lines are. | in appropriate places where similar text lines are. | ||
Line 43: | Line 41: | ||
This will help you to distinguish binaries then from already existing kernels | This will help you to distinguish binaries then from already existing kernels | ||
(or from the official OpenVZ kernels). To do so, edit the <code>$TOPDIR/SPECS/kernel-ovz.spec</code> file and replace the following line: | (or from the official OpenVZ kernels). To do so, edit the <code>$TOPDIR/SPECS/kernel-ovz.spec</code> file and replace the following line: | ||
− | + | ||
− | %define ksubrelease 1 | + | %define ksubrelease 1 |
− | + | ||
with something like | with something like | ||
− | + | ||
− | %define ksubrelease 1my.kernel.v1 | + | %define ksubrelease 1my.kernel.v1 |
− | |||
=== Modifying configs === | === Modifying configs === | ||
If you want to modify the kernel config, you need to do the following before you continue with the next step "Building RPMs". | If you want to modify the kernel config, you need to do the following before you continue with the next step "Building RPMs". | ||
− | + | ||
− | # cd $TOPDIR/SPECS | + | # cd $TOPDIR/SPECS |
− | # rpmbuild -bp kernel-ovz.spec | + | # rpmbuild -bp kernel-ovz.spec |
− | # cd $TOPDIR/BUILD/kernel-2.6.18/linux-2.6.18 | + | # cd $TOPDIR/BUILD/kernel-2.6.18/linux-2.6.18 |
− | + | ||
There you will find the configuration files in the subdirectory <code>config/*.config</code>. Copy the one you want to modifiy to <code>$TOPDIR/BUILD/kernel-2.6.18/linux-2.6.18/.config</code>. Then you can do a make menuconfig or something similar to adjust the kernel configuration. Afterwards copy | There you will find the configuration files in the subdirectory <code>config/*.config</code>. Copy the one you want to modifiy to <code>$TOPDIR/BUILD/kernel-2.6.18/linux-2.6.18/.config</code>. Then you can do a make menuconfig or something similar to adjust the kernel configuration. Afterwards copy | ||
<code>$TOPDIR/BUILD/kernel-2.6.18/linux-2.6.18/.config</code> to the <code>$TOPDIR/SOURCES</code> directory, but use the corresponding file name in the target directory. | <code>$TOPDIR/BUILD/kernel-2.6.18/linux-2.6.18/.config</code> to the <code>$TOPDIR/SOURCES</code> directory, but use the corresponding file name in the target directory. | ||
Line 64: | Line 61: | ||
=== Building RPMs === | === Building RPMs === | ||
To rebuild the kernel, type the following commands: | To rebuild the kernel, type the following commands: | ||
− | + | ||
− | # cd $TOPDIR/SPECS | + | # cd $TOPDIR/SPECS |
− | # rpmbuild -ba --target=i686 kernel-ovz.spec | + | # rpmbuild -ba --target=i686 kernel-ovz.spec |
− | |||
After successfull kernel compilation binary RPMs can be found at <code>$TOPDIR/RPMS/i686</code>. | After successfull kernel compilation binary RPMs can be found at <code>$TOPDIR/RPMS/i686</code>. | ||
Line 85: | Line 81: | ||
=== Building === | === Building === | ||
First, extract the kernel sources from archive: | First, extract the kernel sources from archive: | ||
− | + | ||
− | # tar vjxf linux-2.6.18.tar.bz2 | + | # tar vjxf linux-2.6.18.tar.bz2 |
− | # cd linux-2.6.18 | + | # cd linux-2.6.18 |
− | |||
Apply OpenVZ patches to the kernel: | Apply OpenVZ patches to the kernel: | ||
− | + | ||
− | # gzip -dc patch-ovz028test015.1-combined.gz | patch -p1 | + | # gzip -dc patch-ovz028test015.1-combined.gz | patch -p1 |
− | |||
Now we need to place the config and build the kernel: | Now we need to place the config and build the kernel: | ||
− | + | ||
− | # cp kernel-2.6.18-i686-smp.config.ovz .config | + | # cp kernel-2.6.18-i686-smp.config.ovz .config |
− | # make oldconfig | + | # make oldconfig |
− | # make | + | # make |
− | # make modules | + | # make modules |
− | |||
=== Installation === | === Installation === | ||
− | After | + | After a successful build of the kernel it can be installed on the machine with the following commands run under '''root''' user: |
− | + | ||
− | # make install | + | # make install |
− | # make modules_install | + | # make modules_install |
− | |||
Also you need to edit your GRUB or LILO config to make your kernel available for boot. | Also you need to edit your GRUB or LILO config to make your kernel available for boot. |
Revision as of 23:31, 19 February 2007
This FAQ will help you in case you want to apply some patches to the kernel on your own or rebuild it from sources. On RPM based distros such as RedHat Enterprise Linux/CentOS, Fedora Core or SUSE one can simpy rebuild kernel from SRPM. For other distros it is required to install sources, build and install kernel manually. The below are given the details for both cases.
Contents
Rebuilding kernel from SRPM
Note: some of the paths below include $TOPDIR, which is distribution-dependent and can be further redefined by user. To find out the proper location on your system, issue this command:
rpm --eval "%{_topdir}"
Download
Source RPMS for different OpenVZ kernel branches can be downloaded from http://openvz.org/download/kernel/. You can also access http://download.openvz.org/kernel/ directly, or use one of the mirrors.
Installation
Install the downloaded SRC RPM with the following command:
# rpm -ihv ovzkernel-2.6.18-028test015.1.src.rpm
After successfull installation, you can usually find kernel sources in $TOPDIR/SOURCES/
and kernel spec file (kernel-ovz.spec
) in $TOPDIR/SPECS
.
Adding your own patches
To modify the kernel one needs just to add specific patches to the kernel spec file and put this patch into $TOPDIR/SOURCES
directory.
Put your patch into SOURCES directory with the following command:
# cp <patch> $TOPDIR/SOURCES/
Then open spec file $TOPDIR/SPECS/kernel-ovz.spec
in the editor and add the following lines:
Patch100000: <patch-name>
and
%patch100000 -p1
in appropriate places where similar text lines are.
Adjust kernel version
Before rebuilding the kernel make sure that you adjusted the kernel version in kernel-ovz.spec
.
This will help you to distinguish binaries then from already existing kernels
(or from the official OpenVZ kernels). To do so, edit the $TOPDIR/SPECS/kernel-ovz.spec
file and replace the following line:
%define ksubrelease 1
with something like
%define ksubrelease 1my.kernel.v1
Modifying configs
If you want to modify the kernel config, you need to do the following before you continue with the next step "Building RPMs".
# cd $TOPDIR/SPECS # rpmbuild -bp kernel-ovz.spec # cd $TOPDIR/BUILD/kernel-2.6.18/linux-2.6.18
There you will find the configuration files in the subdirectory config/*.config
. Copy the one you want to modifiy to $TOPDIR/BUILD/kernel-2.6.18/linux-2.6.18/.config
. Then you can do a make menuconfig or something similar to adjust the kernel configuration. Afterwards copy
$TOPDIR/BUILD/kernel-2.6.18/linux-2.6.18/.config
to the $TOPDIR/SOURCES
directory, but use the corresponding file name in the target directory.
Some background information on this procedure can be found in the following thread: http://www.arcknowledge.com/gmane.comp.audio.planetccrma.general/2004-11/msg00018.html
Building RPMs
To rebuild the kernel, type the following commands:
# cd $TOPDIR/SPECS # rpmbuild -ba --target=i686 kernel-ovz.spec
After successfull kernel compilation binary RPMs can be found at $TOPDIR/RPMS/i686
.
Rebuilding kernel from sources
Download
To compile OpenVZ linux kernel one need to download the original linux kernel sources and OpenVZ patches for it.
Linux kernel can be found at kernel.org, e.g. 2.6.18 kernel can be downloaded from linux-2.6.18.tar.bz2.
Appropriate OpenVZ patches for this kernel version can be found at http://openvz.org/download/kernel/<version>/patches/. For example, at the moment there is a patch patch-ovz028test015.1-combined.gz available.
Kernel configs are also available at OpenVZ download site. Most frequently SMP config is used, so let's download kernel-2.6.18-i686-smp.config.ovz for this example.
Building
First, extract the kernel sources from archive:
# tar vjxf linux-2.6.18.tar.bz2 # cd linux-2.6.18
Apply OpenVZ patches to the kernel:
# gzip -dc patch-ovz028test015.1-combined.gz | patch -p1
Now we need to place the config and build the kernel:
# cp kernel-2.6.18-i686-smp.config.ovz .config # make oldconfig # make # make modules
Installation
After a successful build of the kernel it can be installed on the machine with the following commands run under root user:
# make install # make modules_install
Also you need to edit your GRUB or LILO config to make your kernel available for boot.