Editing Kernel build

Jump to: navigation, search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 1: Line 1:
 
<translate>
 
<translate>
<!--T:1-->
 
 
This FAQ will help you in case you want to apply some patches to the kernel on your own or rebuild it from sources.
 
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.
 
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.
 
For other distros it is required to install sources, build and install kernel manually. The below are given the details for both cases.
  
== Rebuilding kernel from SRPM == <!--T:2-->
+
== Rebuilding kernel from SRPM ==
  
=== Find out $TOPDIR === <!--T:3-->
+
=== Find out $TOPDIR ===
 
'''Note''': paths in some of the commands below include $TOPDIR, which is distribution-dependent and can be further redefined by user. To find out the proper location of $TOPDIR on your system, issue this command:
 
'''Note''': paths in some of the commands below include $TOPDIR, which is distribution-dependent and can be further redefined by user. To find out the proper location of $TOPDIR on your system, issue this command:
  
  <!--T:4-->
+
  TOPDIR=$(rpm --eval "%{_topdir}"); echo $TOPDIR
TOPDIR=$(rpm --eval "%{_topdir}"); echo $TOPDIR
 
  
=== Download === <!--T:5-->
+
=== 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 [[download mirrors|mirrors]].
 
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 [[download mirrors|mirrors]].
  
=== Installation === <!--T:6-->
+
=== Installation ===
 
Install the downloaded SRC RPM with the following command:
 
Install the downloaded SRC RPM with the following command:
  
  <!--T:7-->
+
  # rpm -ihv ovzkernel-{{kver}}-{{krel}}.src.rpm
# rpm -ihv ovzkernel-{{kver}}-{{krel}}.src.rpm
 
  
<!--T:8-->
 
 
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>
 
and kernel spec file (<code>kernel-ovz.spec</code>) in <code>$TOPDIR/SPECS</code>.
 
and kernel spec file (<code>kernel-ovz.spec</code>) in <code>$TOPDIR/SPECS</code>.
  
=== Adding your own patches === <!--T:9-->
+
=== 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 <code>$TOPDIR/SOURCES</code> directory.
 
To modify the kernel one needs just to add specific patches to the kernel spec file and put this patch into <code>$TOPDIR/SOURCES</code> directory.
  
<!--T:10-->
 
 
Put your patch into SOURCES directory with the following command:
 
Put your patch into SOURCES directory with the following command:
  
  <!--T:11-->
+
  # cp <patch> $TOPDIR/SOURCES/
# cp <patch> $TOPDIR/SOURCES/
 
  
<!--T:12-->
 
 
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:
  
  <!--T:13-->
+
  Patch100000: <patch-name>
Patch100000: <patch-name>
 
  
<!--T:14-->
 
 
and
 
and
  
  <!--T:15-->
+
  %patch100000 -p1
%patch100000 -p1
 
  
<!--T:16-->
 
 
in appropriate places where similar text lines are.
 
in appropriate places where similar text lines are.
  
=== Adjust kernel version === <!--T:17-->
+
=== Adjust kernel version ===
 
Before rebuilding the kernel make sure that you adjusted the kernel version in <code>kernel-ovz.spec</code>.
 
Before rebuilding the kernel make sure that you adjusted the kernel version in <code>kernel-ovz.spec</code>.
 
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:
  
  <!--T:18-->
+
  %define ksubrelease 1
%define ksubrelease 1
 
  
<!--T:19-->
 
 
with something like
 
with something like
  
  <!--T:20-->
+
  %define ksubrelease 1my.kernel.v1
%define ksubrelease 1my.kernel.v1
 
  
=== Modifying configs === <!--T:21-->
+
=== Modifying configs ===
 
