Установка WSL 2 в Windows
WSL 2 – это виртуальная среда для запуска Linux программ на Windows созданая Microsoft. До WSL 2 для запуска linux-програм программисты использовали cygwin
или git bash, но учитывая невероятную совместимость WSL 2 со средой Linux и простоту его установки на любую машину с Windows 10, можно признать cygwin и его аналоги навсегда ненужными.
Дело в том что активировав WSL 2 у себя на машине и установив из Microsoft Store пакет Ubuntu вы получаете практически полноценную Ubuntu у себя на Windows 10, при этом с хорошей производительностью и без нужды вручную запускать виртуальные машины и пробрасывать папки.
Да, вы сможете писать в терминале
sudo apt install mysql-server
И на ваш компьютер будет установлен сервер баз данных MySQL. Точно такой же как на Ubuntu с конфигами которые расположены в том же месте что и на Ubuntu, например /etc/mysql/my.cnf
. У вас есть точно такойже терминал bash как на ваших серверах с Ubuntu и весь софт включая nodejs, python и даже docker контейнеризация работает точно также (мы говорим про консольный софт конечно же без UI интерфейса, UI вы можете использовать в виде exe файлов под Windows).
Кроме того у вас будет интеграция с Visual Studio Code - вы сможете в нем видеть файловую систему из WSL 2 и хранить все проекты в ней.
В этом хинте я расскажу самый простой способ установики и минимальной настройки WSL 2, советую прочитать все, так как в этом процессе есть пару подводных камней и простых но важных предостережений которые важно знать перед началом работы в WSL 2 чтобы не допустить нескольки популярных проблем с производительностью.
📒 Об авторе хинта: Иван Борщев – основатель компании Devforth, которая занимаеться разработкой современного программного обеспечения. В этом хинте он делиться многолетним проффесиональным опытом полученым во время разработки Linux-совместимых приложений на Windows WSL.
Предыстория: WSL1 vs WSL2 (важно знать)
WSL 1 появился в 2016 году и был представлен как "слой совместимости с linux для Windows 10". Все что он делал на тот момент - это всего лишь давал возможность запуска бинарных файлов Linux (ELF формата) на Windows. При этом он также создавал файловую систему подобную linux (с папками /etc
, /bin
, /home
) которая хранилась в самом Windows 10, в виде дерева папок и располагалось где-то в дебрях каталога пользователя в Windows. Уже тогда мы отказались от cygwin и использовали apt install
и успешно запускали софт который использовался на продакшен серверах. Это позволяло существнно поднять эффективность разработчиков которые использовали Windows. Мы запускали python
, pipenv
, node+npm
, gcc
, mysql
, postgresql
на Windows.
Но была проблема - Docker. Учитывая отсутствие ядра Linux, WSL 1 не давал запускать демон Dockerd. А костыльные настройки через VirtualBox мало у кого вызывали желание это настраивать, особенно когда этот опыт нужно донести сотрудникам.
Но с Июня 2019 в Windows 10 выпустили следующую версию WSL 2. Она потерпела драматические изменения - было добавлено настоящее ядро Linux и запускаться все стало через встроенную виртуальную машину Hyper-V (Virtual Machine Platform в компонентах Windows). Только в отличае от VirtualBox - вы даже не знаете о ее существовании. Ее не нужно запускать или даже знать что она запущена - вы просто работаете в терминале или VSCode когда нужно и получаете Ubuntu. Просадка по производительности я не заметил.
Единственный ньюанс который вызван переходом на Hyper-V - это изменение типа файловой системы - теперь в WSL 2 она стала в системе Windows выглядить как один файл-образ диска а не как дерево папок как это было в WSL 1:
Но WSL 2 монтирует его как сетевой диск, поэтому проблем нет. Мы рассмотрим как с этим жить легко и просто, но чуть позже.
Как установить WSL 2
Чтобы вам было проще повторять действия за мной, я использовал чистую Windows 10 Version: 20H2, OS Build 19042 (Проверить версию можно в Пуск ➡ Параметры ➡ About ➡ Windows Specifications). Минимальной версией для x64 систем есть Version: 1903 и больше с OS Build 18362 и больше.
Для надежности советую обновиться перед установкой WSL.
Шаг 1 - включаем "Windows Subsystem for Linux 1"
Запускаем коммандную строку от имени администратора:
Выполняем команду которая включит WSL 1:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
📒Если выполнить эту команду не запустив Командную Строку от администратора получим ошибку Error: 740 Elevated permissions are required to run DISM. Use an elevated command prompt to complete these tasks.
В случае успешного выполнение будет напиано что-то вроде:
Deployment Image Servicing and Management tool
Version: 10.0.19041.746
Image Version: 10.0.19042.746
Enabling feature(s)
[==========================100.0%==========================]
The operation completed successfully.
Если вы хотите остаться с WSL 1, на этом этапе можно перезагрузить машину и идти в стор за дистрибутивом Ubuntu. Но я советую вам продолжить и установить WSL 2 (пока можно не презагружать)
Шаг 2. Включаем VirtualMachinePlatform для WSL 2
Теперь включаем виртуальную машину необходимую для запуска WSL 2. Когда-то она называлась Hyper V, теперь VirtualMachinePlatform. В той же командной строке:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
После того как увидите The operation completed successfully
– перезагружаем компьютор
Шаг 3. Скачиваем и устанавливаем ядро Linux для WSL 2 и указываем предпочитаемую версию
Скачиваем и устанавливем вот этот msi wsl_update_x64.msi .
📒 Cылка ведет на официальный сайт, проверить валидность ссылки вы можете на оффициальной странице майкрософта Windows Subsystem for Linux Installation Guide for Windows 10 в разделе Step 4)
📒 Если у вас ARM процессор а не x86 (бывает намного реже), ипспользуйте этуссылку wsl_update_arm64.msi
После успешной установки вы должны увидеть:
Ну и осталось сделать версию WSL 2 основной для всех устанавливаемых далее дистрибутивов. Повторно запустите Командную Строку от имени администратора и выполните:
wsl --set-default-version 2
В выводе будет написано:
C:\Windows\system32>wsl --set-default-version 2
Для получения сведений о ключевых различиях с WSL 2 перейдите на страницу https://aka.ms/wsl2
Шаг 4. Устанавливаем дистрибутив Ubuntu из Microsoft Store
Открываем стор, находим Ubuntu (я выбрал 20.04 LTS, на нее будут выходить обновления до 2022ого года)
Параллельно, пока дистрибутив устанавливаесться, советую установить еще Windows Terminal из того же Microsoft Store:
Это более удобная версия стандартной оболочки Командной строки/Powershell, умеет работать с WSL дистрибутивами.
После установки запускаем Ubuntu. При первом запуске будет выполнена установка, она может занять несколько минут
После успешной настройки вы должны увидеть следубщее и ввести логин/пароль к пользователю WSL
Если в командной строке вы получили ошибку: WslRegisterDistribution failed with error
Если в командной строке вы получили ошибку: WslRegisterDistribution failed with error: 0x80370102, Error: 0x80370102 The virtual machine could not be started because a required feature is not installed, то, вполне может быть что технология виртуализации не включена в BIOS вашего компьютера. Это опция которая в биос может называться как AMD VT или Intel VT. Просто зайдите в BIOS, найдите эту опцию, включите ее и сохраните настройки. Проверить влючена ли VT иможно в Диспетчере Задач:
Если включив виртуализацию в BIOS, вы все еще испытываете проблему, попробуйте выполненить команду bcdedit /set hypervisorlaunchtype auto start
в Командной строке от администратора и перезагрузить
🙃Если вдруг вы пытаетесь включить WSL 2 в виртуальной машине Windows 10 запускаемой из VirtualBox, вам нужно включить опцию Enable Nested VT-x/AMD-V в настройках виртуальной машины либо выполните
cd "c:\Program Files\Oracle\VirtualBox\"
и затемVBoxManage modifyvm НазваниеМашины --nested-hw-virt on
Полезные команды
Проверить список Дистрибутивов и версии WSL:
wsl -l -v
Если так случилось что у вас есть Дистрибутив с версией WSL1, вы можете сконвертировать его в версию WSL 2:
wsl --set-version Ubuntu-20.04 2
Как приостановить Hyper-V (Feature:VirtualMachinePlatform)
Если вам нужно по какой либо причине выключить Hyper-V (например несовместимость с другими виртуальными машинами), то просто выполните:
DISM /Online /Disable-Feature:VirtualMachinePlatform
PowerShell Disable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -All
bcdedit /set hypervisorlaunchtype off
Потом перезагрузитесь и можете работать без Hyper-V. Для того чтобы вернуть все на место и включить его, нужно выполнить:
DISM /Online /Enable-Feature:VirtualMachinePlatform
PowerShell Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -All
bcdedit /set hypervisorlaunchtype auto start