内核崩溃,Apt 无法更新内核

内核崩溃,Apt 无法更新内核
  • 主机操作系统:macOS Sonoma 14.1
  • 虚拟机管理程序:Parallels 19.1.0 (54729)
  • 客户操作系统:Kali 6.1.0

我有一个在 Parallels 上运行的 Kali Linux VM,我用它来做 Hack The Box、CTF 等。通常每月一次,我会运行sudo apt updatesudo apt upgrade。升级花费的时间比平时长一点,我认为原因是它试图将内核升级到 6.5.0。升级结束时,我注意到一些与新内核软件包相关的安装错误(遗憾的是没有截图)。我不太确定该怎么做,所以我重新启动了。

这导致内核崩溃。我以前在升级期间 Parallels Tools 强制重启时遇到过类似情况。因此我启动到旧内核 (6.1.0),使用以下命令确认uname -r我使用的是 6.1.0,然后使用以下命令列出已安装的内核,结果dpkg --list | grep linux-image显示:

已安装的内核

我尝试使用 删除我认为已损坏的 6.5.0 内核sudo apt remove --purge linux-image-6.5.0-kali3-amd64。它失败了,我注意到错误是非常与我最初升级失败时看到的类似:

Apt 删除失败

我不确定这些错误是什么原因造成的,但我检查了日志文件(见第二张屏幕截图)并看到:

DKMS make.log for parallels-tools-19.0.0.54570 for kernel 6.5.0-kali3-amd64 (x86_64)

Mon Oct 30 09:38:09 PM EDT 2023

Will use compiler CC="gcc-13".

Compiler version "gcc-13 (Debian 13.2.0-4) 13.2.0"

cd prl_tg/Toolgate/Guest/Linux/prl_tg && make CC=gcc-13

make[1]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule.

make[1]: Entering directory '/var/lib/dkms/parallels-tools/19.0.0.54570/build/prl_tg/Toolgate/Guest/Linux/prl_tg'

1: /lib/modules/6.5.0-kali3-amd64/build

2: /var/lib/dkms/parallels-tools/19.0.0.54570/build/prl_tg/Toolgate/Guest/Linux/prl_tg

3: 20231030

4: 1.10.2

Start compile prl_tg...

make -C /lib/modules/6.5.0-kali3-amd64/build M=/var/lib/dkms/parallels-tools/19.0.0.54570/build/prl_tg/Toolgate/Guest/Linux/prl_tg SRCROOT=/var/lib/dkms/parallels-tools/19.0.0.54570/build/prl_tg/Toolgate/Guest/Linux/prl_tg CC=gcc-13 modules

make[2]: Entering directory '/usr/src/linux-headers-6.5.0-kali3-amd64'

1: /lib/modules/6.5.0-kali3-amd64/build

2: /var/lib/dkms/parallels-tools/19.0.0.54570/build/prl_tg/Toolgate/Guest/Linux/prl_tg

3: 20231030
4: 1.10.2

CC [M] /var/lib/dkms/parallels-tools/19.0.0.54570/build/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.o

CC [M] /var/lib/dkms/parallels-tools/19.0.0.54570/build/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg_call.o

In file included from /var/lib/dkms/parallels-tools/19.0.0.54570/build/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg_common.h:25,

from /var/lib/dkms/parallels-tools/19.0.0.54570/build/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg_call.c:11:

/var/lib/dkms/parallels-tools/19.0.0.54570/build/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg_call.c: In function ‘tg_req_map_user_pages’:

/var/lib/dkms/parallels-tools/19.0.0.54570/build/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg_compat.h:63:17: error: too many arguments to function ‘get_user_pages’

63 | get_user_pages(_1, _2, (_3) ? FOLL_WRITE : 0, _4, _5)

| ^~~~~~~~~~~~~~

/var/lib/dkms/parallels-tools/19.0.0.54570/build/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg_call.c:126:15: note: in expansion of macro ‘prl_get_user_pages’

126 | got = prl_get_user_pages(

| ^~~~~~~~~~~~~~~~~~

In file included from /usr/src/linux-headers-6.5.0-kali3-common/include/linux/scatterlist.h:8,

from /usr/src/linux-headers-6.5.0-kali3-common/include/linux/dmapool.h:14,

from /usr/src/linux-headers-6.5.0-kali3-common/include/linux/pci.h:1621,

from /var/lib/dkms/parallels-tools/19.0.0.54570/build/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg_call.c:7:

/usr/src/linux-headers-6.5.0-kali3-common/include/linux/mm.h:2430:6: note: declared here

2430 | long get_user_pages(unsigned long start, unsigned long nr_pages,

| ^~~~~~~~~~~~~~

make[4]: *** [/usr/src/linux-headers-6.5.0-kali3-common/scripts/Makefile.build:248: /var/lib/dkms/parallels-tools/19.0.0.54570/build/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg_call.o] Error 1

make[3]: *** [/usr/src/linux-headers-6.5.0-kali3-common/Makefile:2059: /var/lib/dkms/parallels-tools/19.0.0.54570/build/prl_tg/Toolgate/Guest/Linux/prl_tg] Error 2

make[2]: *** [/usr/src/linux-headers-6.5.0-kali3-common/Makefile:246: __sub-make] Error 2

make[2]: Leaving directory '/usr/src/linux-headers-6.5.0-kali3-amd64'

make[1]: *** [Makefile:44: prl_tg] Error 2

make[1]: Leaving directory '/var/lib/dkms/parallels-tools/19.0.0.54570/build/prl_tg/Toolgate/Guest/Linux/prl_tg'

make: *** [Makefile.kmods:48: compile] Error 2

我真的不知道这一切意味着什么。我假设 Parallels Tools 正在尝试编译内核,但出现了某种错误。所以我决定尝试卸载 Parallels Tools。这说起来容易做起来难,但我最终还是卸载了它。然后我再次尝试删除 6.5.0 内核,成功了:

Apt 删除成功

我运行update-grub2并重新启动。一切顺利,我再次尝试升级以查看 6.5.0 是否能正确安装。但是,新内核没有被拉入并安装。事实上,apt 似乎认为 6.1.0 是最新的内核(它的输出中也这么说)。我运行它apt show linux-image-6.5.0-kali3-amd64并返回了有关该软件包的所有信息。因此,apt 似乎知道新内核,但不知道它是最新的,应该被拉入。我不确定为什么会发生这种情况,我尝试进行一些研究,但我不知道该用 Google 搜索什么。所以我有几个问题:

为什么最初会出现内核恐慌?

我是否采取了正确的步骤来修复它?我还应该做些什么吗?

为什么新内核无法安装以及如何修复?

我绝不是 Linux 专家,所以我想了解如何在未来处理这些问题(如内核崩溃),而无需恐慌地谷歌搜索并运行随机命令。绝对需要积累更多系统管理员类型的知识。

相关内容