Apt

如何在手動安裝的 wsl 上更新 kali?

  • January 19, 2022

我在 Windows 10 上使用 kali wsl(version 1),並在這裡使用這種方法將它安裝在非 C 驅動器上。

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

apt更新時出現此錯誤:

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 <devel@kali.org>
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 <devel@kali.org>
W: Failed to fetch http://http.kali.org/kali/dists/kali-rolling/InRelease  The following signatures were invalid: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository <devel@kali.org>
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

所以,我嘗試從Debian Packagegnupg_2.2.27-2_all.deb手動安裝。但是,出現了更多的依賴問題。

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 工作?

這似乎是由於 Microsoft 文件中用於手動安裝發行版的過時連結造成的。連結到那裡的 Kali 包是 2019.2,我可以重現您在使用該(過時的)包時遇到的問題。當然有更高版本的 Kali WSL 包可用,因為從 Microsoft Store 安裝的版本是 2021.2。不幸的是,我不知道該軟體包的直接連結。我已將此作為問題送出到 MicrosoftDocs\WSL Github 上。

Kali 為 WSL 提供的發行版是一個非常小的發行版,並且不包括一些工具,例如 GPG,這些工具將在“正常”發行版中提供,這一事實進一步加劇了這個問題。因此,您通常遵循的更新密鑰的說明不適用於 WSL。

也許有一種方法可以在gpg沒有工作的情況下安裝其所有依賴項apt,但在我看來這是不值得的。

相反,讓我提出一種替代安裝方法,但需要了解您需要安裝在C:. 也就是說,在此過程中,您將需要在驅動器上臨時專用(或釋放)略低於 1GB 的空間。C:我們可以在最後釋放它。

請不要讓以下說明的長度嚇到您。我傾向於過於詳細,以確保您了解正在發生的事情,並嘗試使其盡可能防故障。我已經親自測試了下面的整個過程,但是如果您遇到任何麻煩,請告訴我。

  • 首先,刪除現有的 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現在應該可以正常工作了…

引用自:https://unix.stackexchange.com/questions/666046