Skip to content

Latest commit

 

History

History
159 lines (110 loc) · 8.46 KB

wsl.md

File metadata and controls

159 lines (110 loc) · 8.46 KB

WSL

Настройка сети

При установке wsl создается сеть между комньютером windows и виртуальной ubuntu wsl. Эта сеть по умолчанию не имеет связь с локальной сетью, в которой находится компьютер windows. Для решения этой проблемы нужно выбрать одини из алгоритмов

  1. пробросить порты через прокси
  2. сделать зеркальную сеть (не работает на windows 10, работает на windows 11). Hyper-V Firewall не работает на windows 10
  3. сделать мост между сетями (не заработало). Рабочий вариант с мостом тут (нестабильное решение)

Если нужно сбросить настройки сети в wsl, то команды вот тут

Самым простым решением является обновление windows до 11 версии, после которого нужно сделать зеркальную сеть с WSL

Зеркальная сеть WSL

  1. Устанавливается windows 11
  2. В конфиге .wslconfig пишется следующее
[wsl2]
networkingMode=mirrored

После этого у машины wsl будет такой же адрес, как у хоста (компьютера windows)

  1. Для назначения вебсерверам, находящимся на wsl, адреса хоста нужно пропиcать в конфиге следующее
[experimental]
hostAddressLoopback=True

по итогу конфиг выглядит так

[wsl2]
networkingMode=mirrored
memory=29GB
[experimental]
hostAddressLoopback=True
autoMemoryReclaim=gradual
  1. В консоли powershell вводите команду из официального гайда. Важно! Без этой команды Firewall Hyper-V не разрешит внешние подключения к wsl
Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow

Запуск скриптов из windows в wsl

Для создания .bat скрипта для запуска jupyter server нужно

  1. создать .bat файл следующего содержания. Чтобы предотвратить закрытие консоли после ошибки добавим строчку отсюда
@echo off
if not defined in_subprocess (cmd /k set in_subprocess=y ^& %0 %*) & exit )
wsl -e bash -c "cd; ./jupyter_start.sh"
  1. в wsl нужно создать jupyter_start.sh скрипт и внутри написать
source ~/anaconda3/etc/profile.d/conda.sh

conda activate torch

jupyter lab

Запуск сложных скриптов из windows в wsl

res=subprocess.run('wsl -e bash -c "echo $(($(getconf _PHYS_PAGES) * $(getconf PAGE_SIZE) / (1024 * 1024)))" ', capture_output=True)
res=subprocess.run(['wsl', '-e', 'bash', '-c', 'ps -eo rss | awk \'{sum+=$1} END {print sum/1024}\''], capture_output=True, text=True)

Перенос WSL на другой диск

Для переноса есть хороший короткий гайд на форуме

После переноса нужно обязательно назначить пользователя wsl по умолчанию

ubuntu config --default-user YourUsername

После нужно сделать версию wsl по умолчанию в системе

wsl --set-default Ubuntu

Доступ к файлам WSL из windows

Из файловой системы windows есть доступ к файловой системе wsl. В адресную строку проводника нужно ввести

 \\wsl.localhost\Ubuntu\

Автостарт WSL при включении windows

Для автостарта нужно создать батник и скачать программу nircmd. Решение взято отсюда. Затем батник нужно положить в папку автостарт в windows

@start /b X:\nircmd.exe execmd wsl -d ubuntu22
@start /b X:\nircmd.exe execmd wsl -d ubuntu24

Работа с .vhdx файлом WSL

Для каждого запущенного дистрибутива создается свой виртуальный жесткий диск. Для извлечения файлов из него есть 2 способа

Конвертировать .vhdx в .vhd

Конвертировать при помощи gemu-img или других программ .vhdx в .vhd и подключить полученный файл в качестве диска в виртуалке Virtualbox/VMware. Решение описано тут.

Важно!

  1. Конвертация может быть очень долгой, если виртуальный диск большой. Диск размером 170 гб почему-то восприинимается, как диск размером в 1 тб. По этой причине обход всех секторов при помощи r-studio/r-linux по предварительной оценке займет несколько суток
  2. Открыть .vhdx каким-нибудь редактором нельзя. Это полноценный виртуальный жесткий диск с своими секторами

Добавить в список wsl дистрибутивов .vhdx файл

Самый простой и эффективный способ открыть .vhdx - создать из него виртуальную машину командой

wsl --import-in-place <distro-name> <path-to-vhdx>

Удалить дистрибутив можно командой ниже. Важно! Эта команда удаляет виртуальный диск из директории системы

wsl --unregister <distro-name>

WSL Manager

Инструмент для управления более одним wsl дистрибутивом. Для использования этого менеджера нужно скачать исходный код с страницы релиза и затем сбилдить его при помощи flutter

Решение ошибок

Ошибка

Ошибка ниже решается включением systemd в дистрибутиве wsl. Ошибка описана тут

System has not been booted with systemd as init system (PID 1). Can't operate.

Failed to connect to bus: Host is down Failed to talk to init daemon.

Для решения нужно в в файле wsl.conf

sudo -e /etc/wsl.conf

написать строки ниже

[boot]
systemd=true