在我漂亮的标准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.bb
和recipes-core/openssh_conf_prod/openssh_conf_prod_0.1.bb
。在files
子目录下的两个配方目录中,都有一个opensshd_conf
文件,用于dev
和prod
。不过,两种情况的.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
和dev
图像文件recipes-core/images
将每个相关openssh_conf_dev
或openssh_conf_prod
食谱包含在例如CORE_IMAGE_EXTRA_INSTALL_append
变量下。
总而言之,流程为:
openssh
根据映像配方的要求进行安装。sshd_config
正在被删除,新.bbappend
的配方openssh
。我不确定这有多优雅,但可以做到。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句