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

在Yocto构建中禁用标准systemd服务,yocto,systemd,Yocto,Systemd,我需要启动自己的systemd服务,我们称之为custom.service。我知道如何编写在启动时添加和启用的配方: SYSTEMD_SERVICE_${PN} = "custom.service" SYSTEMD_AUTO_ENABLE_${PN} = "enable" 但是,它与默认的systemdservices-systemd timesyncd.service之一冲突 在我的bitbake文件中,有没有一种更好的方法来禁用默认的systemd服务,即使systemd_XX.bb实际上

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

SYSTEMD_SERVICE_${PN} = "custom.service"
SYSTEMD_AUTO_ENABLE_${PN} = "enable"
但是,它与默认的
systemd
services-
systemd timesyncd.service
之一冲突

在我的bitbake文件中,有没有一种更好的方法来禁用默认的
systemd
服务,即使
systemd_XX.bb
实际上启用了它

我可以创建一个
systemd\%bbappend
文件来修改
systemd
设置,但是我找不到一个可以禁用一个服务而不启用所有其他服务的位置


我找到的有效解决方案是使用

PACKAGECONFIG_remove = "timesyncd"

但是,我想知道这是否是一种合适的方法,是否有一种方法可以禁用它,但保留在系统中。

如果系统在删除另一个包的情况下运行正常,则删除该包是首选解决方案。更少的软件包意味着更简单的系统。

通常您会设置SYSTEMD_AUTO_ENABLE_${PN}=“disable”,这将使服务成为映像的一部分,但在启动时被禁用。但是,对于提供许多默认服务单元的systemd,这可能不是您想要部署的解决方案。您可以通过手术删除etc中的符号链接,这将确保服务不会在引导时自动启动,但.service文件仍然是映像的一部分。因此,将以下内容添加到层中的systemd_uz%.bbappend文件中

do_install_append() {
        rm -rf ${D}${sysconfdir}/systemd/system/sysinit.target.wants/systemd-timesyncd.service
} 
还有其他方法可以禁用此功能,例如使用所述的systemd预设,我认为“官方”方法是在项目中的某个地方设置类似的功能:

PACKAGECONFIG_append_pn-systemd = "--disable-timesyncd"

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

为要禁用的冲突服务添加一个.bbappend配方如何。在其中,您将添加:
SYSTEMD\u AUTO\u ENABLE\u${PN}=“disable”

抱歉@Caspar,我已经尝试过了,但服务仍在运行。警告:SYSTEMD-1\u 230+gitautonic+3a74d4fc90-r0 do\u配置:QA问题:SYSTEMD:invalid PACKAGECONFIG:--disable timesyncd[invalid PACKAGECONFIG]