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 gentoo-kernel
variant:
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:
reboot
5. (Optional) Prepare for the next kernel build
Run etc-update
and merge the new kernel config entries into your savedconfig
.
The kernel should auto-build once new versions become available via portage.
Again the 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 gentoo-kernel
, e.g.:
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 post_pkg_postinst()
.
We can do the similarly for what is (currently) missing from the gentoo-kernel
ebuilds:
Create /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-kernel
over 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.