https://zhuanlan.zhihu.com/p/75669680

记一次Ubuntu 18.04 内核升级

CCCCCaO

CCCCCaO

闷骚得很

前言

原本使用(Ubuntu Server 18.04.2 LTS)来搭建一个NextCloud服务,为公司提供共享盘服务。在本地PVE环境下自己测试的时候,来尝试更新一下Linux的内核,折腾一下内核。

网传的ubuntu更新内核的教程都有各种问题,例如我们这次会提到的,更新到4.17版本之后的内核,需要安装的软件包会多一个。这次自己来写一个教程记录一下。

  1. 为什么要更新Linux内核?
  2. 如何查看自己当前的版本?
  3. 更新到哪个内核比较合适?
  4. 正式更新的具体步骤

1. 为什么要更新Linux内核?

更新内核主要是为了获得一些新特性/新功能,例如对新的软硬件的支持。另一个理由就是新版本的内核比之老版本会修复过去的BUG,提供一个更加安全可靠的运行环境。

但是更新也有弊端,随着新特性/新功能的加入,可能会使得部分老旧软件依赖不支持的情况,也会使得运行也变得不稳定(新的漏洞新的BUG)。

至于到底更不更新?还是取决于需求的。这里我们喜欢折腾,那就更新一下试试!

大佬们可以轻喷,我知道在大量生产环境还是3.x内核,但是并不能否认一些场景下对内核有需求,比如有一些特殊硬件,一些特殊程序,内核工程师探索新功能等,我喜欢折腾一下,并且某加速程序确实需要5.x内核,因此才有了本文

2. 如何查看自己当前的版本?

在更新之前,我们肯定得知道我们现在到底是个什么内核版本?否则如何更新到哪都不清楚!

首先在终端中,输入以下命令后按下回车

uname -sr

可以发现Ubuntu 18.04 server 默认的内核是

Linux 4.15.0-55-generic

这个是已经是2018-02-01时候的一个内核了,比较稳定,当然也有些过时。(本文写的时候是2019-07-29 已经一年半时间过去了)

3. 更新到哪个内核比较合适?

我到底应该更新到哪个版本的内核呢?内核版本众多,哪个比较稳定可靠,哪些则具有创新先进呢?

让我们首先前往 (The Linux Kernel Archives) ,然后你会看到有不同版本的内核,例如stable(稳定板),mainline(主线版)等等。我该选择哪个呢?

简单说,选择这个网站上的黄色按钮上的版本即可,如图所示:

The Linux Kernel Archives 内核存档

黄色按钮内所示的5.2.4,这是一个最新的Stable版本的Linux内核,说明它通过了稳定性的测试,并且解决了诸多重要BUG,一定程度上是可以正常使用了。

不建议采用最新的内核作为生产环境部署,除非有特殊需求,新事物还未有经过大规模的检验,可能存在隐患。本文是进行一定实验性质,所以进行更换内核!

其实内核有四种,这里列举一下(The Linux Kernel Archives)的介绍:

  • Prepatch(RC) 预发布
Prepatch or "RC" kernels are mainline kernel pre-releases that are mostly aimed at other kernel developers and Linux enthusiasts. They must be compiled from source and usually contain new features that must be tested before they can be put into a stable release. Prepatch kernels are maintained and released by Linus Torvalds.

预发布版内核是添加了新特性/功能的内核,但是这些功能仍然在测试阶段,还存在已知或潜在的BUG等待解决。这一版会不断进行打磨改善,形成了那些结尾有-rc的后缀版本。当Linus确定新的内核没有问题了,这个版本将会进入Stable发布阶段。

  • Mainline 主线版
Mainline tree is maintained by Linus Torvalds. It's the tree where all new features are introduced and where all the exciting new development happens. New mainline kernels are released every 2-3 months.

主线版是添加了所有激动人心的新型功能,新修复的补丁的版本,尽管这些新的东西不一定稳定甚至测试都不一定过得去。这是Linus Torvalds自己的Linux树,我们称这个git树的版本叫主线版,通常2~3个月发布一次。

  • Stable 稳定版
