在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]