Как выполнить обновление для kali на установленном вручную wsl?

РЕДАКТИРОВАТЬ:Я понял, что teeможет читать из оригинала stdin, если к нему ничего не передано, поэтому я подумал, что добавлю другое решение на случай, если оно поможет любому, кто наткнется на это позже.

Спасибо @steeldriver за указание на то, что read -pпечатает в stderr, а не stdout. Так что самое близкое, что у меня есть, это:

read -p "  - This directory is not empty, purge? (Y/N): " choice 2> >(tee -a $mylogs)
echo $choice >> $mylogs

Источник и объяснение происходящего можно найти здесь . В этом конкретном примере первая строка может перенаправить stderrна teeдля печати приглашения в $mylogsи на stdout.

Тем не менее, read, кажется, делает что-то, чтобы сделать невозможным перехват пользовательского ввода и отправку его $mylogs, а не только $choice.

Другое решение проще и короче, но менее удобно для пользователя и читабельно (, если только многие люди не знают, что read— не единственная команда для такого простого чтения ввода):

echo -n "  - This directory is not empty, purge? (Y/N): " | tee -a $mylogs
choice=$(tee -a $mylogs)

Таким образом, во второй строке teeпредоставляет способ предоставить пользователю ввод для как $mylogs, так и $choice, в отличие от read, но, очевидно, нет опции подсказки (-p). Так еще 2 строчки.

Кроме того, вы должны нажать Enter , затем Ctrl + D для отправки. Это может быть плохо для моей ситуации Y / N, но может быть хорошо для многострочных ответов -, поскольку вы можете нажать Enter несколько раз, прежде чем нажимать Ctrl + D , чтобы остановиться.

-1
24.08.2021, 10:35
2 ответа

По всей видимости, это связано с устаревшей ссылкой в ​​документации Microsoft для установки дистрибутивов вручную . Связанный с ним пакет Kali — 2019.2, и я могу воспроизвести проблему, с которой вы столкнулись с этим устаревшим пакетом (). Безусловно, доступен более поздний пакет Kali WSL, потому что из Microsoft Store установлена ​​версия 2021.2. К сожалению, я не знаю прямой ссылки на этот пакет. Я представил это как проблему на MicrosoftDocs\WSL Github.

Проблема усугубляется еще и тем фактом, что Kali, предоставляемый для WSL, является очень минимальным дистрибутивом и не включает некоторые инструменты, такие как GPG, которые были бы предоставлены в «нормальном» дистрибутиве. Таким образом, инструкции, которым вы обычно следуете для обновления ключей, не работают в WSL.

Возможно есть способ установить gpgсо всеми его зависимостями без работающего apt, но на мой взгляд оно того не стоит.

Вместо этого позвольте мне предложить альтернативный метод установки с учетом того, что вам нужно установить на диск, отличный от C:. Тем не менее, вам потребуется временно выделить (или освободить )чуть менее 1 ГБ на C:диске во время этого процесса. Мы можем освободить его в конце.

Пожалуйста, пусть вас не пугает длина приведенных ниже инструкций. Я склонен быть слишком подробным, чтобы убедиться, что вы понимаете, что происходит, и попытаться сделать это как можно более надежным. Я проверил весь процесс ниже лично,но дайте мне знать, если у вас возникнут проблемы.

  • Сначала удалите существующую установку Kali. Я предполагаю, что у вас нет критических файлов, так как я предполагаю, что вы недавно установили. Но если вы это сделаете, переместите их из экземпляра WSL.

    Затем из PowerShell или CMD:

    wsl --unregister kali-linux
    
  • Также удалите (старые, устаревшие )файлы пакета, загруженные ранее.

  • Затем перейдите в Microsoft Store и установите Kali. Это позволит установить файлы пакета в защищенный каталог C:\Program Files\WindowsApps\, поэтому нам временно нужно место на этом диске.

  • Предполагая, что вы используете Windows Terminal, запустите 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намного лучше (больше возможностей, лучше поддерживается ).
  • Удалите Kali из Microsoft Store, чтобы освободить место на диске C:.

Ваша установка должна быть самой последней и лучшей из доступных в Kali в Microsoft Store. Вы можете проверить выпуск Kali с помощью cat /etc/os-release. В настоящее время это 2021.2. sudo apt update && sudo apt upgradeтеперь должно работать нормально...

0
24.08.2021, 21:03

Что ж, извините, что вам пришлось пройти через такой сложный процесс, но я только что нашел гораздо более простое решение. Надеюсь, это сэкономит кому-то время, если они столкнутся с этим в будущем.

Чтобы обновить связку ключей:

> 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/desktopecho на Reddit и указанном репозитории Github .

0
12.09.2021, 00:05

Теги

Похожие вопросы