Compiling the Linux Kernel, the SUSE way


Today Linus Torvalds announced the release of the Linux Kernel 3.11 “Linux for Workgroups” (is not it funny?).

Let’s get straight to the point:

How to compile the kernel manually, SUSE style!.

For this example, I’ll use the new kernel 3.11 (obviously) on a SLES11 SP3 server.

1. After all we need to install: ncurses-devel

# zypper install ncurses-devel

2. Get the source:

# wget ""

3. Unpack the source:

# tar -Jxvf linux-3.11.tar.xz -C /usr/src/

4. Configure the kernel:

# cd /usr/src/linux-3.11/

Make sure you are in the path from the source

# make mrproper

If this is your first time, you really do not need this step, this only cleans .o files and other temporary

In the next step there are several ways to configure the kernel, I prefer to make menuconfig, but if you don’t have experience or want to play it safe, I recommend you use an existing configuration, to do this copy your old config file to the new source path:

# cp /boot/config-`uname -r` .config

If you still want to change or add something, at this point you can run: make menuconfig

HINT: After configuration you can further customize the kernel, adding a “extraversion” value. In the Makefile, edit the “EXTRAVERSION =” field, for (this) example:

NAME = Linux for Workgroup

5. Build the Kernel:

# make rpm

Because we copy the old configuration in this step we ask about the new kernel features, read carefully before responding.

Now, take a break, this step will take a bit depending on the performance of your hardware.

6. Install the Kernel:

If all went well, you will see output similar to this:

Wrote: /usr/src/packages/SRPMS/kernel-3.11.0_w00t_0.11_default-1.src.rpm
Wrote: /usr/src/packages/RPMS/x86_64/kernel-3.11.0_w00t_0.11_default-1.x86_64.rpm
Wrote: /usr/src/packages/RPMS/x86_64/kernel-headers-3.11.0_w00t_0.11_default-1.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.13989
+ umask 022
+ cd /usr/src/packages/BUILD
+ cd kernel-3.11.0_w00t_0.11_default
+ rm -rf /var/tmp/kernel-3.11.0_w00t_0.11_default-root
+ exit 0
rm kernel-3.11.0_w00t_0.11_default.tar.gz kernel.spec

Install the new Kernel package under /usr/src/packages/RPMS/x86_64/:

# cd /usr/src/packages/RPMS/x86_64/
sp3-lab:/usr/src/packages/RPMS/x86_64 # ls
sp3-lab:/usr/src/packages/RPMS/x86_64 #
# rpm -ivh kernel-3.11.0_w00t_0.11_default-1.x86_64.rpm

And build the initrd

# mkinitrd

Now it only remains to edit the grub menu:

# vim /boot/grub/menu.lst

And add these lines, obviously putting the right disk to your existing system:

title SUSE Linux Enterprise Server 11 SP3 - 3.11 Linux for Workgroups
root (hdX,X)
kernel /boot/vmlinuz-3.11.0-w00t-0.11-default root=/dev/XXX resume=/dev/disk/XXX splash=silent crashkernel=256M-:128M showopts vga=0x314
initrd /boot/initrd-3.11.0-w00t-0.11-default

Basically, what we do here is copy the current grub entry in your system and just change the title and the image of the new Kernel.

Now, reboot!

We should see the new option in the grub.




Happy Hacking!

(Visited 22 times, 1 visits today)


  • Avatar photo mikewillis says:

    You appear to be doing everything as root. I’d advise doing steps 2-5 as a regular user. Step 3 would fail because writing to /usr/src can only be done by root, but the source can be unpacked somewhere else instead.

    I was taught never build rpms as root. All it takes is one error in the spec file and you end up with files all over the place and/or bits of your system overwritten. (One would expect a spec file provided in Kernel source to be free from such errors, but even so). Also it’s just generally good practice not to do things as root unless they actually need to be done as root.

    • Avatar photo debianized says:

      Indeed, step 5 can be done as a normal user (the best practice) but nothing happens as root, I build all my packages as regular user too.
      In step 3, yes I agree that anyone can unpack the source, it’s just a way to simplify.

  • Avatar photo thelastblack says:

    Thanks for a nice guide.
    I tried building the kernel for openSUSE thumbleweed using this guide, but in step 5 it says something like “rpm : invalid option –target” and I can see that a command like `rpm –target x86_64` is being executed (but failed).
    I just ran `make` and now it is compiling, but how to get rpm packages after that?
    Also I didn’t find anything like VERSION in .config, so I didn’t add an EXTRAVERSION. I think that is ok, isn’t it?

    BTW, I installed sources using zypper and I am just compiling kernel to make ps/2 mouse module not a built-in module, because my ALPS touchpad is not recognized and I have to compile it myself and enable the module.

    • Avatar photo thelastblack says:

      I found all the answers.
      Don’t do ‘make rpm’, instead first run ‘make’ then ‘make install_modules’ and ‘make install’ then if you are using grub2 run `grub2-mkconfig` to add boot entry. Done!

      • Avatar photo debianized says:

        Nice! but by this way you don’t create the rpm, it’s the tradicional mode.

        “EXTRAVERSION =” In in the ‘Makefile’


      • Avatar photo speculatrix says:

        whilst the way you suggest will build and install a kernel, it does so on the specific computer you are running the commands on, so you missed the point of this article which is to build a PACKAGE, and then you can install and re/deinstall the package on ANY computer.

  • Avatar photo abonilla says:

    edit and set allow_unsupported_modules 1 in

  • Leave a Reply

    Your email address will not be published. Required fields are marked *

    Avatar photo