- 主机操作系统:macOS Sonoma 14.1
- 虚拟机管理程序:Parallels 19.1.0 (54729)
- 客户操作系统:Kali 6.1.0
我有一个在 Parallels 上运行的 Kali Linux VM,我用它来做 Hack The Box、CTF 等。通常每月一次,我会运行sudo apt update
并sudo 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
。它失败了,我注意到错误是非常与我最初升级失败时看到的类似:
我不确定这些错误是什么原因造成的,但我检查了日志文件(见第二张屏幕截图)并看到:
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 内核,成功了:
我运行update-grub2
并重新启动。一切顺利,我再次尝试升级以查看 6.5.0 是否能正确安装。但是,新内核没有被拉入并安装。事实上,apt 似乎认为 6.1.0 是最新的内核(它的输出中也这么说)。我运行它apt show linux-image-6.5.0-kali3-amd64
并返回了有关该软件包的所有信息。因此,apt 似乎知道新内核,但不知道它是最新的,应该被拉入。我不确定为什么会发生这种情况,我尝试进行一些研究,但我不知道该用 Google 搜索什么。所以我有几个问题:
为什么最初会出现内核恐慌?
我是否采取了正确的步骤来修复它?我还应该做些什么吗?
为什么新内核无法安装以及如何修复?
我绝不是 Linux 专家,所以我想了解如何在未来处理这些问题(如内核崩溃),而无需恐慌地谷歌搜索并运行随机命令。绝对需要积累更多系统管理员类型的知识。