If you want to modify the kernel config, you need to do the following before you continue with [[#Building RPMs|the next step]].
 
If you want to modify the kernel config, you need to do the following before you continue with [[#Building RPMs|the next step]].
  
  <!--T:22-->
+
  # cd $TOPDIR/SPECS
# cd $TOPDIR/SPECS
 
 
  # rpmbuild -bp kernel-ovz.spec
 
  # rpmbuild -bp kernel-ovz.spec
 
  # cd $TOPDIR/BUILD/kernel-{{kver}}/linux-{{kver}}
 
  # cd $TOPDIR/BUILD/kernel-{{kver}}/linux-{{kver}}
  
<!--T:23-->
 
 
'''Note''': Make sure all OpenVZ related options are set. See [[kernel configuration]]
 
'''Note''': Make sure all OpenVZ related options are set. See [[kernel configuration]]
  
<!--T:24-->
 
 
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-{{kver}}/linux-{{kver}}/.config</code>. Then you can do a make menuconfig or something similar to adjust the kernel configuration. Note that some kernel configuration issues are described at [[kernel configuration]].
 
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-{{kver}}/linux-{{kver}}/.config</code>. Then you can do a make menuconfig or something similar to adjust the kernel configuration. Note that some kernel configuration issues are described at [[kernel configuration]].
  
<!--T:25-->
 
 
Next, copy <code>$TOPDIR/BUILD/kernel-{{kver}}/linux-{{kver}}/.config</code> to the <code>$TOPDIR/SOURCES</code> directory, but use the corresponding file name in the target directory.
 
Next, copy <code>$TOPDIR/BUILD/kernel-{{kver}}/linux-{{kver}}/.config</code> to the <code>$TOPDIR/SOURCES</code> directory, but use the corresponding file name in the target directory.
  
=== Building RPMs === <!--T:26-->
+
=== Building RPMs ===
 
To rebuild the kernel, type the following commands:
 
To rebuild the kernel, type the following commands:
  
  <!--T:27-->
+
  # cd $TOPDIR/SPECS
# cd $TOPDIR/SPECS
 
 
  # rpmbuild -ba --target=i686 kernel-ovz.spec
 
  # rpmbuild -ba --target=i686 kernel-ovz.spec
  
<!--T:28-->
 
 
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>.
  
== Rebuilding kernel from sources == <!--T:29-->
+
== Rebuilding kernel from sources ==
  
=== Download === <!--T:30-->
+
=== Download ===
 
To compile OpenVZ linux kernel one need to download the original linux kernel sources and OpenVZ patches for it.
 
To compile OpenVZ linux kernel one need to download the original linux kernel sources and OpenVZ patches for it.
  
<!--T:31-->
 
 
Linux kernel can be found at [http://www.kernel.org/ kernel.org], e.g. {{kver}} kernel can be downloaded [http://www.kernel.org/pub/linux/kernel/v2.6/linux-{{kver}}.tar.bz2 from here].
 
Linux kernel can be found at [http://www.kernel.org/ kernel.org], e.g. {{kver}} kernel can be downloaded [http://www.kernel.org/pub/linux/kernel/v2.6/linux-{{kver}}.tar.bz2 from here].
  
<!--T:32-->
 
 
Appropriate OpenVZ patches for this kernel version can be found at <nowiki>http://openvz.org/download/kernel/branches/<branch>/<version>/patches/</nowiki>. For example, at the moment there is a patch [http://download.openvz.org/kernel/branches/{{kver}}/{{krel}}/patches/patch-ovz{{krel}}-combined.gz patch-ovz{{krel}}-combined.gz] available.
 
Appropriate OpenVZ patches for this kernel version can be found at <nowiki>http://openvz.org/download/kernel/branches/<branch>/<version>/patches/</nowiki>. For example, at the moment there is a patch [http://download.openvz.org/kernel/branches/{{kver}}/{{krel}}/patches/patch-ovz{{krel}}-combined.gz patch-ovz{{krel}}-combined.gz] available.
  
<!--T:33-->
 
 
Kernel configs are also available at OpenVZ download site. Most frequently SMP config is used, so let's download [http://download.openvz.org/kernel/branches/{{kver}}/{{krel}}/configs/kernel-{{kver}}-i686-smp.config.ovz kernel-{{kver}}-i686-smp.config.ovz]
 
Kernel configs are also available at OpenVZ download site. Most frequently SMP config is used, so let's download [http://download.openvz.org/kernel/branches/{{kver}}/{{krel}}/configs/kernel-{{kver}}-i686-smp.config.ovz kernel-{{kver}}-i686-smp.config.ovz]
 
for this example.
 
for this example.
  
=== Prepare === <!--T:34-->
+
=== Prepare ===
 
First, extract the kernel sources from archive:
 
First, extract the kernel sources from archive:
  
  <!--T:35-->
+
  # tar vjxf linux-{{kver}}.tar.bz2
# tar vjxf linux-{{kver}}.tar.bz2
 
 
  # cd linux-{{kver}}
 
  # cd linux-{{kver}}
  
<!--T:36-->
 
 
Apply OpenVZ patches to the kernel:
 
Apply OpenVZ patches to the kernel:
  
  <!--T:37-->
+
  # gzip -dc patch-ovz{{krel}}-combined.gz | patch -p1
# gzip -dc patch-ovz{{krel}}-combined.gz | patch -p1
 
  
=== Configure === <!--T:38-->
+
=== Configure ===
 
Now we need to place the config and build the kernel:
 
Now we need to place the config and build the kernel:
  
  <!--T:39-->
+
  # cp kernel-{{kver}}-i686-smp.config.ovz .config
# cp kernel-{{kver}}-i686-smp.config.ovz .config
 
 
  # make oldconfig
 
  # make oldconfig
  
<!--T:40-->
 
 
On this stage, you can modify your kernel configuration to better suit your needs.  
 
On this stage, you can modify your kernel configuration to better suit your needs.  
  
<!--T:41-->
 
 
{{Note|Make sure all OpenVZ related options are set. See [[kernel configuration]].}}
 
{{Note|Make sure all OpenVZ related options are set. See [[kernel configuration]].}}
  
=== Build === <!--T:42-->
+
=== Build ===
 
  # make
 
  # make
 
  # make modules
 
  # make modules
  
=== Installation === <!--T:43-->
+
=== Installation ===
 
After a successful build of the kernel it can be installed on the machine with the following commands run under '''root''' user:
 
After a successful build of the kernel it can be installed on the machine with the following commands run under '''root''' user:
  
  <!--T:44-->
+
  # make install
# make install
 
 
  # make modules_install
 
  # make modules_install
  
<!--T:45-->
 
 
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.
 
</translate>
 
</translate>

Please note that all contributions to OpenVZ Virtuozzo Containers Wiki may be edited, altered, or removed by other contributors. If you don't want your writing to be edited mercilessly, then don't submit it here.
If you are going to add external links to an article, read the External links policy first!

To edit this page, please answer the question that appears below (more info):

Cancel Editing help (opens in new window)

Templates used on this page: