代码之家  ›  专栏  ›  技术社区  ›  davidA

Yocto:让配方为另一个应用程序安装配置文件的最佳实践是什么,但前提是要安装所述应用程序?

  •  0
  • davidA  · 技术社区  · 3 年前

    根据图像中是否存在另一个包或配方,建议使用何种方式包含配置文件?

    例如,如果 python3-supervisor 配方包含在目标图像中,编写自定义配方的最佳方式是什么,以便在这种情况下,配方安装 foo.conf 文件到 /etc/supervisor/conf.d/ 目录,如果 蟒蛇3监管者 配方是 安装了,那么它不这样做吗?

    我在看 DISTRO_FEATURES 因为它有时用于安装 systemd 单位文件,但也有 IMAGE_FEATURES 如果 .conf 文件被放在自己的包中,例如。 foo-conf 安装 /etc/supervisor/conf.d/foo.conf 但前提是, IMAGE_FEATURES_append = " supervisor-conf" .

    我在bitbake手册中找不到任何关于如何正确操作的建议。在任何一个OpenEmbedded层中都有一个好的例子吗?

    就我而言,我正在为自己的应用程序编写自己的食谱,这些应用程序将安装自己的 .conf 文件到 /etc/主管/conf.d/ 如果 蟒蛇3监管者 安装了recipe,如果没有安装,则返回到其他内容(或什么都不安装),但问题可以被认为是更一般的“如何根据图像中的内容来选择某些文件的安装?”

    0 回复  |  直到 3 年前
        1
  •  0
  •   davidA    3 年前

    由于没有可靠的方法让一个包知道其他配方中的其他包安装在特定的映像中(每个包都是独立于其他配方的包构建的,可能包含也可能不包含在最终映像中),因此似乎一个很好的方法是使用自定义 DISTRO_FEATURES 一串

    例如,在 local.conf 可以指定任意的自定义功能,我们称之为 supervisord :

    DISTRO_FEATURES_append = " supervisord"
    

    然后在单独的配方中,可以使用以下选项选择性地安装 监督员 .conf 文件,如果选择了此功能:

    # myrecipe.bb
    
    SRC_URI = " \
              ${@bb.utils.contains('DISTRO_FEATURES', 'supervisord', 'file://myrecipe.conf', '', d)} \
              "
    
    # ...
    
    do_install() {
        if ${@bb.utils.contains('DISTRO_FEATURES', 'supervisord', 'true', 'false', d)}; then
            install -d ${D}${sysconfdir}/supervisor/conf.d
            install -m 0644 ${WORKDIR}/myrecipe.conf ${D}${sysconfdir}/supervisor/conf.d/myrecipe.conf
        fi
    }
    

    不像 IMAGE_FEATURES ,这不需要在中预定义功能 .bbclass 或诸如此类的东西。相反 DISTRO_FEATURES 只是被视为以空格分隔的字符串列表,并且在该列表中检查特定字符串是微不足道的。