Patch 如何在yocto recipe中对根文件系统中的文件应用修补程序

Patch 如何在yocto recipe中对根文件系统中的文件应用修补程序,patch,yocto,bitbake,recipe,Patch,Yocto,Bitbake,Recipe,我想对rootfs中/etc中的文件应用补丁。所以我创建了一个Yocto食谱 ├── test_1.0.bb └── files └── sshd.patch 我开始创建文件.bb,如下所示: DESCRIPTION = "Patch files" SECTION = "Patch" LICENSE = "MIT" FILESEXTRAPATHS_prepend := "${THISDIR}/files:" SRC_URI = " \ file://sshd.patch \

我想对rootfs中/etc中的文件应用补丁。所以我创建了一个Yocto食谱

├── test_1.0.bb
└── files
    └── sshd.patch
我开始创建文件.bb,如下所示:

DESCRIPTION = "Patch files"
SECTION = "Patch"
LICENSE = "MIT"

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

SRC_URI = " \
    file://sshd.patch \
"
  • 此时我不明白,我必须使用do\u installdo\u patch方法做什么
  • 如何指定要修补的文件的路径?(例如,要修补的文件sshd位于/etc/ssh中)
我用do_install()尝试了不同的“配置”,但都不起作用。(当我执行“bitbake core image base”时,没有问题,但在rootfs中,补丁程序没有应用)


*英语不是我的母语;请原谅我的错误。

如果你想修补现有的配方文件,你需要创建一个
openssh\%.bbappend
文件,而不是
test\u 1.0.bb
,并将要替换的每个文件放入
SRC\u URI
(即
file://sshd_config
)而不是
sshd.patch

然后,由于这些文件已经存在,您不需要从原始配方修改do_install。否则,您需要添加

do_install_append(){
    install -Dm 0644 ${S}/myfile ${D}${sysconfdir}/example/myfile 
}

# and modify FILES_${PN} if file is added in unusual place
顺便说一句,一个配方不能覆盖另一个配方文件而不发生冲突,所以另一个解决方案是在rootfs创建时使用补丁对其进行修补。(这就是为什么不能使用
test_0.1.bb
进行测试)

否则,修补程序文件将自动应用,因此您无需修改do_patch或do_install


如果您添加了一个配方,请不要忘记在您的例子中使用
local.conf
中的
image\u INSTALL\u append=“test”
将其添加到image中。

因此,我不知道我是否理解错了,但我尝试在我的测试中这样做:
ROOTFS\u POSTPROCESS\u命令+=“set\u patches;”set\u patches(){patch${sysconfdir}/ssh/sshd\u config\u readonly${WORKDIR}/sshd\u config\u readonly.patch}
但它不起作用。必须用
${sysconfdir}/ssh
替换
${IMAGE\u ROOTFS}/etc/ssh
。但是ROOTFS_POSTPROCESS_命令是一个图像变量,所以您必须从核心图像库创建一个自定义图像来添加它。老实说,我认为您应该使用bbappend进行这种修改。非常感谢。我使用了“第一个选项”,所以在自定义映像中使用ROOTFS\u POSTPROCESS\u命令(因为我需要自定义映像)。在不久的将来,我将尝试使用.bb,这只是另一回事。我创建了openssh%.bbappend文件,但是我可以在
do\u install\u append(){…}
中使用
sshd.conf.patch
(我用
diff
命令创建的)文件吗?或者让我使用我已经修补过的文件
sshd.conf
?您必须使用修补过的sshd.conf文件