我需要配置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”上添加了DEPENDS
和RDEPENDS
。
由于我的wireguard-conf.bb
食谱不包含“ wg-quick @ .service”文件(它来自于依赖项“ wireguard”),因此情况变得更糟。
好吧
我不知道如何正确解决它,任何建议将不胜感激。
其他信息
我在此项目中使用Yocto 2.0.3(不希望对其进行更新)。
由于@TomasNovotny的评论,我设法将我的“ systemd.bbclas”与Github进行了比较,并注意到systemd_populate_packages()
中的更改似乎可以解决问题。
答案 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配置文件而不是进行符号链接,它也可以正常工作。