Поделиться через


Использование systemd для управления службами Linux с помощью WSL

Подсистема Windows для Linux (WSL) теперь поддерживает systemd, init систему и диспетчер служб, используемый многими популярными дистрибутивами Linux, такими как Ubuntu, Debian и многими другими. (Что такое systemd?).

Система init по умолчанию недавно изменилась с SystemV, а система теперь используется по умолчанию для текущей версии Ubuntu, которая будет установлена с помощью команды wsl --install по умолчанию. Дистрибутивы Linux, отличные от текущей версии Ubuntu, по-прежнему могут использовать инициализацию WSL, аналогичную инициализации SystemV. Чтобы перейти на systemd, см. раздел Как включить systemd.

Что такое systemd в Linux?

Согласно systemd.io: "systemd представляет собой набор основных строительных блоков для системы Linux. Он предоставляет систему и управляющего службами, который запускается как PID 1 и инициирует работу остальной системы.

Система и диспетчер служб systemd в первую очередь включают такие функции, как запуск демонов по требованию, поддержка точек монтирования и автомонтирования, поддержка моментальных снимков и отслеживание процессов с помощью групп управления Linux.

Большинство крупных дистрибутивов Linux теперь работают на systemd, поэтому ее включение в WSL делает его использование еще более похожим на использование Linux непосредственно на аппаратном обеспечении. Смотрите видеообъявление с демонстрациями systemd или примеры использования systemd ниже, чтобы узнать больше о том, какие возможности предлагает systemd.

Как включить систему?

Система теперь используется по умолчанию для текущей версии Ubuntu, которая будет установлена с помощью команды wsl --install по умолчанию.

Чтобы включить systemd для любых других дистрибутивов Linux, работающих на WSL 2 (изменив стандартную настройку с systemv init):

  1. Убедитесь, что версия WSL — 0.67.6 или более поздняя.

  2. Откройте командную строку для дистрибутива Linux и введите cd / для доступа к корневому каталогу, а затем ls, чтобы получить список файлов. Вы увидите каталог с именем "etc", содержащий файл конфигурации WSL для дистрибутива. Откройте этот файл, чтобы сделать обновление с помощью текстового редактора Nano, введя следующее: nano /etc/wsl.conf.

  3. Добавьте эти строки в файл wsl.conf, который теперь открыт, чтобы изменить используемую инициализацию на systemd:

    [boot]
    systemd=true
    

    Включить systemd в WSL 2

  4. Закройте текстовый редактор Nano (CTRL+ X, введите Y, чтобы сохранить изменение и подтвердить с помощью клавиши enter).

  5. Затем необходимо закрыть дистрибутив Linux. Для перезапуска всех экземпляров WSL можно использовать команду wsl.exe --shutdown в PowerShell.

  6. После перезапуска дистрибутива Linux система будет запущена. Его можно проверить с помощью команды systemctl status, чтобы отобразить состояние выполнения, и команды systemctl list-unit-files --type=service, которая будет отображать статус любых служб, связанных с вашим дистрибутивом Linux.

Если дистрибутив Linux — Debian/Ubuntu/Kali Rolling, необходимо установить не только системный пакет, но и установить пакет systemd-sysv.

sudo apt-get update -y && sudo apt-get install systemd systemd-sysv -y

Дополнительные сведения о настройке расширенных параметров в WSL, включая разницу между файлами конфигурации wsl.conf (распределенными) и .wslconfig (глобальными), обновление параметров автоматического подключения и т. д.

Видео демонстрации systemd

Майкрософт сотрудничала с Кэноникл, чтобы добавить поддержку systemd в WSL. Смотрите, как Craig Loewen (PM для WSL в Microsoft) и Oliver Smith (PM для Ubuntu на WSL в Canonical) объявляют о поддержке systemd и показывают демонстрации того, что это позволяет.

Примеры Systemd

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

  • snap: система упаковки программного обеспечения и развертывания, разработанная Canonical для операционных систем, использующих ядро Linux и систему инициализации systemd. Пакеты называются "snaps", инструмент командной строки для создания таких пакетов называется Snapcraft, центральный репозиторий, где их можно скачать или установить, называется "Snap Store", а демон, необходимый для их работы (загрузки из магазина, монтаж на месте, изоляции и выполнения приложений), называется "snapd". Вся система иногда называется "snappy". Попробуйте выполнить команду: snap install spotify.

  • microk8s: Kubernetes с открытым исходным кодом, минималистичная производственная версия с низкими эксплуатационными затратами, которая автоматизирует развертывание, масштабирование и управление контейнеризованными приложениями. Следуйте инструкциям по установке MicroK8s в WSL2, ознакомьтесь с учебником по началу работыили просмотрите видео на Kubernetes в Windows с помощью MicroK8s и WSL 2.

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

В нескольких связанных учебных материалах показано, как можно использовать systemd.

Как включение systemd влияет на архитектуру WSL?

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

Важно также отметить, что с этими изменениями службы systemd НИ В КОЕМ СЛУЧАЕ не будут поддерживать экземпляр WSL. Экземпляр WSL будет оставаться активным так же, как и до этого обновления, о чем можно узнать в этом посте в блоге о поддержке фоновых задач от 2017 года.