我在一家托管公司有一台 VPS 服务器,我拥有 ssh/root 访问权限。我最近尝试将内核升级到最新版本 (4.18.5-041805-generic)。我之前运行的是 4.4.0-169,觉得是时候升级了。
所以我运行了以下命令:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
毕竟,内核版本仍然保持不变。因此,经过搜索,我找到了这套说明:
https://www.howtoing.com/upgrade-kernel-in-ubuntu/
我按照说明尝试安装最新的内核版本。接近尾声时,它生成了一个错误,表明它未配置,但当我运行“uname -rs”时,它列出了新内核:
~$ uname -rs
Linux 4.18.5-041805-generic
但是,现在当我尝试确保其他所有内容再次更新时,我收到依赖项错误:
~$ sudo apt-get update && sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
linux-headers-4.19.0-041900rc1-generic : Depends: libssl1.1 (>= 1.1.0) but it is not installable
linux-image-unsigned-4.19.0-041900rc1-generic : Depends: linux-modules-4.19.0-041900rc1-generic but it is not installable
E: Unmet dependencies. Try using -f.
所以,我想回到旧的 4.4.0-169-generic 内核,但我不知道如何做到这一点。我在搜索中找到的每条指令都说使用键盘快捷键来中断 grub,然后选择不同的内核。
问题是我在 VPS 云服务器上运行,并且没有连接到服务器的物理键盘。我只有通过 ssh 窗口进入服务器才能完成任何操作。
如何删除产生依赖性问题的新内核并恢复使用以前的内核启动?
答案1
看看例如这个答案,您可以从终端更改两个内核的引导顺序。该答案中获得大力支持的评论还建议使用内核的全名,而不是其数字索引,以获得更好的稳定性。
简而言之:
sudo view /boot/grub/grub.cfg
并复制旧内核的全名。sudo vi /etc/default/grub
然后,在顶部更改GRUB_DEFAULT=0
为 readGRUB_DEFAULT=your_kernel_name_from_grub.cfg
,然后保存更改(为了安全起见,您可能希望保留原始文件的副本)。sudo update-grub
。
然后重新启动应该会让你回到旧的内核。如果您想要快速修复,您可能只需更改GRUB_DEFAULT=0
为GRUB_DEFAULT=1
in /etc/default/grub
(然后sudo update-grub
重新启动),但上述过程不那么脆弱。
答案2
您所遵循的教程在以下位置有更好的解释:内核:主线构建 - Ubuntu Wiki。另请参阅同一篇 Wiki 文章的第 4 节以获取删除说明。
笔记:只因为有一个dist-upgrade
并不一定意味着该升级中有内核升级。 请参阅Ubuntu 软件包存储库:linux-image-generic