我正在使用 Yocto 构建的 Linux。我需要对/etc/ssh/sshd_config
文件添加一些更改。我使用以下命令创建了以下补丁文件meld
:
--- a/sshd_config
+++ b/sshd_config
@@ -116,3 +116,8 @@
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
+
+#SFTP server configuration
+Match Group root
+ChrootDirectory /share
+ForceCommand internal-sftp
我meta-mylayer/recipes-connectivity/openssh
创建了openssh_8.2p1.bbappend
包含以下内容的文件:
FILESEXTRAPATHS_prepend := "${THISDIR}:"
SRC_URI += "file://configure_sftp_server.patch"
我将 .patch 文件放在同一目录中。问题是 Yocto 在构建图像期间既不显示错误也不显示警告,但它不应用我的补丁。
创建补丁文件后,我更改了前两行,因为在 meld 版本中它们包含比较文件的绝对路径。我想这可能是问题所在,但我不知道应该写什么。
预先感谢您的任何帮助。
答案1
我思考问题是,有一个配置过程会在应用补丁后发生的编译过程中创建 sshd_config,从而覆盖您的补丁。可能有更好的方法(利用并修改该配置过程),但未能找到相关文档,我发现我可以通过添加 do_compile_append 阶段来应用补丁。将文件命名为 .patch 以外的名称可以防止 Yocto 系统尝试应用它两次(并标记错误)。
SRC_URI += " file://my_patch.latepatch "
do_compile_append() {
patch -i ../my_patch.latepatch
}
答案2
openssh
如果版本正确的话,我看起来是正确的。您可以在该build/tmp/work
文件夹中检查您的补丁是否可以进入构建过程。
我遇到未应用补丁的主要原因是早期层中的一些傻瓜覆盖了do_install_append
所有补丁而不是应用正确的补丁。
要找到这样的东西,请执行
grep -r do_install_append sources/*/recipes-connectivity/openssh*