image

В новостях прошла весть, что теперь WSL поддерживает демон systemd. В качестве преимущества использования systemd предлагается установка и запуск приложений и сервисов через snap. Для примера приведены Nextcloud, LXD, MySQL, MicroK8s и Docker. Я пока в преимущества самого snap не вникал. Но возможность запуска и управления демонами через systemd привлекает.


Начинаем с установки «Virtual Machine Platform». Запускать команду надо от имени администратора в консоли PowerShell:

PS C:\> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all
Cистема DISM
Версия: 10.0.22000.653
Версия образа: 10.0.22000.1042
Включение функций
[==========================100.0%==========================]
Операция успешно завершена.


Для запуска systemd нужна WSL версия 0.67.6. Статья на сайте Microsoft рекомендует установить предварительную версию WSL из магазина приложений. Проблема в том, что в магазине версия 0.66. Для установки WSL Preview требуется Windows 11 (сборка 22000 или более новая).


Поступаем следующим образом. Ставим из магазина приложений «устаревшую» версию (0.66), чтобы в дальнейшем получать обновления на нее. А дальше качаем с GitHub нужную нам версию 0.67.6. Она последняя доступная на момент написания статьи. Возможно, на момент прочтения выйдут версии поновее. При запуске скаченного с GitHub пакета Менеджер установки предложит обновить WSL до нужной нам версии, то есть распознает, что WSL Preview у вас уже установлен. Это позволит в будущем обновлять WSL Preview автоматически встроенными в магазин приложений средствами


Какие команды могут помочь. Проверка версии WSL.

PS C:\> wsl.exe --version

Если команда не распознает параметр "--version", значит у вас старая версия WSL (0.65 и ниже).

Недопустимый параметр в командной строке: --version
(c) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.
Использование: wsl.exe [Аргумент] [Параметры...] [Командная строка]
....

В этом случае будет работать параметр "--status":

PS C:\> wsl --status
Распределение по умолчанию: Ubuntu-20.04
Версия по умолчанию: 2
Подсистема Windows для Linux в последний раз обновлена 21.06.2022
Включены автоматические обновления WSL.
Версия ядра: 5.10.102.1

В версии 0.66 параметр "--version" (-v) и статус "--status" дают следующий вывод:

PS C:\> wsl --status
Default Distribution: Ubuntu-20.04
Default Version: 2
WSL version: 0.66.2.0
Kernel version: 5.15.57.1
WSLg version: 1.0.42
MSRDC version: 1.2.3401
Direct3D version: 1.606.4
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.22000.978
PS C:\> wsl --version
WSL version: 0.66.2.0
Kernel version: 5.15.57.1
WSLg version: 1.0.42
MSRDC version: 1.2.3401
Direct3D version: 1.606.4
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.22000.978

А вот в версии 0.67 вывод параметра "--status" меняет формат:

PS C:\> wsl --status
Default Distribution: Ubuntu-20.04
Default Version: 2

Итого, надо добиться того, чтобы версия WSL («WSL version» в выводе команды) была 0.67.6.0.

PS C:\> wsl -v
WSL version: 0.67.6.0
Kernel version: 5.15.62.1
WSLg version: 1.0.44
MSRDC version: 1.2.3401
Direct3D version: 1.606.4
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.22000.1042
PS C:\> wsl --status
Default Distribution: Ubuntu-20.04
Default Version: 2


Я предполагаю, что уже есть созданная виртуальная среда в WSL. Кратко, как создать, если еще нет. Смотрим список доступных систем в WSL:

PS C:\> wsl.exe --list --online
The following is a list of valid distributions that can be installed.
Install using 'wsl.exe --install <Distro>'.
NAME               FRIENDLY NAME
Ubuntu             Ubuntu
Debian             Debian GNU/Linux
kali-linux         Kali Linux Rolling
SLES-12            SUSE Linux Enterprise Server v12
SLES-15            SUSE Linux Enterprise Server v15
Ubuntu-18.04       Ubuntu 18.04 LTS
Ubuntu-20.04       Ubuntu 20.04 LTS
OracleLinux_8_5    Oracle Linux 8.5
OracleLinux_7_9    Oracle Linux 7.9

Далее ставим выбранный дистрибутив параметром "--install", пример:

PS C:\> wsl.exe --install Ubuntu

В конце установки предложат ввести имя пользователя Linux и пароль для него.


После установки надо в файл /etc/wsl.conf добавить ключ для запуска systemd. В моем случае файл /etc/wsl.conf не существовал и был создан при редактировании:

user@DESKTOP:~$ sudo vim /etc/wsl.conf
[boot]
systemd=true

