Windows 10: Установить и настроить WSL

Для запуска Линукс (Ubuntu. Linux Mint, Kubuntu), а также FreeBSD, я использовал VirtualBox. В принципе это не так напряжно, но всё равно нужно было что-то ставить дополнительно. Сразу оговорюсь, что и в этот раз придётся что-то стравить дополнительно, но только один раз — это WSL (Windows Subsystem for Linux — Подсистема Windows для Linux).

WSL требует меньше ресурсов (ЦП, памяти и хранилища), чем полноценная виртуальная машина. WSL также позволяет запускать программы командной строки и приложения Linux вместе с приложениями командной строки, классическими приложениями и приложениями Store для Windows, а также позволяет обращаться к файлам Windows в Linux. Это позволяет использовать приложения для Windows и программы командной строки Linux для одного и того же набора файлов, если требуется.
WSL faq

Предварительные требования

Для использования приведенных ниже команд необходимо использовать Windows 10 версии 2004 и более поздних версий (сборка 19041 и более поздних версий) или Windows 11. Если вы используете более ранние версии, см. страницу установки вручную.

Установка через Панель управления

Мы можем установить WSL через SettingsAppsApps & FeaturesOptional featuresMore Windows features. Здесь мы выбираем для установки компонент Windows Subsystem for Linux:
Установка WSL через добавление компонентов
После этого можно скачать и установить нужную виртуальную машину Линукс прямо из Магазина Приложений.

Установка через PowerShell

Поскольку мы работаем в Windows и привыкли к нему, то будем потихоньку привыкать в консоли Linux. Для этого установим WSL из под PowerShell (запущенной от пользователя с правами админа):

Administrator: Windows PowerShell
wsl --install

Если мы запустим установку от пользователя с ограниченными правами, но с повышением привилегий, то получим ошибку:

Installing: Windows Subsystem for Linux
Catastrophic failure

 

Поэтому переключаемся на сеанс Администратора (пользователя, входящего в группу Администраторов) и повторяем команду установки:

Administrator: Windows PowerShell
wsl --install

При этом варианте нам по умолчанию установят Ubuntu:

Ubuntu 22.04.2 LTS
Ubuntu is already installed.
Launching Ubuntu...
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username:

Создаём пользователя и назначаем ему пароль.

Установка дистрибутива, отличного от Ubuntu

Если мы хотим какой-то другой дистрибутив, можно поверить его наличие:

Administrator: Windows PowerShell
 wsl --list --online
The following is a list of valid distributions that can be installed.
Install using 'wsl.exe --install '.

NAME                                   FRIENDLY NAME
Ubuntu                                 Ubuntu
Debian                                 Debian GNU/Linux
kali-linux                             Kali Linux Rolling
Ubuntu-18.04                           Ubuntu 18.04 LTS
Ubuntu-20.04                           Ubuntu 20.04 LTS
Ubuntu-22.04                           Ubuntu 22.04 LTS
OracleLinux_7_9                        Oracle Linux 7.9
OracleLinux_8_7                        Oracle Linux 8.7
OracleLinux_9_1                        Oracle Linux 9.1
SUSE-Linux-Enterprise-Server-15-SP4    SUSE Linux Enterprise Server 15 SP4
openSUSE-Leap-15.4                     openSUSE Leap 15.4
openSUSE-Tumbleweed                    openSUSE Tumbleweed

Теперь можно установить тот, который нужен нам:

Administrator: Windows PowerShell
wsl --install Ubuntu-22.04

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

К примеру нам не нужен Ubuntu дефолтовый, но мы хотели бы поставить Ubuntu 22.04 LTS. Выведем список установленных дистрибутивов Линукс:

Administrator: Windows PowerShell
wsl --list --verbose
  NAME      STATE           VERSION
* Ubuntu    Stopped         2

Удалим ненужный нам:

Administrator: Windows PowerShell
wsl --unregister Ubuntu
Unregistering.
The operation completed successfully.

Удалив дистрибутив по-умолчанию, нам будет нужно назначить новый дистрибутив в качестве дефолтового:

Administrator: Windows PowerShell
wsl --set-default Ubuntu-22.04

Остановить запущенную машину

Если в Ubuntu набрать exit, то это закроет окошко виртуалки, но при этом она продолжит работать:

Administrator: Windows PowerShell
wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-22.04    Running         1

Список запущенных машин:

