204. Linux系统管理

内核安装

方法1

apt安装

  1. 执行以下命令安装

    1
    sudo apt-get install linux-image-4.15.0-20-generic

    (这个包名按自己想要的版本改)

  2. 查看是否安装成功

    1
    dpkg --get-selections| grep linux-image-4.15.0-20-generic

方法2

编译安装

  1. 下载内核源码:www.kernel.org

    下载历史版本

    1. 首页选择 HTTP

    2. linux

    3. kernel

    4. 选择版本

    5. 选择你的目标版本

  2. 配置

    为了简便, 可以在当前系统的config文件基础上进行, 假设当前工作目录是源码所在目录

    1
    cp /boot/config-$(uname -r) .config

    然后执行配置操作: make oldconfigmaek menuconfig 设置配置项

  3. 编译

    1. 安装依赖

      1
      apt install kernel-package libncurses5-dev
    2. 编译

      1
      2
      make-kpkg clean
      make-kpkg --initrd kernel-headers kernel_image

      注: 多线程编译 make-kpkg --initrd kernel-headers kernel_image -j$(nproc) &> info.log & tail -f info.log

    3. 在上一级目录生成两个 .deb 文件

  4. 安装

    1
    2
    3
    cd ..
    dpkg -i *.deb
    reboot
  5. 安装内核后的结果

    1. 安装了linux-headers文件

      创建了 /usr/src/linux-headers-5.4.0 目录, 其中

      • 存放了用于编译内核模块的若干Makefile文件、Kconfig文件
      • include子目录存放了若干头文件
    2. 建立 /lib/modules/5.4.0 目录

      • build和source均是符号连接, 指向编译内核时的源码目录
      • kernel目录, 保存了编译好的各个内核模块文件
    3. /boot 增加的文件

      • config-5.4.0: 配置文件
      • initrd.img-5.4.0
      • System.map-5.4.0: 符号表
      • vmlinuz-5.4.0:内核映像
    4. /boot/grub/grub.cfg: 存放了grub各种启动时的菜单选项

    QAs

    1. /bin/sh: 1: flex: not found

      1
      apt-get install -y flex
    2. /bin/sh: 1: bison: not found

      1
      apt-get install -y bison
    3. 如果报错canonical-certs.pem

      1
      scripts/config --disable SYSTEM_TRUSTED_KEYS
    4. 如果报错 canonical-revoked-certs.pem

      1
      scripts/config --disable SYSTEM_REVOCATION_KEYS
    5. 编译内核出现错误debian/stamp/build/kernel及解决方案

      修改 .config 的内容为

      1
      CONFIG_SYSTEM_TRUSTED_KEYS=""

内核选择

  1. 查看grub版本

    1
    grub-install --version

    记住(GRUB)之后的大版本是2.00以后还是2.00以前

  2. 查看自己现有的内核版本(完全版)

    1
    grep 'menuentry' /boot/grub/grub.cfg
    1. 方法2: 特定版本查找

      这个5.15.0-102-generic具体怎么改去 /boot/grub/grub.cfg 这个文件里面找

      1
      cat /boot/grub/grub.cfg | grep 5.15.0-102-generic
  3. 找到自己想换回的内核

    1. 例如,这里我想要更换为5.15.0-102-generic,就找到对应的选项:

      1
      2
      menuentry 'Ubuntu, with Linux 5.15.0-102-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-102-generic-advanced-7b69c9c6-4acb-4713-8167-caba8ee7aea2' {
      这一选项,**注意不是(recovery mode)**
    2. 复制上面信息中menuentry之后的单引号内的字符串

      比如我是Ubuntu, with Linux 5.15.0-102-generic

  4. 修改/etc/default/grub文件

    1
    sudo vim /etc/default/grub

    找到 GRUB_DEFAULT=0, 修改为

    1
    GRUB_DEFAULT="Ubuntu, with Linux 5.15.0-102-generic"
  5. wq,然后执行以下命令更新 Grub 引导

    1
    sudo update-grub

    如果看到下面有

    1
    Warning: Please don't use old title `Ubuntu, with Linux 5.15.0-102-generic' for GRUB_DEFAULT, use `Advanced options for Ubuntu>Ubuntu, with Linux 5.15.0-102-generic' (for versions before 2.00) or `gnulinux-advanced-7b69c9c6-4acb-4713-8167-caba8ee7aea2>gnulinux-5.15.0-102-generic-advanced-7b69c9c6-4acb-4713-8167-caba8ee7aea2' (for 2.00 or later)

    根据grub-install --version得到的grub版本,如果大于等于2.00,则返回第四步把第三个单引号内的字符串复制粘贴; 否则把第二个单引号内的字符串复制粘贴.

    也就是说一定要重新修改一次grub, 例如:

    • grub版本大于等于2.00,则再次将之前的GRUB_DEFAULT="Ubuntu, with Linux 5.15.0-102-generic"修改为 GRUB_DEFAULT="gnulinux-advanced-7b69c9c6-4acb-4713-8167-caba8ee7aea2>gnulinux-5.15.0-102-generic-advanced-7b69c9c6-4acb-4713-8167-caba8ee7aea2"
    • grub版本小于2.00,则再次将之前的GRUB_DEFAULT="Ubuntu, with Linux 5.15.0-102-generic"修改为 GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.15.0-102-generic"
  6. 修改完成后,再次在终端中输入

    1
    sudo update-grub

    此时, 不应看到上一步的警告

  7. 更新完成后重启系统

    1
    sudo reboot

    注意,此时grub引导时光标默认指向的应该是Ubuntu高级选项之类的选项,不要移动光标,让它自动选择启动

  8. 重启之后不出意外(ps:我的出了点意外,重启起不来了)就是新内核了,查看一下

    1
    uname -r

    如果已经变成你想要改的内核版本,则继续,否则检查是否忘了sudo update-grub或者grub修改错误

删除内核

  1. 查看当前的所有已安装的内核

    1
    dpkg --get-selections | grep linux-image

    输出:

  2. 找到原有内核名字, 如: linux-image-5.15.0-101-generic

  3. 删除内核

    1
    2
    sudo apt-get remove linux-image-5.15.0-101-generic
    sudo dpkg -P linux-image-5.15.0-101-generic
  4. 修改/etc/default/grub的GRUB_DEFAULT=0,以及sudo update-grub