Поддержка Systemd теперь доступна в WSL!

160
Поддержка Systemd теперь доступна в WSL!
Поддержка Systemd теперь доступна в WSL!

Подсистема Windows для Linux (WSL) теперь может запускать systemd внутри ваших дистрибутивов WSL, что позволяет вам выполнять больше рабочих процессов Linux на машине Windows.

Системный администратор

В этой статье мы рассмотрим:

  • Что такое systemd? Что вы можете с ним делать?
  • Как это изменение возможно в WSL?
  • Как получить systemd на свою машину?

Что такое systemd? Как можно с ним работать?

Systemd — это менеджер системы и служб Linux. Он инициализирует другие демоны в системе при загрузке. Основная цель  — полный контроль над запуском и выполнением процессов, описанных в его конфигурации.

 

Многие популярные дистрибутивы запускают systemd по умолчанию, такие как Ubuntu, Debian и другие. Это изменение означает, что WSL будет еще более похожа на использование ваших любимых дистрибутивов Linux на «голой» машине, и позволит вам использовать программное обеспечение, которое зависит от поддержки

Несколько примеров приложений Linux, которые зависят от systemd:

snap

  • Двоичный файл, позволяющий устанавливать и управлять программным обеспечением внутри Ubuntu.
  • Попробуйте запустить: snap install spotify или snap install postman

microk8s

  • Быстро запускайте Kubernetes локально на своей системе.
    Просмотрите учебник по началу работы

systemctl

  • Инструмент, входящий в состав systemd, для взаимодействия со службами на вашей Linux-машине.
  • Попробуйте systemctl list-units —type=service, чтобы увидеть, какие службы доступны и их статус

Каким образом это изменение возможно в WSL?

Поддержка systemd потребовала изменений в архитектуре WSL. Поскольку systemd требует PID 1, процесс WSL init, запущенный в дистрибутиве Linux, становится дочерним процессом systemd. Поскольку процесс WSL init отвечает за обеспечение инфраструктуры для связи между компонентами Linux и Windows, изменение этой иерархии потребовало переосмысления некоторых предположений, сделанных в процессе WSL init. Необходимо было внести дополнительные изменения для обеспечения чистого выключения (поскольку теперь это выключение контролируется systemd) и совместимости с WSLg. Важно также отметить, что после этих изменений службы systemd НЕ будут поддерживать экземпляр WSL в активном состоянии. Ваш экземпляр WSL будет оставаться в активном состоянии так же, как и раньше, о чем вы можете прочитать здесь.

Учитывая, что это меняет поведение WSL при загрузке, мы хотели быть осторожными в применении этого к уже существующим дистрибутивам WSL. Поэтому в настоящее время для включения systemd для конкретного дистрибутива WSL вам необходимо сделать выбор, и мы будем следить за отзывами и изучать возможность сделать это поведение по умолчанию в будущем.

Как установить systemd на свою машину?

Чтобы начать работу, вам нужно сделать следующие две вещи: — Убедитесь, что вы используете правильную версию WSL: версия 0.67.6 и выше — Установите флаг systemd в настройках вашего дистрибутива WSL.

Убедитесь, что вы используете правильную версию WSL

Это изменение доступно только в версии WSL 0.67.6 и выше для магазина Microsoft Store. Вы можете проверить номер своей версии, выполнив команду wsl —version. Если эта команда не сработала, значит, вы используете версию WSL, установленную в Windows, и вам необходимо обновить ее до версии Store.

Эта версия WSL сейчас доступна в Microsoft Store для пользователей сборки Windows Insiders для первоначального тестирования, а затем через несколько недель мы сделаем ее доступной для всех пользователей, чтобы обеспечить качество. Вы можете выполнить команду wsl —update для проверки наличия обновлений WSL.

Если вы не являетесь участником программы Windows Insiders и хотите использовать ее уже сейчас, вы можете загрузить последний выпуск со страницы релиза WSL.

Установите флаг systemd в настройках вашего дистрибутива WSL

Вам нужно будет отредактировать файл wsl.conf, чтобы обеспечить запуск systemd при загрузке.

Добавьте эти строки в файл /etc/wsl.conf (обратите внимание, что вам потребуется запустить редактор с привилегиями sudo, например: sudo nano /etc/wsl.conf):

[boot]
systemd=true

Пример файла wsl.conf

Приведенный ниже пример файла wsl.conf демонстрирует некоторые из доступных опций конфигурации. В этом примере дистрибутив Ubuntu-20.04, а путь к файлу \\\wsl.localhost\Ubuntu-20.04\etc\wsl.conf.

# Automatically mount Windows drive when the distribution is launched
[automount]

# Set to true will automount fixed drives (C:/ or D:/) with DrvFs under the root directory set above. Set to false means drives won't be mounted automatically, but need to be mounted manually or with fstab.
enabled = true

# Sets the directory where fixed drives will be automatically mounted. This example changes the mount location, so your C-drive would be /c, rather than the default /mnt/c. 
root = /

# DrvFs-specific options can be specified.  
options = "metadata,uid=1003,gid=1003,umask=077,fmask=11,case=off"

# Sets the `/etc/fstab` file to be processed when a WSL distribution is launched.
mountFsTab = true

# Network host settings that enable the DNS server used by WSL 2. This example changes the hostname, sets generateHosts to false, preventing WSL from the default behavior of auto-generating /etc/hosts, and sets generateResolvConf to false, preventing WSL from auto-generating /etc/resolv.conf, so that you can create your own (ie. nameserver 1.1.1.1).
[network]
hostname = DemoHost
generateHosts = false
generateResolvConf = false

# Set whether WSL supports interop process like launching Windows apps and adding path variables. Setting these to false will block the launch of Windows processes and block adding $PATH environment variables.
[interop]
enabled = false
appendWindowsPath = false

# Set the user when launching a distribution with WSL.
[user]
default = DemoUser

# Set a command to run when a new WSL instance launches. This example starts the Docker container service.
[boot]
command = service docker start

 

И закройте редактор nano, используя CTRL+O для сохранения и CTRL+X для выхода.

Заключительные шаги

После выполнения описанных выше действий закройте Windows дистрибутива WSL и запустите wsl.exe —shutdown из PowerShell для перезапуска экземпляров WSL. После запуска у вас должна быть запущена systemd. Вы можете проверить это командой systemctl list-unit-files —type=service, которая покажет состояние ваших служб.