ZOURCE

WSL2: Установка и настройка

May 06, 2020

Установка Chocolatey и активация компонентов Windows

Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
Enable-WindowsOptionalFeature -NoRestart -Online -FeatureName VirtualMachinePlatform
Enable-WindowsOptionalFeature -NoRestart -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Проверка сборки Windows и регистрация в Windows Insider Program

[System.Environment]::OSVersion.Version.Build
Invoke-WebRequest -Uri https://raw.githubusercontent.com/whatever127/offlineinsiderenroll/master/OfflineInsiderEnroll.cmd -OutFile "$($env:temp)\OfflineInsiderEnroll.cmd" -UseBasicParsing
Invoke-Item "$($env:temp)\OfflineInsiderEnroll.cmd"
Restart-Computer

Перегружаем компьютер

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

Для ARM устройств

Invoke-WebRequest -Uri https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_arm64.msi -OutFile "$($env:temp)\wsl_update.msi" -UseBasicParsing

Для x64 устройств

Invoke-WebRequest -Uri https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi -OutFile "$($env:temp)\wsl_update.msi" -UseBasicParsing

Запускаем установку

Invoke-Item "$($env:temp)\wsl_update.msi"

Подробнее про WSL2 здесь

Установка версии WSL по-умолчанию

wsl --set-default-version 2

Установка Ubuntu 18.04

Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1804 -OutFile "$($env:temp)\Ubuntu.appx" -UseBasicParsing
Add-AppxPackage "$($env:temp)\Ubuntu.appx"

Установка daemonize

sudo apt-get update && sudo apt-get install -yqq daemonize dbus-user-session fontconfig

Для этого в директории /etc/profile.d/ создаем файл 00-wsl2.sh и вставляем следующее содержимое

Автозапуск systemd

sudo nano `/etc/profile.d/00-wsl2.sh`

Вставляем этот фрагмент

SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')

if [ -z "$SYSTEMD_PID" ]; then
   sudo /usr/sbin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
   SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')
fi

if [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then
    exec sudo /usr/bin/nsenter -t $SYSTEMD_PID -a su - $LOGNAME
fi

Разрешим привиллегии супер пользователя

sudo visudo

Курсор в конец файла Alt + / и вставляем команды

%sudo ALL=(ALL) NOPASSWD: /usr/sbin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
%sudo ALL=(ALL) NOPASSWD: /usr/bin/nsenter -t [0-9]* -a su - [a-zA-Z0-9]*

Выключаем ubuntu-18.04

wsl --shutdown Ubuntu
wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu-18.04           Stopped         2
  docker-desktop         Stopped         2
  docker-desktop-data    Stopped         2

Вы должны увидеть слово Stopped напротив названия. Повторите через минуту wsl -l -v если не остановился.

Проверяем systemd

ps -e|grep systemd

Должен быть похожий результат

    1 ?        00:00:00 systemd
   60 ?        00:00:00 systemd-journal
   76 ?        00:00:00 systemd-udevd
  218 ?        00:00:00 systemd-timesyn
  220 ?        00:00:00 systemd-network
  222 ?        00:00:00 systemd-resolve
  234 ?        00:00:00 systemd-logind
Надеюсь Вам было интересно, подпишитесь на канал это дает мне больше мотивации создавать более интересные видео и чаще