Ubuntu 18.04 自带的内核版本为 4.15.0,非最新稳定版内核。本文详细介绍如何手动更新 Ubuntu 18.04 的内核到最新稳定版并开启 bbr 。以下操作是在 root 账号下进行的, 非 root 账号需提升到 root 权限。

准备工作

更新软件包到最新版本

使用如下命令更新软件包到最新版本

apt update && apt upgrade -y

检查系统位数

使用如下命令检查系统位数:

uname -m

命令执行后如果返回 x86_64 ,那系统位数就是64位;如果返回 i386 或 386 或 i686 或 686 那系统位数就是32位。

安装最新版内核

在安装内核文件时,除了安装内核的 image 外,还要安装内核对应版本的 headers 和 modules 。以下是安装步骤:

创建存放内核文件的临时文件夹

使用如下命令创建存放内核文件的临时文件夹:

mkdir /root/kernel && cd /root/kernel

下载最新版内核

最新版内核需要手动下载,点此查看可用内核列表。本文以 4.19.0 版本内核为例,一共需要下载四个文件。如遇内核版本更新,找到对应版本的内核文件下载即可。使用如下命令下载内核文件:

64位系统:

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.19/linux-headers-4.19.0-041900_4.19.0-041900.201810221809_all.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.19/linux-headers-4.19.0-041900-generic_4.19.0-041900.201810221809_amd64.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.19/linux-image-unsigned-4.19.0-041900-generic_4.19.0-041900.201810221809_amd64.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.19/linux-modules-4.19.0-041900-generic_4.19.0-041900.201810221809_amd64.deb

32位系统:

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.19/linux-headers-4.19.0-041900_4.19.0-041900.201810221809_all.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.19/linux-headers-4.19.0-041900-generic_4.19.0-041900.201810221809_i386.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.19/linux-image-4.19.0-041900-generic_4.19.0-041900.201810221809_i386.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.19/linux-modules-4.19.0-041900-generic_4.19.0-041900.201810221809_i386.deb

安装内核文件

使用如下命令安装内核文件:

dpkg -i *.deb

注意:linux-headers-4.19.0-041900-generic_4.19.0-041900.201810221809_amd64.deb 依赖 libssl1.1 ,这个包在 Ubuntu 18.04 的源里有,但在 Ubuntu 16.04 里是没有的。 Ubuntu 16.04 用户在更换内核前请先安装 libssl1.1 。点此进入官网查看 libssl1.1 版本及下载地址,当前版本为 libssl1.1_1.1.0g-2ubuntu4.1 ,文件名为 libssl1.1_1.1.0g-2ubuntu4.1_amd64.deb :

wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.0g-2ubuntu4.1_amd64.deb  #下载 libssl1.1 
dpkg -i libssl1.1_1.1.0g-2ubuntu4.1_amd64.deb  #安装 libssl1.1 
rm libssl1.1_1.1.0g-2ubuntu4.1_amd64.deb  #删除 libssl1.1 安装包

卸载旧版内核

卸载旧版 linux-image

使用如下命令获取 linux-image 列表:

dpkg -l | grep linux-image

命令执行后会返回系统当前已经安装的 linux-image ,本例返回值如下:

ii  linux-image-4.15.0-36-generic              4.15.0-36.39            amd64        Signed kernel image generic 
ii  linux-image-4.15.0-38-generic              4.15.0-38.41                amd64        Signed kernel image generic 
ii  linux-image-unsigned-4.19.0-041900-generic 4.19.0-041900.201810221809  amd64        Linux kernel image for version 4.19.0 on 64 bit x86 SMP 
ii  linux-image-virtual                        4.15.0.38.40            amd64        Virtual Linux kernel image

除了 linux-image-unsigned-4.19.0-041900-generic 为最新安装的 image 外,其余均为旧版 image ,使用如下命令卸载之:

apt-get purge linux-image-4.15.0-36-generic linux-image-4.15.0-38-generic linux-image-virtual -y

