Yocto - select 基于图像类型的正确配置文件

Yocto - select the right configuration file based on image type

在我非常标准的 Yocto 构建中,我包含了 openssh。它的配置文件 /etc/ssh/sshd_config 对于生产和开发映像自然应该不同(例如,一个人希望 root 登录开发映像而不是生产映像)。 生产图像和开发图像是我层下 recipes-core/images 中的不同配方(.bb 文件),其中还包括一些其他内容。 为了实现对 sshd_config 文件的自定义,我在我的层下创建了 recipes-connectivity/openssh 目录 openssh_%.bbappend ,内容如下:

SUMMARY = "OpenSSH configuration"
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

files 目录中,我有自己的 sshd_conf。这很好用,我的文件被用来代替 openssh 的默认文件。但是我怎么能有两个单独的文件来影响两个不同的结果根文件系统呢? 我见过的最接近的是 , and 似乎太简单了,不可能是真的。我试过使用我的图像名称作为文件夹,但我得到的只是两个生成的图像构建中的默认 conf 文件。第二个答案接缝合理,但 AFAIK 我无法替换来自其他食谱的文件(如果我错了请纠正我),所以对于有效的 OP 来说这可能是一个非常具体的案例。 运行 post-install 脚本不是一个选项,因为 rootfs 在目标上是只读的。 研究手册中的 _append_xxxx 内容也没有将我推向正确的方向。

希望有人可以分享一些经验,因为这似乎是一个非常简单的问题,应该有一些内置的解决方案。

谢谢。

凭借迄今为止收到的帮助和其他几个答案,我找到了可行的解决方案。

在我的图层中有 recipes-connectivity/openssh/openssh_%.bbappend 内容如下:

do_install_append () {
    rm ${D}${sysconfdir}/ssh/sshd_config
}

这将删除由原始 openssh 配方安装的 sshd_config 文件。

接下来,我的图层中还有两个额外的食谱:recipes-core/openssh_conf_prod/openssh_conf_dev_0.1.bbrecipes-core/openssh_conf_prod/openssh_conf_prod_0.1.bbfiles 子目录下的两个食谱目录中都有一个 opensshd_conf 文件,与 devprod 不同。 .bb 食谱 在这两种情况下是相同的,但是:

DEPENDS = "openssh"

LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"

SRC_URI = "file://sshd_config"

S = "${WORKDIR}"

do_install() {
    install -d ${D}${sysconfdir}/ssh
    install ${WORKDIR}/sshd_config ${D}${sysconfdir}/ssh
}

(*) 注意开头的DEPENDS

配方所做的只是验证有一个目标目录可以将文件复制到,并将它在 files 目录下的文件复制到目标 rootfs。

然后,当然,我食谱的 recipes-core/images 目录下的 proddev 图像文件包含每个相关的 openssh_conf_devopenssh_conf_prod 食谱,例如 CORE_IMAGE_EXTRA_INSTALL_append 变量。

总而言之,流程是:

  1. openssh 正在按照图像配方的要求进行安装。
  2. sshd_config 正在被 openssh 的新 .bbappend 配方删除。
  3. 每种图像调用自己的配方,将正确的配置文件添加到正确的文件夹。

我不确定这有多优雅,但它确实起作用了。