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"
Установка версии 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