我正在构建一个Bitbake配方并收到以下错误消息:
ERROR: When reparsing virtual:native:/path/to/poky/meta/recipes-devtools/cve-check-tool/cve-check-tool_5.6.4.bb.do_populate_cve_db, the basehash value changed from 0b637979bcb5db4263f9ed97497a6330 to bcd28a5efe646ed4d327fefa349f889c. The metadata is not deterministic and this needs to be fixed.
这在一个干净的版本(之后bitbake -c cleanall -c cleansstate <recipe>)中再现.
这个错误的原因是什么?尚未从上游版本修改配方.
小智 8
我偶然发现了类似的错误。对我来说,它发生在 do_install 例程中。我的目标是存储一个文件的副本,其名称附加有 ${DATETIME} ,指的是特定位置的构建时间。
显然,食谱在构建过程中被解析多次,并且由于第二次解析时时间已更改,因此插入了不同的 ${DATETIME} 值,因此元数据被识别为已更改。
小智 6
以下是添加此诊断消息的 yocto 补丁 https://patchwork.openembedded.org/patch/133517/
这是提交消息,解释了其原因以及获取问题更多详细信息的可能方法:
Bitbake 可以在构建过程中解析炊具和工作器中的元数据。如果元数据不是确定性的,它可能会在这两个解析之间发生变化,这会让事情变得很混乱。事实证明,目前很难调试这些问题。
此补丁可确保将原始解析中的 basehash 传递给工作人员,并在重新解析时检查这些内容的一致性。如果发现不一致,则向用户显示错误消息。
siggen.py 中有调试代码(请参阅“慢但可用于调试不匹配的基哈希”注释代码),由于性能问题,我们默认不启用此功能。如果您遇到此消息,请启用此代码,您将在 tmp/stamps 中找到“sigbasedata”文件,这些文件应与此错误消息中显示的哈希值相对应。文件上的 bitbake-diffsigs 应显示哪些变量正在发生变化。
签字人:Richard Purdie
小智 5
它帮助我删除配方的共享缓存:
bitbake recipename -c cleansstate
Run Code Online (Sandbox Code Playgroud)
然后,一切都像魅力一样发挥作用。
发生这种情况是因为任务被评估两次,第一次由 Cooker 评估,第二次由 Bitbake Worker 评估。任务哈希会计算两次,如果不匹配,则认为元不稳定。基本哈希值是根据任务脚本中使用的变量计算得出的。因此,如果您使用与时间相关的变量(例如 DATETIME),您将收到此哈希不匹配错误。为了避免此错误,您需要使用 VarFlags 从哈希计算中排除变量。
do_something[vardepsexclude]="DATETIME"
Run Code Online (Sandbox Code Playgroud)
在这里您可以找到更详细的解释。 https://www.kc8apf.net/2017/01/tired-of-taskhash-mismatch/
| 归档时间: |
|
| 查看次数: |
4516 次 |
| 最近记录: |