Yocto SYSTEMD_SERVICE для установки параметризованного сервиса ("@ .service") - PullRequest
0 голосов
/ 15 января 2019

Мне нужно настроить WireGuard для запуска VPN при загрузке на устройстве Embedded Linux.

Мой рецепт устанавливает /etc/wireguard/wg0.conf во многом как примеры, найденные в Интернете.

Затем я пытаюсь включить службу на SystemD, как это на моем wireguard.bb:

SYSTEMD_SERVICE = "wg-quick@wg0.service"
SYSTEMD_AUTO_ENABLE = "enable"

Но bitbake выдает мне ошибку:

ERROR: Function failed: SYSTEMD_SERVICE_my-conf value wg-quick@wg0.service does not exist

Я проверил временный каталог, и файл wg0.conf появляется в правильных местах, но кажется, что SYSTEMD_SERVICE bitbake не знает, как развернуть "wg0" после знака @.

Если я попытаюсь без имя интерфейса (wg0):

SYSTEMD_SERVICE = "wg-quick@.service"

Битбэйк доволен и завершает мой рецепт, но это не то, что systemd ожидает. Запускать сервис без интерфейса не имеет смысла ...


Затем я попробовал другой подход и отделил сам пакет «wireguard» от конфигурации (пакет «wireguard-conf») и добавил DEPENDS и RDEPENDS в «wireguard».

Это стало еще хуже, поскольку мой рецепт wireguard-conf.bb не содержит файл "wg-quick @ .service" (он происходит из зависимости "wireguard").


Ну

Я не знаю, как правильно это исправить, и любые предложения будут высоко оценены.


Дополнительная информация

Я использую Yocto 2.0.3 в этом проекте (без надежды на его обновление).

Благодаря комментариям @TomasNovotny мне удалось сравнить мой "systemd.bbclas" с Github и заметил изменение в systemd_populate_packages(), которое, похоже, решает проблему.

1 Ответ

0 голосов
/ 17 января 2019

Он работает в более новом OpenEmbedded (похоже на krogoth, версия 2.1 выпущена в апреле 2016 г.) и представлен this commit .Это работает для меня в роко (версия 2.4 выпущена в октябре 2017 года).Согласно комментарию j4x, он не работает в jethro (версия 2.0, ноябрь 2015 г.).

Для более старых (и в настоящее время не поддерживаемых OpenEmbeddeds) вы можете попытаться скопировать патч или обработать символические ссылки для включения службы вdo_install().

Также обратите внимание, что переменная SYSTEMD_SERVICE_${PN} зависит от пакета, поэтому необходимо добавить суффикс _${PN} ( см. Руководство ).

...