如何在 yocto 配方中对根文件系统中的文件应用补丁
How to apply a patch to a file in the root file system in yocto 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 \
"
- 此时我没明白,我要用什么do_install或者do_patch 方法?
- 如何指定要修补的文件的路径? (例如要打补丁的文件sshd在/etc/ssh)
我用 do_install() 尝试了不同的 "configuration",但它们没有用。 (当我这样做时 "bitbake core-image-base" 没有问题,但是在 rootfs 中没有应用补丁)
*英语不是我的母语;请原谅我的任何错误。
如果您想修补现有的配方文件,您需要创建一个 openssh_%.bbappend
文件而不是 test_1.0.bb
并将每个文件替换为 SRC_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 时对其进行修补,ROOTFS_POSTPROCESS_COMMAND。 (这就是为什么你不能为此使用 test_0.1.bb
的原因)。
否则,补丁文件会自动应用,因此您无需修改 do_patch 或 do_install。
如果您添加食谱,请不要忘记将其添加到图像中 IMAGE_INSTALL_append = " test"
in local.conf
在您的情况下。
我想给 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_install或者do_patch 方法?
- 如何指定要修补的文件的路径? (例如要打补丁的文件sshd在/etc/ssh)
我用 do_install() 尝试了不同的 "configuration",但它们没有用。 (当我这样做时 "bitbake core-image-base" 没有问题,但是在 rootfs 中没有应用补丁)
*英语不是我的母语;请原谅我的任何错误。
如果您想修补现有的配方文件,您需要创建一个 openssh_%.bbappend
文件而不是 test_1.0.bb
并将每个文件替换为 SRC_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 时对其进行修补,ROOTFS_POSTPROCESS_COMMAND。 (这就是为什么你不能为此使用 test_0.1.bb
的原因)。
否则,补丁文件会自动应用,因此您无需修改 do_patch 或 do_install。
如果您添加食谱,请不要忘记将其添加到图像中 IMAGE_INSTALL_append = " test"
in local.conf
在您的情况下。