如何向bitbake传递Artifactory凭据?Docker运行场景问题求助
问题描述
我在Docker容器内运行以下bitbake命令:
docker exec -i yocto /bin/bash -c "bitbake ${IMAGE} --runall=fetch"
执行后触发错误:
ERROR: <RESOURCE-vXXX> do_fetch: Fetcher failure: Fetch command export PSEUDO_DISABLED=1; export PATH="..."; export HOME="..."; /usr/bin/env wget -t 2 -T 30 --passive-ftp --no-check-certificate -O /path/to/archive.tar.gz.tmp -P /path/to/downloads 'https://<ARTIFACTORY.COM>/path/to/archive.tar.gz' --progress=dot -v failed with exit code 6, no output ERROR: <RESOURCE-vXXX> do_fetch: Bitbake Fetcher Error: FetchError('Unable to fetch URL from any source.', 'https://<ARTIFACTORY.COM>/path/to/archive.tar.gz;unpack=1;name=vendor;subdir=/path/to/<RESOURCE>')
根据资料,退出码6代表用户名/密码认证失败,我需要给bitbake或通过docker exec传递Artifactory的凭据/API密钥,有没有现成的实现方案?
更新尝试
我在conf/local.conf中添加了以下配置:
SRC_URI += \"https://<ARTIFACTORY.COM>;protocol=https;user=${ARTIFACTORY_USER}:${ARTIFACTORY_PASSWD}\"
但现在出现新错误:
Bitbake Fetcher Error: NoChecksumError('Missing SRC_URI checksum', 'https://<ARTIFACTORY.COM>')
解决方案
一、正确传递Artifactory凭据的两种方案
1. 环境变量注入(适配Docker exec场景)
直接在docker命令中注入环境变量,让容器内的bitbake能读取到认证信息:
docker exec -i -e ARTIFACTORY_USER=你的用户名 -e ARTIFACTORY_PASSWD=你的密码/API密钥 yocto /bin/bash -c "bitbake ${IMAGE} --runall=fetch"
然后在对应资源的配方文件(.bb或.bbappend)中,给目标资源的SRC_URI添加认证参数,不要在local.conf里全局追加:
SRC_URI = "https://<ARTIFACTORY.COM>/path/to/archive.tar.gz;protocol=https;user=${ARTIFACTORY_USER}:${ARTIFACTORY_PASSWD}"
2. 使用.netrc安全存储凭据
在宿主机创建~/.netrc文件,内容如下:
machine <ARTIFACTORY.COM> login 你的用户名 password 你的API密钥/密码
执行docker命令时,把这个文件挂载到容器内的用户home目录:
docker exec -i -v ~/.netrc:/home/yocto-user/.netrc yocto /bin/bash -c "bitbake ${IMAGE} --runall=fetch"
wget/curl会自动读取.netrc的认证信息,无需修改任何配方或配置文件,安全性更高。
二、解决NoChecksumError错误
这个错误是因为新增的SRC_URI没有提供文件校验和,Bitbake默认强制校验文件完整性,解决方法如下:
1. 自动生成并添加校验和
运行以下命令,Bitbake会自动计算对应资源的校验和,并更新到配方文件中:
bitbake -c checksum <RESOURCE>
这里的<RESOURCE>是报错中的资源名称(比如<RESOURCE-vXXX>)。
2. 临时禁用校验(仅测试用,不推荐正式构建)
如果只是临时测试,可以在conf/local.conf中添加:
BB_STRICT_CHECKSUM = "0"
注意:正式构建不要这么做,会失去文件完整性校验的安全保障。
内容的提问来源于stack exchange,提问作者DonnyFlaw
相关产品推荐
相关产品推荐

