重构Poky Dunfell分支后db-native配方do_install阶段chown报错求助
问题根因
你遇到的报错是Yocto Dunfell分支db_5.3.28.bb配方的已知缺陷,触发原因是你将Poky默认放在根目录的官方层迁移到自定义layers子目录后,该配方内置的路径解析逻辑计算出了错误的安装前缀,导致DESTDIR路径拼接异常:从报错日志可以看到image目录(对应构建出的镜像根目录)下还嵌套了主机构建环境的完整绝对路径,do_install阶段执行chown -R root:root时尝试修改超出fakeroot模拟范围/当前用户权限的路径所有权,最终触发Operation not permitted错误。
解决方案
方案1:针对性修复db-native配方(最快捷,无全局影响)
在你的自定义层中新增recipes-support/db/db_5.3.28.bbappend文件,添加以下内容覆盖错误的chown逻辑即可:
do_install() { oe_runmake DESTDIR=${D} install # 移除冗余的全局chown操作,fakeroot环境会自动将文件所有权设置为root:root } # 可选:如果有特殊权限要求,仅对目标安装目录设置权限即可,避免遍历整个镜像目录 do_install[postfuncs] += "fix_db_perms" fix_db_perms() { chmod -R 755 ${D}${prefix} }
修改完成后删除构建缓存重新构建即可:
rm -rf build/tmp/work/x86_64-linux/db-native/ bitbake core-image-minimal
方案2:修复全局路径配置
如果存在全局路径配置错误的问题,按以下步骤修正:
- 检查
build/conf/local.conf,确认COREBASE变量指向你Fork版Poky的根目录(即包含layers、bitbake、oe-init-build-env的上层目录),添加/修正如下配置:COREBASE = "[redacted]/test" - 确认
bblayers.conf中填写的层路径都是绝对物理路径,不要使用相对路径或者软链接路径,避免BitBake路径解析异常。 - 清理全量构建缓存后重新构建:
rm -rf build/tmp bitbake core-image-minimal
方案3:排查环境权限问题
如果上述方案无效,检查构建环境基础配置:
- 确认构建目录所在分区不是NFS、SMB等网络挂载分区,且挂载参数没有设置
no_root_squash、nosuid等会影响fakeroot运行的参数 - 确认你使用非root用户执行构建操作,Yocto不支持直接用root用户执行构建
内容的提问来源于stack exchange,提问作者etfreima
相关产品推荐
相关产品推荐

