Yocto - 根据映像类型选择正确的配置文件



在我非常标准的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的默认文件。但是,例如,我如何拥有两个单独的文件来影响两个不同的结果 rootfs? 我见过的最接近的是这个问题,这个答案似乎太简单了,不可能是真的。我尝试使用文件夹的映像名称,但我得到的只是两个生成的映像构建中的默认 conf 文件。第二个答案接缝合理,但 AFAIK 我无法替换来自其他配方的文件(如果我错了,请纠正我),所以对于有效的 OP 来说,这可能是一个非常特殊的情况。 运行安装后脚本不是一个选项,因为 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.bb。在子目录下的两个食谱目录中files都有一个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正在被新的.bbappend配方删除openssh.
  3. 每种类型的映像都会调用自己的配方,这会将正确的配置文件添加到正确的文件夹中。

我不确定这有多优雅,但它可以完成工作。

最新更新