patch - 如何在 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() 尝试了不同的“配置”,但它们没有用。(当我做“bitbake core-image-base”时没有问题,但是在rootfs中没有应用补丁)
*英语不是我的母语;请原谅我的任何错误。
解决方案
如果要修补现有的配方文件,则需要创建一个openssh_%.bbappend
文件而不是test_1.0.bb
并将每个要替换的文件放入SRC_URI
(ie 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"
中local.conf
。
推荐阅读
- java - 使用 java/selenium 弃用 REST API
- laravel - 进行重定向时如何保留表单的值
- cmake - 从 cpack 组件中删除后缀
- javascript - 如何在客户端创建pdf并在新浏览器中打开它点击AngularJS?
- java - 如何使用 HQL 在 WHERE 子句中使用可选参数?
- javascript - 如何使用 JS 渲染预加载的图像
- java - 保持 JMS 会话始终处于活动状态
- shell - 使用 unix 命令或 shell 脚本查找 2 个 csv 文件之间的差异
- python - python中列表列表的排序
- mysql - 将记录表与负关系映射表连接起来