如何在手动安装的 wsl 上 apt 更新 kali?

如何在手动安装的 wsl 上 apt 更新 kali?

我在 Windows 10 上使用 kali wsl(版本 1),并使用此方法将其安装在非 C 驱动器上这里

这是返回uname -r4.4.0-19041-Microsoft

我在 apt update 时遇到此错误:

user@host:~$ sudo apt update
[sudo] password for user:
Get:1 <mirror_site> kali-rolling InRelease [30.5 kB]
Err:1 <mirror_site> kali-rolling InRelease
  The following signatures were invalid: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository <[email protected]>
Fetched 30.5 kB in 2s (12.5 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: <mirror_site> kali-rolling InRelease: The following signatures were invalid: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository <[email protected]>
W: Failed to fetch http://http.kali.org/kali/dists/kali-rolling/InRelease  The following signatures were invalid: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository <[email protected]>
W: Some index files failed to download. They have been ignored, or old ones used instead.

然后我尝试用 修复这个问题gpg --keyserver hkp://keys.gnupg.net --recv-key 7D8D0BF6,得到这个错误:

E: gnupg, gnupg2 and gnupg1 do not seem to be installed, but one of them is required for this operation

所以,我尝试gnupg_2.2.27-2_all.deb从手动安装Debian 软件包。然而,更多的依赖问题出现了。

user@host:~$ sudo dpkg -i gnupg_2.2.27-2_all.deb
(Reading database ... 17159 files and directories currently installed.)
Preparing to unpack gnupg_2.2.27-2_all.deb ...
Unpacking gnupg (2.2.27-2) over (2.2.27-2) ...
dpkg: dependency problems prevent configuration of gnupg:
 gnupg depends on dirmngr (<< 2.2.27-2.1~); however:
  Package dirmngr is not installed.
 gnupg depends on dirmngr (>= 2.2.27-2); however:
  Package dirmngr is not installed.
 gnupg depends on gnupg-l10n (= 2.2.27-2); however:
  Package gnupg-l10n is not installed.
 gnupg depends on gnupg-utils (<< 2.2.27-2.1~); however:
  Package gnupg-utils is not installed.
 gnupg depends on gnupg-utils (>= 2.2.27-2); however:
  Package gnupg-utils is not installed.
 gnupg depends on gpg (<< 2.2.27-2.1~); however:
  Package gpg is not installed.
 gnupg depends on gpg (>= 2.2.27-2); however:
  Package gpg is not installed.
 gnupg depends on gpg-agent (<< 2.2.27-2.1~); however:
  Package gpg-agent is not installed.
 gnupg depends on gpg-agent (>= 2.2.27-2); however:
  Package gpg-agent is not installed.
 gnupg depends on gpg-wks-client (<< 2.2.27-2.1~); however:
  Package gpg-wks-client is not installed.
 gnupg depends on gpg-wks-client (>= 2.2.27-2); however:
  Package gpg-wks-client is not installed.
 gnupg depends on gpg-wks-server (<< 2.2.27-2.1~); however:
  Package gpg-wks-server is not installed.
 gnupg depends on gpg-wks-server (>= 2.2.27-2); however:
  Package gpg-wks-server is not installed.
 gnupg depends on gpgsm (<< 2.2.27-2.1~); however:
  Package gpgsm is not installed.
 gnupg depends on gpgsm (>= 2.2.27-2); however:
  Package gpgsm is not installed.
 gnupg depends on gpgv (>= 2.2.27-2); however:
  Version of gpgv on system is 2.2.12-1.

dpkg: error processing package gnupg (--install):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 gnupg

我不知道这之后下一步该做什么。我真的需要手动下载并安装所有这些依赖项吗?我需要做什么才能使 apt 正常工作?

答案1

好吧,抱歉让您经历如此复杂的过程,但我刚刚找到了一个很多更简单的解决方案。希望这会在其他人将来遇到它时节省一些时间。

要更新密钥环:

> wget https://http.kali.org/kali/pool/main/k/kali-archive-keyring/kali-archive-keyring_2020.2_all.deb
> sudo dpkg -i kali-archive-keyring_2020.2_all.deb

然后您应该可以sudo apt update && sudo apt upgrade正常进行。

礼貌u/桌面回声在 Reddit 和引用的Github 仓库

答案2

这似乎是由于 Microsoft 文档中的过时链接造成的手动安装发行版。链接到的 Kali 软件包是 2019.2,我可以重现您在使用该(过时)软件包时遇到的问题。当然还有更新的 Kali WSL 软件包可用,因为从 Microsoft Store 安装的版本是 2021.2。不幸的是,我不知道该包的直接链接。我已将此作为问题在 MicrosoftDocs\WSL Github 上。

由于 Kali 为 WSL 提供的发行版非常小,并且不包含“正常”发行版中提供的一些工具(例如 GPG),这一事实进一步加剧了问题。因此,您通常遵循的更新密钥的说明在 WSL 上不起作用。

也许有一种方法可以gpg在没有工作的情况下安装所有依赖项apt,但在我看来这是不值得的。

相反,让我提出一种替代安装方法,前提是您需要安装在C:.也就是说,你需要暂时地C:在此过程中,专用(或释放)驱动器上略低于 1GB 的空间。我们可以在最后释放它。

请不要让下面的说明的长度吓到您。我倾向于过于详细,以确保您了解正在发生的事情,并尝试使其尽可能防故障。我亲自测试了下面的整个过程,但如果您遇到任何问题,请告诉我。

  • 首先,删除现有的 Kali 安装。我假设您那里没有任何关键文件,因为我猜您最近安装了。但如果您这样做,请将它们移出 WSL 实例。

    然后,从 PowerShell 或 CMD:

    wsl --unregister kali-linux
    
  • 同时删除您之前下载的(旧的、过时的)包文件。

  • 接下来,转到 Microsoft Store 并安装 Kali。这将把包文件安装在受保护的C:\Program Files\WindowsApps\目录下,这就是我们暂时需要该驱动器上的空间的原因。

  • 假设您正在运行 Windows 终端,请Start-Process wt -Verb RunAs在 PowerShell 中运行以获取管理员提示符。如果不是 Windows 终端,请以管理员身份运行 PowerShell。

  • 在 Admin PowerShell 中,运行Get-ChildItem -Recurse 'C:\Program Files\WindowsApps\Kali*' | Where-Object {$_.Name -eq 'install.tar.gz' } | % { $_.DirectoryName } | Set-Clipboard以获取安装 Kali 软件包的目录。

  • 确认它通过 找到了正确的路径Get-Clipboard。它应该返回类似的东西C:\Program Files\WindowsApps\KaliLinux.54290C8133FEE_1.8.0.0_x64__ey8k8hqnwqnmg。这条路径将来可能会改变(如果您稍后阅读这个答案),但没关系。

  • 退出 Admin Shell 并返回到“普通用户”PowerShell:

    mkdir D:\wsl\instances\kali-linux
    cd D:\wsl\instances\kali-linux
    Get-Clipboard # Confirm that the Kali package path is still on the clipboard
    Copy-Item "$(Get-Clipboard)\*"
    

    这会将包文件复制到D:驱动器。当然,您可以随意设置安装路径。我个人使用一种wsl\instances\distro-name格式,因为我保留了多个发行版和实例。我推荐它用于面向未来,以防您以后需要更多副本。

  • 现在,目标目录中应该有许多文件。就像是:

    Name
    ----
    AppxBlockMap.xml
    AppxManifest.xml
    AppxMetadata/
    AppxSignature.p7x
    Assets/
    install.tar.gz
    kali.exe
    resources.pri
    
  • 从这里开始,您应该回到熟悉的领域。只需运行.\kali.exe,稍等片刻,设置您的用户名和密码,WSL 将启动到 Kali。

  • 退出 Kali 并(返回 PowerShell)从该目录中删除带有Remove-Item Appx*, Assets, install.tar.gz, resources.pri.

  • 对于 WSL1,您最终应该得到:

    • rootfs存储文件系统的目录。重要提示:做不是出于任何原因从 Windows/PowerShell/CMD/记事本/任何其他 Windows 应用程序等访问此内容。那里有龙
    • 一个temp目录
    • fsserver
    • 以及kali.exe我们复制的命令(但没有删除)。恕我直言,它并不是那么有用,但你可能需要它。它用于启动 Kali,但该wsl命令要好得多(更多功能,更好的支持)。
  • 从 Microsoft Store 卸载 Kali 以回收驱动器上的空间C:

您的安装应该是 Microsoft Store 中 Kali 提供的最新、最好的版本。您可以使用 查看 Kali 版本cat /etc/os-release。目前,这是2021.2。 sudo apt update && sudo apt upgrade现在应该可以正常工作了...

相关内容