Compiling and installing the Gentoo Linux kernel on emerge without genkernel (part 2)
The first install of a Gentoo kernel needs to be somewhat manual if you want to optimize the kernel for the (virtual) system it boots on.
In part 1 I laid out how to improve the subsequent emerges of
sys-kernel/gentoo-sources with a small drop in script to build the kernel as part of the ebuild.
Since end of last year Gentoo also supports a less manual way of emerging a kernel:
The following kernel blends are available:
- sys-kernel/gentoo-kernel (the Gentoo kernel you can configure and compile locally - typically this is what you want if you run Gentoo)
- sys-kernel/gentoo-kernel-bin (a pre-compiled Gentoo kernel similar to what genkernel would get you)
- sys-kernel/vanilla-kernel (the upstream Linux kernel, again configurable and locally compiled)
So a quick walk-through for the
1. Set up the correct package USE flags
We do not want an initrd and we want our own config to be re-used so:
2. Preseed the saved config
The current kernel config needs to be saved as the initial
savedconfig so it is found and applied for our emerge below:
cp -n "/usr/src/linux-$(uname -r)/.config" /etc/portage/savedconfig/sys-kernel/gentoo-kernel
3. Emerge the new kernel
4. Update grub and reboot
Unfortunately this ebuild does not update grub, so we have to run
grub-mkconfig manually. This can again be automated via a
post_pkg_postinst() script. See the step 7 below.
But for now, let's do it manually:
# All fine? Time to reboot the machine:
5. (Optional) Prepare for the next kernel build
etc-update and merge the new kernel config entries into your
The kernel should auto-build once new versions become available via portage.
etc-update can be automated if you feel that is sufficiently safe to do in your environment. See step 7 below for details.
6. (Optional) Remove the old kernel sources
If you want to switch from the method based on
gentoo-sources to the
gentoo-kernel one, you can remove the kernel sources:
Be sure to update the
/usr/src/linux symlink to the new kernel sources directory from
This may be a good time for a bit more house-keeping: Clean up a bit in
/usr/src/ to remove old build artefacts,
/boot/ to remove old kernels and
/lib/modules/ to get rid of old kernel modules.
7. (Optional) Further automate the ebuild
In part 1 we automated the kernel compile, install and a bit more via a helper function for
We can do the similarly for what is (currently) missing from the
/etc/portage/env/sys-kernel/gentoo-kernel with the following:
etc-update --automode -5 /etc/portage/savedconfig/sys-kernel
grub-mkconfig -o /boot/grub/grub.cfg
The upside of
gentoo-sources is that you can put "config override files" in
/etc/kernel/config.d/. That way you theoretically profit from config improvements made by the upstream developers. See the Gentoo distribution kernel documentation for a sample snippet. I am fine with
savedconfig for now but it is nice that Gentoo provides the flexibility to support both approaches.