Monday, May 19, 2014

Linux kernel downgraded upon Ubuntu upgrade to 14.04 and how to fix it

Several weeks ago, I upgrade Ubuntu 13.10 to 14.04. During the upgrade, everything seemed to go fine. No obvious errors, no worries, right?

But during the upgrade I noticed something odd. I was at the time running Linux kernel 3.11.x, but the upgrade was downgrading me to 3.08. I didn't think anything of it other than that maybe that is intentional. I was fine with this until I tried to run Virtualbox, my virtual machine software. I love Virtualbox because it allows me to test Linux without actually working on physical machines.

So when I tried to run a virtual machine, Virtualbox would return an error and would not run. The downgrade from Linux kernel 3.11.x broke Virtualbox. I resolved to fix the problem once I noticed that 3.13 was the latest kernel and that it was running on my other machines.

So I did a little bit of research on how to upgrade the kernel. If you're going to upgrade the kernel, you need to be careful as things can break, as I discovered. On my first reboot after upgrading the kernel, the mouse, keyboard and network were broken. What follows is what I learned from the experience of fixing the problem. If you find errors or omissions, please comment so that I can make corrections.

First, I needed to figure out where I was at. To determine what version of Linux you're running, enter the command as follows:

$ lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 14.04 LTS
Release: 14.04
Codename: trusty

Then you need to determine which kernel you're running:

$ uname -a

Linux scott-XPS-8700 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

What you see there above is that I'm running the latest version of Ubuntu with the latest Linux kernel. Believe me, it wasn't very easy to get there, but I got there. I had to reboot my computer quite a few times to get the problems fixed as I will explain below.

Once you know where you are, then you can decide where to go:

$ apt-cache search linux-image
alsa-base - ALSA driver configuration files
linux-image-3.13.0-24-generic - Linux kernel image for version 3.13.0 on 64 bit x86 SMP
linux-image-3.13.0-24-lowlatency - Linux kernel image for version 3.13.0 on 64 bit x86 SMP
linux-image-extra-3.13.0-24-generic - Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
linux-image-extra-virtual - Transitional package.
linux-image-generic - Generic Linux kernel image
linux-image-generic-lts-quantal - Generic Linux kernel image
linux-image-generic-lts-raring - Generic Linux kernel image
linux-image-generic-lts-saucy - Generic Linux kernel image
linux-image-generic-lts-trusty - Generic Linux kernel image
linux-image-lowlatency - lowlatency Linux kernel image
linux-image-server - Transitional package.
linux-image-virtual - This package will always depend on the latest minimal generic kernel image.
linux-virtual - Minimal Generic Linux kernel and headers
linux-image-generic-pae - Transitional package
linux-image-lowlatency-pae - Transitional package
linux-image-3.4.0-3-goldfish - Linux kernel image for version 3.4.0 on Android touch emulation
linux-image-goldfish - Linux kernel image for the goldfish kernel.
linux-image-3.8.0-32-generic - Linux kernel image for version 3.8.0 on 64 bit x86 SMP
linux-image-extra-3.8.0-32-generic - Linux kernel image for version 3.8.0 on 64 bit x86 SMP

As you can see above, there are quite a few options to choose from. Let's narrow them down:

$ apt-cache search linux-image | grep 3
linux-image-3.13.0-24-generic - Linux kernel image for version 3.13.0 on 64 bit x86 SMP
linux-image-3.13.0-24-lowlatency - Linux kernel image for version 3.13.0 on 64 bit x86 SMP
linux-image-extra-3.13.0-24-generic - Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
linux-image-3.4.0-3-goldfish - Linux kernel image for version 3.4.0 on Android touch emulation
linux-image-3.8.0-32-generic - Linux kernel image for version 3.8.0 on 64 bit x86 SMP
linux-image-extra-3.8.0-32-generic - Linux kernel image for version 3.8.0 on 64 bit x86 SMP

When I started this adventure, I was at 3.8.0-32 after upgrading to Ubuntu 14.04. Previous to the upgade, I was on 3.11.x, so I don't know what prompted the downgrade in the kernel. What I do know is that I didn't start to notice the kernel version until after I found that Virtualbox was broken.

To save you some time, I've reduced the steps as follows:

$ sudo apt-get install linux-image-3.13.0-24-generic
$ sudo apt-get install linux-generic linux-headers-generic linux-image-generic
$ sudo reboot

The first line installs the kernel that I want. The second line installs other software to make the kernel work right with the hardware on this machine. I can't explain it all since it is mostly over my head. But I can say that after running the above commands and rebooting the computer, everything worked. That includes Virtualbox, which was broken right after upgrading to 14.04. 

So you now have another reason why I wrote this blog article. I wanted to help myself by documenting the steps and to help others so that they wouldn't have to do what I did.

Thanks for reading.

No comments: