【问题标题】:Disable a standard systemd service in Yocto build在 Yocto 构建中禁用标准的 systemd 服务
【发布时间】:2018-11-12 01:33:20
【问题描述】:

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

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

但是,它与默认的 systemd 服务之一 - systemd-timesyncd.service 冲突。

即使systemd_XX.bb 实际上启用了它,是否有一种很好的首选方法来禁用我的 bitbake 文件中的默认 systemd 服务?

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


我找到的工作解决方案是完全使用删除timesyncd

PACKAGECONFIG_remove = "timesyncd"

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

【问题讨论】:

    标签: yocto systemd


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我认为这样做的“官方”方式是在您的项目中的某个地方有这样的东西:

      PACKAGECONFIG_append_pn-systemd = "--disable-timesyncd"
      

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

      【讨论】:

      • 对不起@Caspar,我试过了,服务还在运行。
      • 警告:systemd-1_230+gitAUTOINC+3a74d4fc90-r0 do_configure:QA 问题:systemd: invalid PACKAGECONFIG: --disable-timesyncd [invalid-packageconfig]
      【解决方案3】:

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

      do_install_append() {
              rm -rf ${D}${sysconfdir}/systemd/system/sysinit.target.wants/systemd-timesyncd.service
      } 
      

      还有其他方法可以禁用此功能,例如使用here描述的systemd预设

      【讨论】:

        【解决方案4】:

        如果系统在删除其他软件包后运行良好,那么删除软件包首选解决方案。更少的包意味着更简单的系统。

        【讨论】:

          猜你喜欢
          • 2021-07-31
          • 1970-01-01
          • 1970-01-01
          • 2021-12-29
          • 2015-08-23
          • 1970-01-01
          • 2019-07-13
          • 2020-05-11
          • 2019-07-06
          相关资源
          最近更新 更多