Yocto SYSTEMD_SERVICE安装参数化服务(“ @ .service”)

时间:2019-01-15 11:29:26

标签: embedded-linux yocto systemd wireguard

我需要配置WireGuard以便在嵌入式Linux设备上启动时启动VPN。

我的食谱安装了/etc/wireguard/wg0.conf,就像通过互联网找到的示例一样。

然后我尝试在wireguard.bb上在SystemD上启用该服务:

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出现在正确的位置,但是看来bitbake的SYSTEMD_SERVICE不知道在@符号后如何展开“ wg0”。 / p>

如果我尝试使用接口名称(wg0):

SYSTEMD_SERVICE = "wg-quick@.service"

Bitbake很高兴,并确定了我的食谱,但这不是systemd所期望的。在没有界面的情况下启动服务没有意义...


然后,我尝试了另一种方法,将“ wireguard”软件包本身从配置中分离出来(“ wireguard-conf”软件包),并在“ wireguard”上添加了DEPENDSRDEPENDS

由于我的wireguard-conf.bb食谱不包含“ wg-quick @ .service”文件(它来自于依赖项“ wireguard”),因此情况变得更糟。


好吧

我不知道如何正确解决它,任何建议将不胜感激。


其他信息

我在此项目中使用Yocto 2.0.3(不希望对其进行更新)。

由于@TomasNovotny的评论,我设法将我的“ systemd.bbclas”与Github进行了比较,并注意到systemd_populate_packages()中的更改似乎可以解决问题。

2 个答案:

答案 0 :(得分:1)

它可以在更新的OpenEmbedded中使用(看起来像krogoth,2016年4月发布的2.1版),并且由this commit引入。它适用于我的rocko(2017年10月发布的2.4版)。根据j4x的评论,它不适用于jethro(2.0版,2015年11月)。

对于较旧(且当前不受支持的OpenEmbeddeds),您可以尝试向后移植补丁程序或处理符号链接以在do_install()中启用该服务。

还请注意,SYSTEMD_SERVICE_${PN}变量是特定于程序包的,因此必须添加_${PN}后缀(see manual)。

答案 1 :(得分:1)

我还尝试用我的个人资料(在Yocto rocko中)启用OpenVPN,但未成功。 最后,我通过提供OpenVPN配方扩展而不是自定义扩展来使其工作。因此,openvpn_%.bbappend文件如下所示:

inherit systemd
SYSTEMD_SERVICE_${PN} = "openvpn@clientprofile.service"
SYSTEMD_AUTO_ENABLE = "enable"

do_install_append() {
    install -d ${D}${sysconfdir}/openvpn/
    ln -sf /data/etc/openvpn/clientprofile.conf ${D}${sysconfdir}/openvpn/clientprofile.conf
}

如您所见,我使用的是我个人资料的符号链接,而不是普通文件。您可以安装普通的OpenVPN配置文件而不是进行符号链接,它也可以正常工作。