[[ Знакомство с WSL 2 на Windows 10 ]]

Windows

Знакомство с WSL 2 на Windows 10

Windows 10 Pro 21H2 19044

WSL 2 - это новая версия архитектуры подсистемы Windows для Linux, чтобы запускать двоичные файлы Linux ELF64 в Windows.

Т.е. можно запускать приложения Linux, в том числе c GUI, на Windows.

Однако, это не является полноценной виртуализацией, скорее контейнеризация, поэтому полноценный Linux Desktop заменить не сможет, по крайней мере на данный момент.

На сайте Microsoft довольная хорошая документация, обязательно к ознакомлению:

https://docs.microsoft.com/ru-ru/windows/wsl/about
https://docs.microsoft.com/ru-ru/windows/wsl/faq


Установка WSL 2

https://docs.microsoft.com/ru-ru/windows/wsl/install

В документации нам предлагают использовать wsl --install - эта команда позволяет включить необходимые дополнительные компоненты, скачать последнюю версию ядра Linux, установить WSL 2 в качестве компонента по умолчанию и установить дистрибутив Linux (по умолчанию Ubuntu).

Но это было бы слишком просто, сделаем все по шагам вручную https://docs.microsoft.com/ru-ru/windows/wsl/install-manual


Установка компонентов

Установку компонентов можно выполнить через GUI
Параметры → Приложения и возможности → Дополнительные компоненты → Другие компоненты Windows

Либо через консоль cmd или PowerShell (запустить от имени Администратора)

# cmd
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /norestart


# PowerShell
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux -NoRestart
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -NoRestart

Выполнить перезагрузку

WSL 2 использует архитектуру Hyper-V для включения виртуализации. Эта архитектура будет доступна в качестве дополнительного компонента Virtual Machine Platform (Платформа виртуальной машины)

Если этот компонент не установлен, то будет работать WSL 1, а при попытке использовать WSL 2 выдаст сообщение:

Включите функцию Windows для платформы виртуальной машины и убедитесь в том, что в BIOS включена виртуализация.
Дополнительные сведения см. на странице https://aka.ms/wsl2-install


Настройка WSL

Выбор WSL 2 в качестве версии по умолчанию

> wsl --set-default-version 2
Для получения сведений о ключевых различиях с WSL 2 перейдите на страницу https://aka.ms/wsl2
Операция успешно завершена.

Скачать (если выполняется первый раз) и/или обновить Linux ядро для WSL 2

> wsl --update
Проверяется наличие обновлений...
Скачивание обновлений...
Выполняется установка обновлений...
Это изменение вступит в силу при следующем полном перезапуске WSL. Чтобы выполнить перезапуск, выполните команду "wsl --shutdown".
Версия ядра: 5.10.102.1

Посмотреть статус

> wsl --status
Версия по умолчанию: 2
 
Подсистема Windows для Linux в последний раз обновлена 06.07.2022
Включены автоматические обновления WSL.
 
Версия ядра: 5.10.102.1

Можно создать файл .wslconfig для глобальной настройки параметров WSL 2

%USERPROFILE%\.wslconfig

[wsl2]
kernel=<path>              # An absolute Windows path to a custom Linux kernel.
memory=<size>              # How much memory to assign to the WSL2 VM.
processors=<number>        # How many processors to assign to the WSL2 VM.
swap=<size>                # How much swap space to add to the WSL2 VM. 0 for no swap file.
swapFile=<path>            # An absolute Windows path to the swap vhd.
localhostForwarding=<bool> # Boolean specifying if ports bound to wildcard or localhost in the WSL2 VM should be connectable from the host via localhost:port (default true).

# <path> entries must be absolute Windows paths with escaped backslashes, for example C:\\Users\\Ben\\kernel
# <size> entries must be size followed by unit, for example 8GB or 512MB

Например у меня много памяти и я хочу сберечь свой SSD отключив SWAP По умолчанию SWAP file расположен

%USERPROFILE%\AppData\Local\Temp\swap.vhdx

После изменения в .wslconfig требуется перезагрузка

wsl --shutdown

После команды shutdown все запущенные Linux контейнеры будут остановлены.

Или можно перезагрузить службу LxssManager, что будет иметь такой же эффект

# PowerShell
Restart-Service LxssManager


Установка дистрибутива

Посмотреть текущие дистрибутивы

> wsl --list --verbose
Нет установленных дистрибутивов подсистемы Windows для Linux.
Дистрибутивы можно установить из Microsoft Store:
https://aka.ms/wslstore

Посмотреть доступные дистрибутивы

> wsl --list --online
Ниже приведен список допустимых распределений, которые можно установить.
Установите с помощью команды wsl --install -d <Distro>.
 
NAME            FRIENDLY NAME
Ubuntu          Ubuntu
Debian          Debian GNU/Linux
kali-linux      Kali Linux Rolling
openSUSE-42     openSUSE Leap 42
SLES-12         SUSE Linux Enterprise Server v12
Ubuntu-16.04    Ubuntu 16.04 LTS
Ubuntu-18.04    Ubuntu 18.04 LTS
Ubuntu-20.04    Ubuntu 20.04 LTS

Дистрибутив Linux устанавливается как приложение Windows app или UWP app