After each mainline kernel is released, it is considered "stable." Any bug fixes for a stable kernel are backported from the mainline tree and applied by a designated stable kernel maintainer. There are usually only a few bugfix kernel releases until next mainline kernel becomes available -- unless it is designated a "longterm maintenance kernel." Stable kernel updates are released on as-needed basis, usually once a week.

当一个主线版发布之后,它就被视为是一个稳定版了。任何对于稳定板的漏洞修补都是从主线版上面反向移植(backport)来的。通常到下一次主线版发布前,只有一些漏洞修补的内核会进行发布,除非这个版本的内核被设计成一个长期支持版内核。稳定版内核是按需进行发布的,通常每周一次。

  • Longterm 长期维护版
There are usually several "longterm maintenance" kernel releases provided for the purposes of backporting bugfixes for older kernel trees. Only important bugfixes are applied to such kernels and they don't usually see very frequent releases, especially for older trees.

长期支持版本通常有数个,这是为了对旧版内核的漏洞进行反向移植修补,只有一些重要的漏洞修补才会加入这些内核,它们不会经常更新,尤其是更旧版的内核。

各个内核版本的比较

四个版本的Linux Kernel,生产环境可以选择longterm或stable,实验环境都可以选择,根据实际情况以及需要。这里我们选的是stable,相对较新,且较稳定。

这里推荐大家阅读这篇 哪个Linux内核版本是“稳定的?” 是由Linux中国翻译自国外一篇博文的,讲解的比较通俗易懂!

4. 正式更新

接下来我们将会进行正式的更新,以更新到5.2.4为例

首先打开 Ubuntu内核,下拉找到我们要的版本5.2.4,如图所示:

多个版本的内核

然后点击这个进入页面,根据自己的硬件设备,选择不同的版本。这里我用的是PVE虚拟的skylake的vcpu,是X86的芯片,那么就选这个amd64的版本。如果是arm芯片可以选arm64或armhf等。

同一内核的多种硬件版本

我们需要的软件包共有四个,即两个header头文件,一个image镜像,一个modules模块:

  • linux-headers-5.2.4-050204_5.2.4-050204.201907280731_all.deb
  • linux-headers-5.2.4-050204-generic_5.2.4-050204.201907280731_amd64.deb
  • linux-image-unsigned-5.2.4-050204-generic_5.2.4-050204.201907280731_amd64.deb
  • linux-modules-5.2.4-050204-generic_5.2.4-050204.201907280731_amd64.deb
warning:在内核版本 4.17之前(不含4.17)中是 无modules文件的,所以你只需要3个软件包即两个header,一个image即可完成更新。而网上目前搜索到的内核更新教程通常都是 适合4.17内核之前的,而我们更新到4.17之后版本,例如我们更新到5.2.4,在dkp步骤时候会提示缺少依赖项,没有modules文件!

随后,我们输入以下的四条命令,使用wget一个个下载对应的软件包:

输入一条命令后,按下回车,根据网络情况,等待几分钟即可,具体时间可查看输出的etc后的时间

wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.2.4/linux-headers-5.2.4-050204_5.2.4-050204.201907280731_all.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.2.4/linux-headers-5.2.4-050204-generic_5.2.4-050204.201907280731_amd64.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.2.4/linux-image-unsigned-5.2.4-050204-generic_5.2.4-050204.201907280731_amd64.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.2.4/linux-modules-5.2.4-050204-generic_5.2.4-050204.201907280731_amd64.deb

等待所有四个软件包都下载完成后,输入下述命令进行解压安装:

sudo dpkg -i *.deb

因为使用了sudo,所以会提示输入密码,我们输入密码,按下回车等待安装。

当提示成功安装后,输入以下命令进行重启

reboot

等待重启后登陆系统,然后输入

uname -sr

查看目前的系统

Linux 5.2.4-050204-generic

至此,更新内核就完成了!!!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