204. Linux系统管理
内核安装
方法1
apt安装
执行以下命令安装
1
sudo apt-get install linux-image-4.15.0-20-generic
(这个包名按自己想要的版本改)
查看是否安装成功
1
dpkg --get-selections| grep linux-image-4.15.0-20-generic
方法2
编译安装
下载内核源码:www.kernel.org
下载历史版本
首页选择
HTTP
linux
kernel
选择版本
选择你的目标版本
配置
为了简便, 可以在当前系统的config文件基础上进行, 假设当前工作目录是源码所在目录
1
cp /boot/config-$(uname -r) .config
然后执行配置操作:
make oldconfig
或maek menuconfig
设置配置项编译
安装依赖
1
apt install kernel-package libncurses5-dev
编译
1
2make-kpkg clean
make-kpkg --initrd kernel-headers kernel_image注: 多线程编译
make-kpkg --initrd kernel-headers kernel_image -j$(nproc) &> info.log & tail -f info.log
在上一级目录生成两个
.deb
文件
安装
1
2
3cd ..
dpkg -i *.deb
reboot安装内核后的结果
安装了linux-headers文件
创建了
/usr/src/linux-headers-5.4.0
目录, 其中- 存放了用于编译内核模块的若干Makefile文件、Kconfig文件
- include子目录存放了若干头文件
建立
/lib/modules/5.4.0
目录- build和source均是符号连接, 指向编译内核时的源码目录
- kernel目录, 保存了编译好的各个内核模块文件
/boot
增加的文件config-5.4.0
: 配置文件initrd.img-5.4.0
System.map-5.4.0
: 符号表vmlinuz-5.4.0
:内核映像
/boot/grub/grub.cfg
: 存放了grub各种启动时的菜单选项
QAs
/bin/sh: 1: flex: not found
1
apt-get install -y flex
/bin/sh: 1: bison: not found
1
apt-get install -y bison
如果报错
canonical-certs.pem
1
scripts/config --disable SYSTEM_TRUSTED_KEYS
如果报错
canonical-revoked-certs.pem
1
scripts/config --disable SYSTEM_REVOCATION_KEYS
编译内核出现错误
debian/stamp/build/kernel
及解决方案修改
.config
的内容为1
CONFIG_SYSTEM_TRUSTED_KEYS=""
内核选择
查看grub版本
1
grub-install --version
记住(GRUB)之后的大版本是2.00以后还是2.00以前
查看自己现有的内核版本(完全版)
1
grep 'menuentry' /boot/grub/grub.cfg
方法2: 特定版本查找
这个
5.15.0-102-generic
具体怎么改去 /boot/grub/grub.cfg 这个文件里面找1
cat /boot/grub/grub.cfg | grep 5.15.0-102-generic
找到自己想换回的内核
例如,这里我想要更换为5.15.0-102-generic,就找到对应的选项:
1
2menuentry '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)**复制上面信息中
menuentry
之后的单引号内的字符串比如我是
Ubuntu, with Linux 5.15.0-102-generic
修改/etc/default/grub文件
1
sudo vim /etc/default/grub
找到
GRUB_DEFAULT=0
, 修改为1
GRUB_DEFAULT="Ubuntu, with Linux 5.15.0-102-generic"
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"
- grub版本大于等于2.00,则再次将之前的
修改完成后,再次在终端中输入
1
sudo update-grub
此时, 不应看到上一步的警告
更新完成后重启系统
1
sudo reboot
注意,此时grub引导时光标默认指向的应该是Ubuntu高级选项之类的选项,不要移动光标,让它自动选择启动
重启之后不出意外(ps:我的出了点意外,重启起不来了)就是新内核了,查看一下
1
uname -r
如果已经变成你想要改的内核版本,则继续,否则检查是否忘了
sudo update-grub
或者grub修改错误
删除内核
查看当前的所有已安装的内核
1
dpkg --get-selections | grep linux-image
输出:
找到原有内核名字, 如:
linux-image-5.15.0-101-generic
删除内核
1
2sudo apt-get remove linux-image-5.15.0-101-generic
sudo dpkg -P linux-image-5.15.0-101-generic修改/etc/default/grub的
GRUB_DEFAULT
为=0
,以及sudo update-grub