如何在Yocto中通过BitBake配方拉取GitHub Releases资源?
正确配置BitBake配方拉取GitHub Releases资源的方法
404报错核心原因
- GitHub的
/releases/download/latest/路径不是直接资源路径,会先返回302重定向到对应版本的tag路径,部分情况下BitBake获取逻辑处理异常就会触发404;如果你的仓库最新版本是预发布版本,latest路径不会指向该版本,也会返回404 github_private_asset=1是私有仓库拉取的专用参数,公开仓库使用该参数会额外触发鉴权逻辑,导致404- Yocto默认要求所有下载资源配置哈希校验值,如果你用动态的latest资源没有关闭校验也会导致拉取失败
公开仓库配置方案
固定版本写法(推荐,符合Yocto构建可复现要求)
这种写法每次构建都会拉取固定版本的资源,不会出现版本漂移的问题,是生产环境的最佳实践:
DESCRIPTION = "web based app " LICENSE = "CLOSED" # 定义应用版本,后续升级只需修改此处 APP_VER = "1.0.0" APP_DESTINATION = "${libdir}/App" SRC_URI = " \ https://github.com/User/App/releases/download/v${APP_VER}/App.zip \ " # 提前下载对应版本的App.zip,用sha256sum命令计算哈希值后填入此处,避免资源被篡改 SRC_URI[sha256sum] = "替换为实际的sha256哈希值" S = "${WORKDIR}" do_install_append() { install -d ${D}${APP_DESTINATION} cp -r ${S}/App/* ${D}${APP_DESTINATION} } FILES_${PN} += "\ ${APP_DESTINATION}/* \ "
自动拉取最新版本写法(不推荐,会破坏构建可复现性)
如果确实需要每次构建都拉取最新的Release版本,可以用以下配置:
DESCRIPTION = "web based app " LICENSE = "CLOSED" APP_DESTINATION = "${libdir}/App" SRC_URI = " \ https://github.com/User/App/releases/download/latest/App.zip;downloadfilename=App-latest.zip \ " # 关闭校验,因为latest版本的资源哈希会动态变化 BB_STRICT_CHECKSUM = "0" S = "${WORKDIR}" do_install_append() { install -d ${D}${APP_DESTINATION} cp -r ${S}/App/* ${D}${APP_DESTINATION} } FILES_${PN} += "\ ${APP_DESTINATION}/* \ "
私有仓库配置方案
私有仓库需要先配置GitHub访问权限,再调整配方:
- 首先在构建环境的
conf/local.conf中添加GitHub个人访问token(token需要有仓库的读取权限,不要把token写到配方里提交到版本库,避免泄露):
GITHUB_TOKEN = "你的GitHub个人访问token"
- 配方中继承
github-base类,配置SRC_URI时添加github_private_asset=1参数:
DESCRIPTION = "web based app " LICENSE = "CLOSED" # 继承GitHub相关基础类,提供私有资源拉取能力 inherit github-base APP_VER = "1.0.0" APP_DESTINATION = "${libdir}/App" SRC_URI = " \ https://github.com/User/App/releases/download/v${APP_VER}/App.zip;github_private_asset=1 \ " SRC_URI[sha256sum] = "替换为实际的sha256哈希值" S = "${WORKDIR}" do_install_append() { install -d ${D}${APP_DESTINATION} cp -r ${S}/App/* ${D}${APP_DESTINATION} } FILES_${PN} += "\ ${APP_DESTINATION}/* \ "
调试注意事项
- 可以把SRC_URI中的链接复制到浏览器匿名窗口打开,确认可以正常下载后再写入配方
- 如果仍然出现404,可以在执行bitbake命令时添加
-v参数,查看详细的请求日志,确认实际请求的URL和预期是否一致 - 使用latest拉取时,要确认GitHub仓库的最新Release是正式版本,没有勾选「预发布」选项,否则latest路径不会指向该版本
内容的提问来源于stack exchange,提问作者Hsn
相关产品推荐
相关产品推荐