卸载内核过程中会询问是否终止内核卸载,选择 NO ,继续内核卸载:
remove-linux-image.png

卸载旧版 linux-headers

使用如下命令获取 linux-headers 列表:

dpkg -l | grep linux-headers

命令执行后会返回系统当前已经安装的 linux-headers ,本例返回值如下:

ii  linux-headers-4.15.0-36                    4.15.0-36.39            all          Header files related to Linux kernel version 4.15.0 
ii  linux-headers-4.15.0-36-generic            4.15.0-36.39                amd64        Linux kernel headers for version 4.15.0 on 64 bit x86 SMP 
ii  linux-headers-4.15.0-38                    4.15.0-38.41            all          Header files related to Linux kernel version 4.15.0 
ii  linux-headers-4.15.0-38-generic            4.15.0-38.41                amd64        Linux kernel headers for version 4.15.0 on 64 bit x86 SMP 
ii  linux-headers-4.19.0-041900                4.19.0-041900.201810221809                  all          Header files related to Linux kernel version 4.19.0 
ii  linux-headers-4.19.0-041900-generic        4.19.0-041900.201810221809  amd64        Linux kernel headers for version 4.19.0 on 64 bit x86 SMP 
ii  linux-headers-generic                      4.15.0.38.40            amd64        Generic Linux kernel headers 
ii  linux-headers-virtual                      4.15.0.38.40            amd64        Virtual Linux kernel headers

除了 linux-headers-4.19.0 为最新安装的 headers 外,其余均为旧版 headers ,使用如下命令卸载之:

apt-get purge linux-headers-4.15.0-36 linux-headers-4.15.0-36-generic linux-headers-4.15.0-38 linux-headers-4.15.0-38-generic linux-headers-generic linux-headers-virtual -y

卸载旧版 linux-modules

使用如下命令获取 linux-modules 列表:

dpkg -l | grep linux-modules

命令执行后会返回系统当前已经安装的 linux-modules ,本例返回值如下:

ii  linux-modules-4.15.0-36-generic            4.15.0-36.39            amd64        Linux kernel extra modules for version 4.15.0 on 64 bit x86 SMP 
ii  linux-modules-4.15.0-38-generic            4.15.0-38.41    amd64        Linux kernel extra modules for version 4.15.0 on 64 bit x86 SMP 
ii  linux-modules-4.19.0-041900-generic        4.19.0-041900.201810221809                  amd64        Linux kernel extra modules for version 4.19.0 on 64 bit x86 SMP

除了 linux-modules-4.19.0-041900-generic 为最新安装的 modules 外,其余均为旧版 modules ,使用如下命令卸载之:

apt-get purge linux-modules-4.15.0-36-generic linux-modules-4.15.0-38-generic -y

更新 grub 系统引导文件

使用如下命令更新 grub 系统引导文件:

update-grub

重启服务器

使用如下命令重启服务器:

reboot

服务器重启之后使用如下命令查看系统内核版本:

uname -a

命令执行后返回值包含 4.19.0-041900-generic 即说明内核安装成功。

开启 bbr

删除 bbr 开启代码

为了避免升级内核重复添加 bbr 开启代码,使用如下命令先删除之:

sed -i '/net\.core\.default_qdisc=fq/d' /etc/sysctl.conf
sed -i '/net\.ipv4\.tcp_congestion_control=bbr/d' /etc/sysctl.conf

添加 bbr 开启代码

使用如下命令添加 bbr 开启代码:

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

添加完成后执行如下命令使之生效:

sysctl -p

查看 bbr 是否开启

执行如下命令,如果返回值中有 bbr ,即说明 bbr 开启成功:

sysctl net.ipv4.tcp_congestion_control

执行如下命令,如果返回值中有 tcp_bbr 模块,即说明 bbr 开启成功:

lsmod | grep bbr

删除临时文件

使用如下命令删除存放内核文件的临时文件夹,清理临时文件:

rm -rf /root/kernel

通过以上步骤便可手动更新 Ubuntu 18.04 的内核到最新稳定版并开启 bbr ,本文结束。