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
}

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

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

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

总而言之,流程为:

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章