Update : Use the same trick to install Version 6.3 !
6.2 is here, here is what's new, but we will not focus on that, but how to try it on Google Cloud !
Be careful, this is an unsigned kernel, The system will fail to boot in a secure boot environment !
Before we start, I need you to do two important steps, so in case something goes wrong, you can always go back :
1- You need ton install the Ops Agent so you can see what happens inside your instance,
2- Create a backup or make a snapshot and create a disk from this snapshot.
Covert it to disk to be attached to the instance
Now that you took care of the backup plan, let's dive in !
Here is what we do have with a default Ubuntu 18.04 installation (there is also 20.04 and 22.04 as LTS, but here, we want just to make a small demo) :
We need to add mainline package to our repos list so we can install it using apt
sudo add-apt-repository ppa:cappelikan/ppa
Then update the new repos by
sudo apt update
then we just install it using
sudo apt install -y mainline
To get all available kernels, we just make
mainline --list
Then, we choose what to install, by explicitly giving the version,
sudo mainline --install 6.2.0
or, if we want to get the latest stable kernel, we simply :
sudo mainline --install-latest
Restart, and voilà !
...
But here is an issue, how do we go back to old kernel ?
The problem here, is we are accessing using SSH, and kernel selection is done from Grub Menu, and SSH is not available at this stage, which means we need another way, here is how !
Here is what we have now as installed kernels, we can use one of this commands :
dpkg --list | grep -i linux-image
apt list --installed | grep -i linux-image
Now, let's change something in default grub loading, here is the trick, but before, we need to understand how Grub works :
Grub menu on a machine that we have physical access can be tuned to show a menu at restart, so we generally have two options (menu) : the default kernel, and advanced mode that have a submenu, and they are assigned by indexes starting with
0
:
1- first menu entry = 0
2- second menu entry = 1
and so on ...
and each menu has a submenu with index numbers, but to not complicate this, we will flatten this submenus to make it easierGrub saves its file to
/boot/grub/grub.cfg
, but this file should never be modified manually, as it's a result of some scripts (that we will know shortly), so eachtime for example we do a kernel update, it will be erased a new one will be generated, so we need to modify this script that generates the file, and not the file itself :
- The files that we need to modify for our case is
/etc/default/grub
And as you can see, the first option is 0
which means take the first entry in the menu and validate it, we will change that, but first we need to :
- flatten the menu to avoid submenus
- get the index of the kernel version we need
Here is how it was with default values (with submenus):
Let's first add this entry to disable submenus :
GRUB_DISABLE_SUBMENU=y
Then let's validate the config by running the script to re-generate the /boot/grub/grub.cfg
by running :
sudo update-grub
And it's flat now, no more submenus !
Now we need to understand the origin of other variables from other files, so when we do update-grub
there is also a bunch of scripts that runs from /etc/grub.d/
On Google Cloud, there is another file, which is :
/etc/default/grub.d/50-cloudimg-settings.cfg
So let's change this value, it will override the global one ...
But to replace it with what ?
Well, let's enumerate the menus we got starting with zero
So now that we know that we need entry 2
let's replace it :
Restart, and voilà again !
Top comments (0)