How to build the mainline kernel source package?
Ubuntu kernel PPA only provides linux-headers*.deb and linux-image*.deb packages. How can I build the corresponding linux-source*.deb package ?
Context:
I'm currently running Ubuntu 11.10 with the mainline kernel (3.2 rc6 now) to get a better support for my sandybridge IGP (Dell E6420 laptop with intel i5-2520M CPU).
Appears, i'd like to install this touchpad driver, ALPS touchpads being badly supported (see previous link bug report), while waiting for upstream support in kernel version 3.3.
Problem is, DKMS keeps complaining about not finding the full kernel source:
Module build for the currently running kernel was skipped since the
kernel source for this kernel does not seem to be installed.
Appears I may not need the full source but I'd still like to try having it installed to see if it solve my problem.
What I tried :
- Uncompressing the kernel.org source archive in
/usr/src/
. DKMS still complaining. - Manually updating the kernel source package with uupdate and the mainline source package like explained here. Did not succeed.
- Manually building the linux-source package following @roadmr and @elmicha instructions. I eventually succeeded to build it but DKMS still complained about the missing source.
- At last I noticed an error I did not catch in the first place while reinstalling the kernel headers. Appears the .deb I got may have been corrupted, downloading it again did the trick :) Alas, while DKMS agreed to compile the module i ran into the following error which appears to have already been reported. This issue isn't yet solved but I won't try to because of the following: in the end I decided to test the precise kernel version 3.2-rc6 through the xorg-edgers ppa which appears to be correctly patched: it works.
Nevertheless, it might still be of some interest to know how to build the mainline linux-source package as the Ubuntu Kernel Team doesn't provide it. Not to mention that I learned a lot in the process ^^
Solution 1:
Looks like you're brave enough :) you could try following these instructions to create your own .deb packages from the mainline kernel.
Try reading this general document first:
https://help.ubuntu.com/community/Kernel/Compile
Here are specific instructions on how to compile a kernel for 11.10 (although you'd be doing so from the 3.2 source tree, so some things may ebd up being different).
http://blog.avirtualhome.com/2011/10/28/how-to-compile-a-new-ubuntu-11-10-oneiric-kernel/
Now, the problem with these instructions is they assume a source tree with a debian/ directory, which is where the control files that let you build a package reside. It's not a big problem though; it's easy to get a packageable source tree:
-
Get the mainline kernel tree
git clone https://github.com/torvalds/linux.git
Look at the latest mainline kernel (as of today http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.2-rc6-precise/). There are three patch files (0001-base-packaging.patch, 0002-debian-changelog.patch, 0003-default-configs.patch). Download these three files.
-
Change to your fresh new linux source directory and apply all 3 patches in order:
patch -p1 <0001-base-packaging.patch patch -p1 <0002-debian-changelog.patch patch -p1 <0003-default-configs.patch
You'll now have a nice debian/ directory with packaging information. Then you can apply the instructions in the two URLs I mention above to configure and build packages from your kernel. Hopefully this will also create a kernel-source package.
Solution 2:
It should be possible to build the upstream kernel sources. If you already unpacked it to /usr/src/linux-X.Y:
cd /usr/src/linux-X.Y
# copy the configuration of the running kernel:
cp /boot/config-$(uname -r) .config
make oldconfig
fakeroot make-kpkg --initrd --append-to-version=-custom kernel-image kernel-headers
cd ..
ls -lrt *-custom*deb
# only install the latest *-custom*deb here:
sudo dpkg -i *-custom*deb
I use that all the time and although I have a few DKMS packages installed they don't complain.