4

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

我的食谱安装了一个/etc/wireguard/wg0.conf非常类似于通过 Internet 找到的示例。

然后我尝试在我的 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出现在正确的位置,但似乎 bitbakeSYSTEMD_SERVICE不知道如何在@签名后扩展“wg0”。

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

SYSTEMD_SERVICE = "wg-quick@.service"

Bitbake 很高兴并最终确定了我的食谱,但这不是systemd预期的。在没有接口的情况下启动服务是没有意义的......


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

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


好,

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


附加信息

我在这个项目中使用的是 Yocto 2.0.3(不希望更新它)。

感谢@TomasNovotny 的评论,我设法将我的“systemd.bbclas”与 Github 进行了比较,并注意到systemd_populate_packages()似乎解决问题的变化。

4

2 回答 2

1

它适用于较新的 OpenEmbedded(看起来像 krogoth,2016 年 4 月发布的 2.1 版),它是由这个 commit引入的。它适用于我的 rocko(2017 年 10 月发布的 2.4 版)。根据 j4x 的评论,它在 jethro 中不起作用(2.0 版,2015 年 11 月)。

对于较旧的(并且当前不受支持的 OpenEmbeddeds),您可以尝试向后移植补丁或处理符号链接以启用do_install().

另请注意,SYSTEMD_SERVICE_${PN}变量是特定于包的,因此_${PN}必须添加后缀(参见手册)。

于 2019-01-17T13:18:05.500 回答
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 配置文件而不是制作符号链接,它也可以正常工作。

于 2019-11-18T11:48:18.693 回答