На данный момент в Microsoft Store доступна Ubuntu-22.04, а через консоль нет :-(

Установка Ubuntu-20.04 через консоль

> wsl --install -d Ubuntu-20.04
Загрузка: Ubuntu 20.04 LTS
Выполняется установка: Ubuntu 20.04 LTS
Установка «Ubuntu 20.04 LTS» выполнена.
Запуск Ubuntu 20.04 LTS...

Если сообщение висит долго, нажмите ENTER

Такой баг я встречал и в других диалогах, так что следует это запомнить.

Вводим имя пользователя и пароль для Ubuntu, они произвольные и не как не связаны с Windows логином. Над паролем лучше не мудрить и сделать простым.

Я сразу отключу требование ввода пароля для sudo, например можно отредактировать правило в /etc/sudoers через команду

sudo sed 's/\(^%sudo\s.*\)/%sudo ALL=(ALL:ALL) NOPASSWD:ALL/' /etc/sudoers -i

Посмотреть текущие дистрибутивы

> wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2      

'*' отмечен дистрибутив по умолчанию, т.е. при выполнении команд wsl они будут применены к нему


Настройка дистрибутива

Можно создать файл /etc/wsl.conf для настройки дополнительных параметров внутри конкретного дистрибутива.

Под Linux я запускал VPN, поэтому мне понадобилось отключить управление файлом /etc/resolv.conf
Почему так происходит и какие подводные камни.
Открыл терминал, запустил VPN, который прописал DNS для использования внутреннего корпоративного домена.
И это работает до момента, когда открываешь еще один терминал или выполняешь команду через wsl, например даже такую

wsl ls
В этот момент WSL актуализирует resolv.conf и перетирает его, точнее это символическая ссылка, а сам файл расположен тут:
/etc/resolv.conf -> ../run/resolvconf/resolv.conf

Нужно создать конфиг

/etc/wsl.conf

[network]
generateResolvConf = false

Перезагрузить

wsl --shutdown

Зайти в терминал Linux удалить ссылку, т.к. она уже будет ссылаться на несуществующий файл и создать новый файл

rm /etc/resolv.conf
ip -4 route show default | awk '{print "nameserver",$3}' > /etc/resolv.conf

Однако IP адрес в WSL не статический и поменяется после перезагрузки Windows, что же делать в таком случае.
Все зависит от вашего сценария использования, например можно добавить задачу в Планировщик заданий (Task Scheduler) , что бы выполняла настройку после загрузки Windows.

Параметр [boot], для выполнения команд при первой загрузке доступен только в Windows 11.


Импорт дистрибутива

Можно установить любой другой дистрибутив, создать самому или клонировать существующий.

wsl --import <Distro> <Расположение установки> <Имя файла> [Параметры]
        Импортирует указанный tar-файл как новое распределение.
        Для стандартной загрузки имя файла может быть «-».

В рамках этой статьи я не буду рассматривать этот функционал см. https://docs.microsoft.com/ru-ru/windows/wsl/use-custom-distro


Удаление дистрибутива

Выполняется очень просто

> wsl --unregister Ubuntu-20.04
Отмена регистрации...


Файловая система

Файловая система WSL дистрибутива Linux хранится в VHD файле в каталоге

%USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx

Доступ есть через проводник по адресу

\\wsl$

Из Linux так же есть доступ в дискам Windows

ls -la /mnt/c/
ls -la /mnt/d/


Статический IP адрес

По мере использования WSL, можно столкнуться с этим вопросом.

Обсуждение https://github.com/microsoft/WSL/issues/4210

При первом запуске WSL создается интерфейс «vEthernet (WSL)» с случайной подсетью из диапазона приватной сети 172.16.0.0/12
т.е. после перезагрузки Windows сеть поменяется.

По итогу без костылей обойтись не получится.

Можно использовать скрипты, где каждый раз получать ip адрес и использовать его дальше по сценарию, как пример:

.bat

FOR /F %%i IN ('wsl -d Ubuntu-20.04 hostname -I') DO set WSLIP=%%i
echo %WSLIP%
netsh interface portproxy add v4tov4 listenport=8088 connectport=80 connectaddress=%WSLIP%

.bashrc

export DISPLAY=$(ip route list default | awk '{print $3}'):0
export LIBGL_ALWAYS_INDIRECT=1

Есть готовые скрипты, которые переконфигурируют интерфейс в Windows, а затем eth0 внутри Linux.
Например можно глянуть https://github.com/skorhone/wsl2-custom-network, https://github.com/ocroz/wsl2-boot


Запуск графических приложений

https://docs.microsoft.com/ru-ru/windows/wsl/tutorials/gui-apps
Для доступа к этой функции потребуется Windows 11 сборке 22000 или более поздней версии.

Т.к. в данной статье у нас Windows 10, то необходимо установить X-сервер для операционной системы Microsoft Window.
Например VcXsrv

Я установил Xming

Для безопасности в файле C:\Program Files (x86)\Xming\X0.hosts указаны хосты, с которых разрешены подключения, но ip адрес у нас динамический, а указать подсеть в файле нельзя, поэтому придется запускать через ярлык XLaunch, т.к. там есть возможность выключить контроль доступа.

Выключаем проверку доступа

Конфиг XLaunch можно сохранить и в дальнейшем запускать через него.

В Linux есть мини программы, как раз подойдут для проверки, установим их

sudo apt-get install x11-apps

Выполним экспорт переменной DISPLAY, в дальнейшем эту команду можно записать в ~/.bashrc

export DISPLAY=$(ip -4 route show default | awk '{print $3}'):0.0

Запустить приложение «x-глаза» для проверки

xeyes

Отлично! Все работает.






Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
161 -10​ =
 
howto/windows/wsl2_install.txt · Последнее изменение: 2022/08/31 14:53 — 127.0.0.1
Gentoo Linux Gentoo Linux Driven by DokuWiki