This is a fork of Proxmox VE's official Linux kernel packaging tools. It has the changes and documentation needed to base builds on "upstream" (official) sources from kernel.org, instead of using Ubuntu's kernel source tree.
This might be useful if you need to mitigate security vulnerabilities that are patched upstream but haven't yet been backported to Ubuntu and/or Proxmox, and aren't easy to backport yourself.
You should only build your own kernel if you have a specific, good reason to do so!
Unofficial kernel builds may miss Ubuntu patches that are important for features, stability, or security. They will be tested much less than an official Ubuntu or Proxmox build. You won't be able to get technical support for them.
This fork removes several patches that Proxmox backported, but are now included in newer upstream kernel versions. If you build a kernel version from before mid-August 2023, you will miss important security patches.
There is no guarantee that this fork will be actively maintained.
This fork disables backwards compatibility checks for ABI and firmware. You'll need to update all your kernel-related .deb
packages together. Your built packages might not have their dependency metadata set correctly in order to force this to happen, like the official packages would.
submodules/ubuntu-kernel
is now mis-named. This might cause confusion, but it seems cleaner than deleting and re-creating the submodule.
Make sure you have at least 35 GB of disk space available, and have these packages installed:
sudo apt-get install debhelper devscripts equivs git
git clone https://github.com/jprenken/pve-kernel-upstream
cd pve-kernel-upstream
This repository is probably ready to use for a specific kernel version (see changelog), but that might not be the version you want. If it is, you can skip this whole section.
Use a kernel at least as new as the minor version your Proxmox VE release uses. For example, Proxmox VE 8.0 expects at least Linux kernel 6.2.
See:
As of this writing (August 2023), versions 6.2 and 6.3 are no longer maintained upstream; the stable kernel version series is 6.4. That makes the 6.4 series a good choice to use with Proxmox VE 8.0 because it's actively maintained, it's considered stable, and it's as close as possible to what Proxmox expects.
Only if you don't want to use the official stable/long-term kernel repository, change the submodule to use the repository you want. For example:
git submodule set-url -- submodules/ubuntu-kernel ${REPOSITORY_URL}
Even though this fork uses the upstream kernel source, it still depends on some of Ubuntu's build scripts and configuration.
You may want to use newer or different versions than are in this repository. If so, replace the files in ubuntu/
with versions from an appropriate branch of Ubuntu's kernel source repository.
For example, here is the main branch for Ubuntu 23.04 (Lunar Lobster), which targets kernel version 6.1 as of this writing (August 2023):
(This could be made into another submodule, but that would add complexity and consume much more storage space.)
At the top of Makefile
, update the KERNEL_MAJ
, KERNEL_MIN
, and KERNEL_PATCHLEVEL
variables to match your target kernel version.
If another kernel with the same minor version has already been packaged for Proxmox, also update KREL
.
The build tools parse and depend on debian/changelog
for important metadata. Add a new entry, for example:
export NAME="Your Name"
export EMAIL="[email protected]"
debchange --newversion 6.4.12-1 --package proxmox-kernel-6.4 --no-auto-nmu
If you're switching to a different minor version than this repository currently uses, update the package name in debian/source/lintian-overrides
to avoid a pedantic build failure:
editor debian/source/lintian-overrides
Generate the Debian control file, then install the packages it says will be needed:
make debian.prepared
sudo mk-build-deps --install debian/control
Although make
will do this for you, it will try to use the recorded commit ID from git's internal state, which is probably wrong.
Download the tree and checkout your preferred branch or tag, for example:
git submodule update --init --remote submodules/ubuntu-kernel
git -C submodules/ubuntu-kernel checkout v6.4.12
make
You'll probably have several build failures. Many of these are easy to fix.
If a patch fails to apply, inspect the patch file in patches/kernel/
and figure out what's going on. Maybe:
- The patch, or a better version of it, has already landed in the upstream kernel.
- The patch is clearly not important to you, and safe to remove.
- Something has changed and you need to re-backport the patch yourself.
To remove a patch, just delete the file. Missing patch numbers are okay, as long as they stay in the correct order.
Some build dependencies might not have been detected by mk-build-deps
. Install them with sudo apt-get install ${PACKAGE}
, and try again.
If the build process asks for libpve-common-perl
or another package that's specific to Proxmox, you'll need to install it and its dependencies from a Proxmox package repository. Because that may override or conflict with your system's normal packages, you might want to do this on a dedicated/temporary build host or container, instead of your workstation.
If ZFS tests fail because common.sh
doesn't exist, there's a simple workaround:
make --directory proxmox-kernel-*/modules/pkg-zfs/scripts
(This only happens sometimes. It may be related to a known bug that's been fixed in OpenZFS upstream.)
These steps are based on Fabian Mastenbroek's pve-edge-kernel documentation.