You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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访问权限,再调整配方:

  1. 首先在构建环境的conf/local.conf中添加GitHub个人访问token(token需要有仓库的读取权限,不要把token写到配方里提交到版本库,避免泄露):
GITHUB_TOKEN = "你的GitHub个人访问token"
  1. 配方中继承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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:30:00