我刚刚为 Windows Subsystem for Linux 安装了 Ubuntu 22.04 LTS,但遇到了一些问题。每次我使用 安装新软件包时sudo apt install
,我都会收到 2 条消息,内容如下:
Failed to retrieve available kernel versions.
Failed to check for processor microcode upgrades.
使用 Ubuntu 20.04 LTS 时不会发生此问题。
尽管我收到了这些消息,但我可以安装 Linux 软件包并将其成功集成到 Visual Studio Code 中。当我使用 检查内核时uname -r
,我得到了5.10.102.1-microsoft-standard-WSL2
。
一切正常,但是这些信息一直让我担心。
我想知道为什么会出现这些消息以及如何修复它们。有人能给我一些建议来解决这些问题吗?这些消息是致命的吗?
答案1
简短回答:
sudo -e /etc/needrestart/needrestart.conf
注意:-e
使用默认系统编辑器。如果你想使用其他编辑器,只需运行sudo update-alternatives --config editor
取消注释并更改以下设置:
$nrconf{kernelhints} = 0;
$nrconf{ucodehints} = 0;
安装软件包时您将不再收到这些警告。
更多细节:
这与同一“问题”的背景类似发生在 Raspberry Pi 上,但根本原因略有不同。
真的没什么可担心的。这是 Ubuntu 在安装软件包后进行的(最近)新检查,以确定是否需要采取其他操作。
处理此问题(并导致这些警告)的软件包是needrestart
。来自apt show needstart
:
Description: check which daemons need to be restarted after library upgrades
needrestart checks which daemons need to be restarted after library upgrades.
It is inspired by checkrestart from the debian-goodies package.
Features:
- supports (but does not require) systemd
- binary blacklisting (i.e. display managers)
- tries to detect required restarts of interpreter based daemons
(supports Java, Perl, Python, Ruby)
- tries to detect required restarts of containers (docker, LXC)
- tries to detect pending kernel upgrades
- tries to detect pending microcode upgrades for Intel CPUs
- could be used as nagios check_command
- fully integrated into apt/dpkg using hooks
由于我们在 WSL2 VM 内的容器中运行 Ubuntu(我们无法访问),因此在 WSL2 下,内核和微代码都无法正确报告。但是,根据上述信息,可能在某些情况下它可能会派上用场,具体取决于您运行的其他守护进程或容器。
您可以继续使用其余功能,而无需使用上述配置文件更改进行内核/微码检查。它们是否有用取决于您的 WSL2 用例。
或者,如果您发现额外的输出没有用处,您可以通过以下方式完全删除该功能(按照 Raspberry Pi 问题中的指导):
sudo apt-get purge needrestart
就我个人而言,我还不确定将此软件包作为 WSL2 默认 22.04 根文件系统的一部分是否真的有意义。但时间会证明一切。不过,我确信很多人在开始在 WSL 中安装 22.04 时都会有这个问题。
WSL1 用户
但是,如果您使用的是 WSL1,我在此阶段的调查建议是完全删除该软件包。用于检查过时软件包的过程似乎在 WSL1 的系统调用转换“伪内核”下不起作用,并且您会定期收到有关运行过时的二进制文件和库的needrestart
误报,包括、和(等等)。needrestart
sh
apt
init