Today: But what if I need a new kernel?
A driver update (DUD) can of course update a single driver. But if that’s not enough and you need a whole new kernel to run an installation?
There are two parts to solve:
- replace the kernel used during installation and
- get the new kernel installed
We’ll need two tools for this (both available in Tumbleweed or here: mksusecd and mkdud).
1. Replace the kernel used during installation
For this it’s important to know which kernel packages you’ll actually need. Typically it will be kernel-default
and kernel-firmware
. But older SUSE distributions (SLE 11 comes to mind) had the kernel packages split into kernel-default
and kernel-default-base
– you’ll need them both.
To make things confusing, modern SUSE distributions also have kernel-default-base
– but it’s an alternative to kernel-default
. In this case we don’t need it.
If unsure, check kernel-default
. If it contains the actual kernel (e.g. /boot/vmlinuz
) then you don’t need kernel-default-base
.
On some architectures modules are also taken from xen-kmp-default
. If that’s important for you, you can add this package to the kernel list as well.
In fact you can add any number of kernel packages or kmps you like.
In the past, sometimes a different kernel flavor was used. For example PowerPC had kernel-ppc64
for a while. Simply use the flavor you need.
It’s a good idea to gather all the kernel rpms into a single directory for easier use:
> mkdir k
> cp kernel-default.rpm kernel-firmware.rpm k
> cp kernel-default-base.rpm k # only if needed
# add any kernel-related rpms you need
Then, take your SUSE installation iso and run
> mksusecd --create new.iso \
--kernel k/* -- \
original_dvd1.iso
Note that the --kernel
option accepts a variable number of arguments, so you have to add an isolated --
to terminate the argument list properly.
The output could look like this:
> mksusecd --create new.iso \
--kernel k/* -- \
SLES-11-SP4-DVD-ppc64-GM-DVD1.iso
kernel version: 3.0.101-63-ppc64 --> 3.0.101-94-ppc64
CHRP bootable (ppc64)
building: 100%
calculating sha1...
The command above will actually get the list of required modules from the old installation iso. If you are missing some driver or the new kernel comes with some additional driver, the module will not be added to the new iso.
But there’s the --modules
option. It will add the listed modules together with any implicitly required modules via module dependencies.
For example, let’s add the airport
wifi-module to our PowerPC iso:
> mksusecd --create new.iso \
--kernel k/* \
--modules airport -- \
SLES-11-SP4-DVD-ppc64-GM-DVD1.iso
kernel version: 3.0.101-63-ppc64 --> 3.0.101-94-ppc64
kernel modules added:
airport, cfg80211, orinoco
CHRP bootable (ppc64)
building: 100%
calculating sha1...
As you can see, it automatically adds orinoco
and cfg80211
as well.
2. Get the new kernel installed
This is relatively simple. A driver update can do this:
> mkdud --create foo.dud \
--dist sle11 \
--install repo \
k/*
This creates a driver update for SLE 11 (which also applies to SP4) and the kernel rpms are installed via an auto-generated add-on repo (--install repo
).
Now we have the driver update that installs our kernel packages. But how do we use it?
We integrate it into our iso above!
> mksusecd --create new.iso \
--initrd foo.dud \
--kernel k/* -- \
SLES-11-SP4-DVD-ppc64-GM-DVD1.iso
mksusecd
has an --initrd
option that directly accepts driver updates and integrates them into the iso.
3. Can I have a choice?
Maybe you just want to test this new kernel or sometimes need the old one and sometimes the new one. Can you make an installation iso that lets you choose the kernel?
Oh yes! 🙂
> mksusecd --create new.iso \
--add-entry 3.0.101-94 \
--initrd foo.dud \
--kernel k/* -- \
SLES-11-SP4-DVD-ppc64-GM-DVD1.iso
This does not replace the old kernel but adds a new boot entry Installation - 3.0.101-94
.
So you can install with old or the new kernel.