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-rootfssudo 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. Поставьте лайк и подпишитесь на канал что бы не пропустить следующий выпуск.