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

时间:2019-06-08 08:37:14

标签: 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文件呢? 我所看到的最接近的是this question,而this answer似乎太简单了,难以置信。我已经尝试过使用我的图像名称作为文件夹,但是我得到的只是两个结果图像构建中的默认conf文件。第二个答案似乎很合理,但是AFAIK我无法替换来自其他配方的文件(如果我错了,请更正我),因此对于有效的OP来说,这可能是一个非常特殊的情况。 不能选择运行安装后脚本,因为rootfs在目标计算机上是只读的。 学习手册中的_append_xxxx东西也没有将我推向正确的方向。

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

谢谢。

1 个答案:

答案 0 :(得分:0)

借助到目前为止所获得的友好帮助以及其他一些答案,我已经找到了可行的解决方案。

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

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

这将删除原始sshd_config食谱安装的openssh文件。

接下来,在我的图层中还有另外两个食谱: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。

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

最后,流程为:

  1. openssh正在根据映像配方的要求进行安装。
  2. sshd_config的新.bbappend配方正在删除openssh
  3. 每种图像都有自己的配方,它将正确的配置文件添加到正确的文件夹中。

我不确定这有多优雅,但确实可以。