在Yocto构建中禁用标准systemd服务

时间:2018-06-01 21:48:13

标签: yocto systemd

我需要开始自己的systemd服务,让我们称之为custom.service。我知道如何编写一个配方,以便在启动时添加和启用它:

SYSTEMD_SERVICE_${PN} = "custom.service"
SYSTEMD_AUTO_ENABLE_${PN} = "enable"

但是,它与其中一项默认systemd服务 - systemd-timesyncd.service冲突。

是否有一种不错的首选方法可以在我的bitbake文件中禁用该默认systemd服务,即使systemd_XX.bb实际启用了它?

我可以创建一个systemd_%.bbappend文件来修改systemd设置,但我无法找到可以禁用其他服务的地方,而其他所有服务都已启用。

我找到的工作解决方案是使用

完全删除timesyncd
PACKAGECONFIG_remove = "timesyncd"

但我想知道这是否是一种合适的方式,如果有办法只是禁用它,但留在系统中。

4 个答案:

答案 0 :(得分:3)

如果系统运行正常并删除了其他软件包,则删除软件包 是首选解决方案。更少的包装意味着更简单的系统。

答案 1 :(得分:3)

如何为要禁用的冲突服务添加.bbappend配方。在其中,您将添加: SYSTEMD_AUTO_ENABLE_${PN} = "disable"

答案 2 :(得分:1)

通常你会设置SYSTEMD_AUTO_ENABLE _ $ {PN} ="禁用"这将使服务成为图像的一部分,但在启动时禁用。但是对于提供大量默认服务单元的systemd,这可能不是您可能想要部署的解决方案。您可以手术删除etc中的符号链接,这将确保服务不会在启动时自动启动,但.service文件仍然是图像的一部分。因此,在图层

中添加以下systemd _%。bbappend文件
do_install_append() {
        rm -rf ${D}${sysconfdir}/systemd/system/sysinit.target.wants/systemd-timesyncd.service
} 

还有其他方法可以禁用此功能,例如使用here

所述的systemd预设

答案 3 :(得分:-1)

我认为执行此操作的“官方”方法是在项目中的某个位置使用此类内容:

PACKAGECONFIG_append_pn-systemd = "--disable-timesyncd"

这与您已经建议的基本相同。要简单地不启用该服务,您必须手动执行该操作,因为您只能修改每个配方的自动启用。