Для запуска Линукс (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 через
После этого можно скачать и установить нужную виртуальную машину Линукс прямо из Магазина Приложений.
Установка через PowerShell
Поскольку мы работаем в Windows и привыкли к нему, то будем потихоньку привыкать в консоли Linux. Для этого установим WSL из под PowerShell (запущенной от пользователя с правами админа):
wsl --install
Если мы запустим установку от пользователя с ограниченными правами, но с повышением привилегий, то получим ошибку:
Catastrophic failure
Поэтому переключаемся на сеанс Администратора (пользователя, входящего в группу Администраторов) и повторяем команду установки:
wsl --install
При этом варианте нам по умолчанию установят Ubuntu:
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
Если мы хотим какой-то другой дистрибутив, можно поверить его наличие:
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
Теперь можно установить тот, который нужен нам:
wsl --install Ubuntu-22.04
Удаление дистрибутива
К примеру нам не нужен Ubuntu дефолтовый, но мы хотели бы поставить Ubuntu 22.04 LTS. Выведем список установленных дистрибутивов Линукс:
wsl --list --verbose
NAME STATE VERSION
* Ubuntu Stopped 2
Удалим ненужный нам:
wsl --unregister Ubuntu
Unregistering.
The operation completed successfully.
Удалив дистрибутив по-умолчанию, нам будет нужно назначить новый дистрибутив в качестве дефолтового:
wsl --set-default Ubuntu-22.04
Остановить запущенную машину
Если в Ubuntu набрать exit, то это закроет окошко виртуалки, но при этом она продолжит работать:
wsl --list --verbose
NAME STATE VERSION
* Ubuntu-22.04 Running 1
Список запущенных машин:
wsl --list --running
Можно остановить запущенную машину с Убунту таким способом:
wsl -t Ubuntu-22.04
Но можно посто подождать около 20 секунд и она закроется сама, если ранее вы из неё вышли с помощью exit.
wsl.exe --list --verbose
NAME STATE VERSION
* Ubuntu-22.04 Running 2
wsl.exe -t Ubuntu-22.04
Апгрейд до версии 2
При запуске mtr получил ошибку:
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 до второй версии:
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):
wsl --export Ubuntu-22.04 ubuntu_22_04.tar
2. Импортировать в новую папку:
wsl --import Ubuntu-22.04 D:\new-wsl-ubuntu\ .\ubuntu_22_04.tar --version 2
Не работает DNS
Запускаю такую команду:
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
# 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 в текущей консоли Линукс:
[network]
generateResolvConf = false
Здесь я закомментировал глючный сервер и выставил адрес своего роутера (можно было бы и вручную пописать нужный DNS-сервер).
Доступ к USB
Не буду пока расписывать, просто оставлю ссылку на заметку. Нативного доступа к устройствам USB нет. Надеюсь, что пока нет, а потом сделают. Но на текущий момент можно установить дополнения для работы с USB-устройствами.
- WordPress: Ошибка в плагине WpDiscuz - 08.10.2024
- Windows 10: Уменьшить размер виртуальной машины WSL - 06.10.2024
- Windows 10: Событие EventID 63 в Журнале Приложений - 28.09.2024