Важно, файл редактируется в гостевой системе Linux, не на хосте.


Перезапускаем WSL:

PS C:\> wsl.exe --shutdown

В консоли Linux появится сообщение:

user@DESKTOP:~$
[process exited with code 1 (0x00000001)]

Вообще рекомендую команду «wsl.exe --shutdown» вводить после каждого изменения в WSL. Чтобы запустить WSL после остановки, нужно открыть заново консоль гостевой ОС.


Проверяем, что всё получилось:

user@DESKTOP:~$ systemctl list-unit-files --type=service
UNIT FILE                                  STATE           VENDOR PRESET
accounts-daemon.service                    masked          enabled
apparmor.service                           enabled         enabled
apport-autoreport.service                  static          -
apport-forward@.service                    static          -
apport.service                             generated       -
apt-daily-upgrade.service                  static          -
apt-daily.service                          static          -
atd.service                                masked          enabled
autovt@.service                            alias           -
blk-availability.service                   enabled         enabled
bolt.service                               static          -
clickhouse-server.service                  masked          enabled
cloud-config.service                       enabled         enabled
cloud-final.service                        enabled         enabled
cloud-init-hotplugd.service                static          -
.........

И, например, так

user@DESKTOP:~$ systemctl status networkd-dispatcher.service
● networkd-dispatcher.service - Dispatcher daemon for systemd-networkd
     Loaded: loaded (/lib/systemd/system/networkd-dispatcher.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-09-25 23:57:28 MSK; 37s ago
   Main PID: 133 (networkd-dispat)
      Tasks: 1 (limit: 9390)
     Memory: 16.8M
     CGroup: /system.slice/networkd-dispatcher.service
             └─133 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
Sep 25 23:57:27 DESKTOP systemd[1]: Starting Dispatcher daemon for systemd-networkd...
Sep 25 23:57:28 DESKTOP networkd-dispatcher[133]: No valid path found for iwconfig
Sep 25 23:57:28 DESKTOP networkd-dispatcher[133]: No valid path found for iw
Sep 25 23:57:28 DESKTOP systemd[1]: Started Dispatcher daemon for systemd-networkd.
Sep 25 23:57:28 DESKTOP networkd-dispatcher[133]: WARNING:Unknown index 7 seen, reloading interface list


Всё, можно пользоваться. Примеры использования есть на видео и в статье выше:

Комментарии (21)


  1. kovserg
    26.09.2022 13:40
    -1

    Интересно кто те люди кто пользуется WSL? Обывателю он не нужен, нормальные разработчики используют linux и macos.


    1. MelchiorfromBY
      26.09.2022 13:44
      +1

      пока у меня мака не было - писал на swift под Linux на WSL :)


      1. 13werwolf13
        26.09.2022 14:32
        +4

        > на cвифт
        >> под линукс
        >>> в wsl
        ккккккомбо!!!

        простите))


    1. Vladekk
      26.09.2022 13:46

      Джон Кармак, значит, ненормальный?


    1. usego
      26.09.2022 13:53
      +5

      С появлением WSL2 отказался от десктопного линукса. Жизнь стала на много комфортней.


      1. aegoroff
        26.09.2022 13:57
        +6

        А я наоборот отказался от WIndows c WSL в пользу десктопного линукса - жизнь стала намного комфортнее. Ушли глюки с разветыванием образов в докере, сборка стала вместо 18 минут занимать 6.5 ну и все в таком духе


        1. usego
          26.09.2022 14:11

          Крайне странные цифры про сборку, если только вы не догадались собирать на /mnt/[windrive] конечно.


          1. aegoroff
            26.09.2022 14:14

            Нет, сборка идет внутри линуксовой файловой системы, никакие /mnt/[windrive] не используются


        1. Tujh
          26.09.2022 16:27
          +1

          Немного странные цифры по времени сборки, я такгого не видел. Пока что единственный существенный недостаток WSL - это внутренний (достаточно тормознутый) прокси, который ни как не обойти, из-за чего sync с кучей мелких файлов работает на порядок медленее.


    1. Tujh
      26.09.2022 14:01
      +3

      Разработчики с корпоративными ноутбуками.

      Для Windows и MacOSX существует ПО, гарантировано блокирующие загрузку с флешек и блокировку ноутбука в случае его потери или кражи (обойти можно, но цена взлома превышает критическую отметку). Для Linux подобное ПО всё же достаточно легко можно обойти.

      У меня в компании раньше был стандарт - MacBook но, для работы нам нужны ноуты с интеловскими чипами, новые модные M1 не подходят от слова совсем. Поэтому Windows+WSL едва ли не единственный оставшийся вариант.


      1. MikkiKre
        28.09.2022 16:37

        Поделитесь пожалуйста, что это за ПО. А почему нельзя заблокировать загрузку с флэшки в БИОС и запаролить его? И зачем вообще эти сложности с флэшками? По-моему диск надо шифровать если кража данных критична.


    1. Einherjar
      26.09.2022 14:31
      +1

      Отлаживаю кросс-платформенные приложения на нем, гораздо удобнее чем виртуалка или 2 ноута.


    1. Ev9en1y Автор
      26.09.2022 14:51
      +1

      Отвечу за себя. Мне привычнее Windows. Я не разработчик. Мне нужно, чтобы работали всякие MS Office, Teams, Visio, Product Bulletin. Да и интерейс для меня лично удобнее, чем Gnome и его аналоги. Если говорить про средства для прошивок датчиков для умного дома и т.д. - программаторы чаще всего сделаны под Windows. Поэтому не вижу смысла создавать себе проблемы.

      С другой стороны, взаимодействовать с Linux проще из Linux. Если проходить онлайн курсы, то часто Линукс удобнее. Или хочется что-то быстро попробовать, развернув это поверх Постгрес с Апачем. И это проще сделать в WSL, чем ставить отдельную ОС на ноутбук, или жить на чистом Линуксе.

      Чисто субъективно.


      1. MelchiorfromBY
        26.09.2022 16:15

        MS Office - сейчас все кто с официально купленным офисом сидят на Office 365 который облачный и не привязан к платформе,
        Teams - отвратительно работает даже на Windows, и терпимо на Android О_о


        1. Ev9en1y Автор
          26.09.2022 16:47

          Облачная версия мне неудобна. Я слишком стар :). Я не ожидаю, что везде есть Интернет. Я не проверял последние года, как работает Excel в облаке, но раньше он не умел всего, что могла версия для ПК.

          Я не говорю, хорошо ли работает Teams или нет. Он нужен. Он - корпоративный стандарт для многих компаний.

          Например, сейчас ищу работу. Teams нужен регулярно. Резюме надо в формате Word. Пытался сохранять из LibreOffice Writer в формат docx. Выходит так себе :( Еще хуже дела с PowerPoint - из Implress в pptx выходит ужасно.

          Работать через телефон мне неудобно (опять же возраст и привычки). Конкретно Teams и Outlook на моем телефоне не работают. Видимо, загасил сервис на телефоне, от которого эти проги зависят. Но даже если бы работали, я по возможности использовал бы ноутбук :)


          1. P6i
            28.09.2022 15:13

            Лет 10, минимум, все мои заказчики требовали резюме в формате pdf. Прям удивлен


            1. Ev9en1y Автор
              28.09.2022 16:05

              • Если это агентство по найму, оно любит править резюме.

              • Если это компания, то им пометки надо делать. Не всем. Но часто просят в doc(x).

              • Если это сайт для онлайн-подачи резюме (зарубежные и не только компании используют Workday или аналог для размещения резюме и приема заявок от кандидатов), то PDF часто распознается с ошибками, или вообще не поддерживается.

              doc(x) универсальнее.


    1. antkatcin
      27.09.2022 13:05
      +2

      Как-то ваш комментарий попахивает дескриминацией. Почему "нормальные разработчики" не могут использовать wsl? Microsoft вырастил огромное количество .net разработчиков привыкших к их экосистеме. А теперь со времен .net core дал им полноценную поддержку linux. И что-то мне кажется, что все эти люди не бросятся сломя голову с привычной им системы на linux, которого многие даже в глаза не видели до этого.
      Я лично наоборот радуюсь, что Microsoft по сути смогли в wsl и дали возможность вести разработку для linux под виндой и, давайте признаем, у них это получилось не плохо. Оно работает, проблемы может и есть, но решаемые в целом. Наличие инструментария это по сути признак зрелости среды, а уж чем конкретно пользоваться - это уже выбор конечных разработчиков.


  1. Revertis
    26.09.2022 16:28
    +1

    Распределение по умолчанию: Ubuntu-20.04

    То есть дистрибутив назвали распределением? :)))


    1. Ev9en1y Автор
      26.09.2022 16:48

      Я даже не сразу понял, что имеется в виду. Потом понял, что это машинный перевод by Microsoft.


  1. MikkiKre
    28.09.2022 16:47

    Столкнулся с такой проблеммой-Vagrant(VirtualBox) не работает на Windows одновременно с DockerDesktop. Кто-нибудь нашёл решение?