Administrator: Windows PowerShell
wsl --list --running
Для каждого пользователя свой список! У пользователя будет один список, а у админа другой.

 

Можно остановить запущенную машину с Убунту таким способом:

Administrator: Windows PowerShell
wsl -t Ubuntu-22.04

Но можно посто подождать около 20 секунд и она закроется сама, если ранее вы из неё вышли с помощью exit.

Иногда требуется перезагрузить машину, например для установки обновлений. Если мы закроем окно, то это не будет «выключением» в прямом смысле. Тем более не будет «перезагрузкой». В этом случае нам поможет та же самая команда (в терминале Линукс, но с расширением exe):

wsl.exe --list --verbose
  NAME            STATE           VERSION
* Ubuntu-22.04    Running         2
wsl.exe -t Ubuntu-22.04

 

Апгрейд до версии 2

При запуске mtr получил ошибку:

Administrator: Windows PowerShell
mtr ya.ru
mtr-packet: Failure to open IPv4 sockets: Permission denied
mtr-packet: Failure to open IPv6 sockets: Permission denied
mtr: Failure to start mtr-packet: Invalid argument

Для решения проблемы нужно было обновить WSL до второй версии:

Administrator: Windows PowerShell
wsl --set-version Ubuntu-22.04 2

Настройка правил firewall

Если на Windows включен файрвол (брандмауэр), с запрещающей политикой для исходящих соединений, то будет необходимо создать в Windows Defender Firewall with Advanced Security правило для Исходящих соединений. В этом случае путь будет такой:

C:\Users\Denis\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\rootfs\usr\bin\ssh

Доступ с локального компьютера к файловой системе виртуальной машины

В Проводнике можно набрать такой адрес:

\\wsl.localhost\Ubuntu-22.04

Доступ из виртуальной машины к файловой системе локального компьютера

В консоли набираем

cd /mnt/x

Здесь x — это буква логического диска. Например для доступа к папке Рабочего стола текущего пользователя набираем:

cd /mnt/c/Users/Denis/Desktop/

Расположение файлов на физической машине

Сама виртуальная машина со всеми настройками хранится в папке пользователя (как правило на диске C:):

C:\Users\Denis\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc

Если присутствует нехватка свободного места или просто возникло желание перенести виртуалку в другое место, то команды такие.
1. Экспортировать (предварительно убедившись, что она остановлена wsl -l -v):

Windows PowerShell
wsl --export Ubuntu-22.04 ubuntu_22_04.tar

2. Импортировать в новую папку:

Windows PowerShell
wsl --import Ubuntu-22.04 D:\new-wsl-ubuntu\ .\ubuntu_22_04.tar --version 2

Не работает DNS

Проблема актуальна для WSL2.

 

Запускаю такую команду:

mtr -n ya.ru

mtr: Failed to resolve host: ya.ru: Temporary failure in name resolution

nslookup ya.ru

;; communications error to 172.19.224.1#53: timed out

Здорово. Смотрю Журнал событий в Windows, там запись:

Application Name:	\device\harddiskvolume8\windows\system32\svchost.exe
Direction:		Inbound
Source Address:		172.28.85.174
Destination Address:	172.28.80.1
Destination Port:		53

Ну, вроде всё понятно — мой файрвол блокирует попытки соединения с сервером DNS. Непонятно, какого фига всё другое работает, ну да ладно. Создал разрешающее правило на входящие соединения — всё равно не работает. Убрал все ограничения типа номера порта и т.п. — не работает. Нашёл подходящую тему, до решения не добрался, но увидел конфиг, его-то я и исправил:

sudo vi /etc/resolv.conf
/etc/resolv.conf
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
#generateResolvConf = false
nameserver 192.168.1.254
#nameserver 172.19.224.1

И, как сказано в комментарии к этому файлу, вносим изменения в файл /etc/wsl.conf в текущей консоли Линукс:

/etc/wsl.conf
 [network]
generateResolvConf = false

Здесь я закомментировал глючный сервер и выставил адрес своего роутера (можно было бы и вручную пописать нужный DNS-сервер).

Доступ к USB

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



Подписаться
Уведомление о
guest
1 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Виктор

Здравствуйте, не совсем понятно как я могу установить другой дистрибутив. Данная команда: wsl —install kali-linux выдала ошибку! Или это неправильная команда?

Last edited 2 месяцев назад by Виктор