【发布时间】:2019-10-23 13:56:50
【问题描述】:
在我相当标准的 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 文件。第二个答案很合理,但是我无法替换来自其他配方的文件(如果我错了,请纠正我),所以对于有效的 OP,这可能是一个非常具体的案例。
运行安装后脚本不是一个选项,因为 rootfs 在目标上是只读的。
学习手册中的 _append_xxxx 内容并没有将我推向正确的方向。
希望有人可以分享一些经验,因为这似乎是一个非常简单的问题,应该有一些内置的解决方案。
谢谢。
【问题讨论】:
-
一种解决方案是使用overlay bbclass。另一种解决方案是在 local.conf 中创建一个自定义变量,比如说
IS_PROD = "1",然后你可以在你的图像配方中使用类似这样的东西:SRC_URI += "${@ "file://conf1" if bb.utils.to_boolean(d.getVar('IS_PROD')) else "file://conf2" }" -
@Nayfe,我不想在 local.conf 中设置这个,因为它是两个图像的同一个文件。 @danlor,也许我可以使用两个单独的配方,添加一个替换文件的
pkg_postinst_${PN}() {},并将它们添加到不同的图像配方中?会尝试的。感谢您的建议。 -
你可以在
do_install()中做同样的事情来重命名sshd_config中的conf1或conf2。您还可以在ROOTFS_POSTPROCESS_COMMAND中使用echo/sed调整默认文件
标签: yocto