Yocto拉取更新后bitbake编译ros-image-turtlebot3-core的do_rootfs阶段缺失rpm报错
问题根因
该问题是2021年前后Yocto dunfell分支补丁、meta-ros foxy分支配置变更共同导致的已知兼容性问题,核心触发原因有两个:
- 本地留存的旧版本sstate缓存与更新后的上游配方RPM部署规则不匹配,旧缓存生成的RPM包不会触发重新部署流程,仅会保留在对应recipe的work目录deploy-rpms子路径下,不会同步到全局deploy/rpm目录
- meta-ros在2021年的更新中调整了glibc-locale、gcc-runtime等基础依赖的子包拆分规则,原有构建配置未同步开启强制全局部署开关,导致拆分出的子包没有被自动同步到全局RPM部署目录
解决方案
快速修复当前构建
不要使用软链接方式规避,软链接生成的包不会被RPM包管理器纳入索引校验,会引发后续的依赖冲突、版本校验错误等异常,建议优先清理对应异常包的sstate缓存重新生成:
# 清理已知异常包的sstate缓存 bitbake -c cleansstate glibc-locale gcc-runtime # 重新触发构建 bitbake ros-image-turtlebot3-core
如果仍有其他包报同类路径错误,将对应包名加入cleansstate列表即可。
永久规避同类问题
在构建配置文件conf/local.conf中添加如下配置,强制所有生成的RPM包自动同步到全局部署目录:
# 强制RPM包部署到全局deploy/rpm路径 RPM_DEPLOY_TO_DEPLOY_DIR = "1" PACKAGE_WRITE_DEPS += "package-index"
严重混乱时的快速重置
如果本地构建目录的缓存已经出现大面积路径异常,不需要重新搭建整套Yocto环境,仅删除构建目录下的临时文件和RPM部署目录重新构建即可,比完整重编译节省大量时间:
rm -rf build/BUILD-poky-foxy-dunfell/tmp build/BUILD-poky-foxy-dunfell/deploy/rpm bitbake ros-image-turtlebot3-core
内容的提问来源于stack exchange,提问作者rrd1
相关产品推荐
相关产品推荐

