WSL2: Ubuntu 22.04 Genie systemd

Systemd - это демон (процесс который выполняется в фоне), управляющий другими демонами, которые обычно называют сервисами. Задача systemd - это контролировать запуск и выполнение сервисов, которые описанны в его конфигурации, в соответствии с их зависимостями.

Я покажу как запустить systemd на WSL2 Ubuntu 22.04 с помощью genie. Если у Вас не установлен WSL2 или Ubuntu 22.04, то на моем канале вы найдете видео по его установке и настройке.

Итак, для начала откройте PowerShell и обновите wsl

wsl --update

Затем запустите Ubuntu 22.04 и установите genie из репозитория wsl-transdebian. Для этого скачайте gpg ключ репозитория и добавьте сам репозиторий в список источников apt.

sudo -s
wget -O /etc/apt/trusted.gpg.d/wsl-transdebian.gpg \
https://arkane-systems.github.io/wsl-transdebian/apt/wsl-transdebian.gpg
chmod a+r /etc/apt/trusted.gpg.d/wsl-transdebian.gpg

cat << EOF > /etc/apt/sources.list.d/wsl-transdebian.list
deb https://arkane-systems.github.io/wsl-transdebian/apt/ $(lsb_release -cs) main
deb-src https://arkane-systems.github.io/wsl-transdebian/apt/ $(lsb_release -cs) main
EOF

Далее обновите список и установите systemd-genie

apt-get update
apt-get install -y systemd-genie

Теперь давайте настроим genie установив boot target в multi-user и установив файле конфиграции Genie /etc/genie.ini таймаут в 10 секунд, т.к. 240 как-то многовато по мне.

systemctl set-default multi-user.target
sed -i 's/systemd-timeout=240/systemd-timeout=10/' /etc/genie.ini

Должно получиться вот так

[genie]
systemd-timeout=10
clone-env=WSL_DISTRO_NAME,WSL_INTEROP,WSLENV,DISPLAY,WAYLAND_DISPLAY,PULSE_SERVER
secure-path=/lib/systemd:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
clone-path=false
target-warning=true
update-hostname=true
update-hostname-suffix=-wsl
resolved-stub=false

Далее добавьте в .bashrc автоинициализацию genie

cat << EOF >> ~/.bashrc
if [ -f /run/genie.path ]; then
    export PATH=$PATH:$(cat /run/genie.path)
fi

if [[ ! -v INSIDE_GENIE ]]; then
    exec /usr/bin/genie -s
fi
EOF

И просто перезапустите WSL Ubuntu-22.04

wsl -t Ubuntu-22.04

Как видите genie показывает некоторые сообщения о проблемах, решение которых можно найти на официальной странице проекта по решению проблем Systemd-units-known-to-be-problematic-under-WSL

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

  • Для SSH нужно сгенерировать ключи хоста, если Вы до этого не настраивали SSH. Просто запустите sudo ssh-keygen -A -f /
  • Для systemd-remount-fs, нужно установить метку cloudimg-rootfs для основного диска. Для этого найдите смонтированные устройства в /dev/sd cat /proc/mounts|grep /dev/sd Скорее всего устройство будет только одно, просто задайте для него метку cloudimg-rootfs sudo e2label /dev/sdc cloudimg-rootfs
  • Для systemd-sysusers.service нужно отредактировать файл конфигурации. Для этого запустите sudo systemctl edit systemd-sysusers.service
[Service]
LoadCredential=

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

Теперь обязательно выключаем WSL Ubuntu 22.04 и запускаем снова.

wsl -t Ubuntu-22.04

После 10 секундного ожидания инициализации Genie можете проверить что systemd запущен и имеет pid 1.

pbs -e|grep systemd

Краткое описание и необходимые команды можно найти по ссылке под видео. Если у вас возникли какие-то проблемы или вы хотите услышать о чем то подробнее, напишите об этом в коментариях.

Вы были на канале zource dev. Поставьте лайк и подпишитесь на канал что бы не пропустить следующий выпуск.