43 设置哈希等价服务器
哈希等价 服务器可以通过 Yocto Project 概述与概念手册的 哈希等价 一节 所述机制,缩短构建时间。
本文介绍如何设置 BitBake 中 bitbake-hashserv 脚本提供的 参考哈希等价服务器。
本指南只说明如何设置本地哈希等价服务器,不涉及用于保护服务器的周边基础设施。
43 配置哈希等价服务器
以下命令均假定在 BitBake 仓库中运行,该仓库可从 此处 获取。
启动基本的哈希等价服务器,只需运行:
./bin/bitbake-hashserv
这会使用脚本的全部默认选项,足以启动本地服务器。
运行 ./bin/bitbake-hashserv --help 可查看脚本接受的选项。重要选项包括:
--database控制哈希服务器数据库的位置,默认为./hashserver.db。--bind控制服务器绑定地址,默认为unix://./hashserver.sock。可以指定三种类型的地址:
unix://PATH:绑定到PATH处的 Unix 套接字。wss://ADDRESS:PORT:绑定到ADDRESS:PORT处的 Websocket。ADDRESS:PORT:绑定到ADDRESS:PORT处的原始 TCP 套接字。
--log控制服务器日志级别,例如INFO会输出客户端连接信息。--upstream指定用于拉取哈希的上游服务器。此选项没有默认值,即默认 不使用上游服务器。--db-username和--db-password控制数据库访问。--read-only禁止客户端上报哈希。
也可以通过运行环境中的变量设置这些选项。运行
./bin/bitbake-hashserv --help 可查看能够导出的变量名称。
警告
共享的哈希等价服务器需要与 共享状态 缓存一起维护, 否则服务器可能报告仅存在于个别客户端上的共享状态哈希。
因此,建议一个哈希等价服务器对应一个指定共享状态缓存,并以 只读模式
(--read-only 选项)启动,避免保存仅在客户端本地存在的共享状态缓存
的等价关系。
如果尚无共享状态缓存,应允许服务器接收哈希上报,即不使用 --read-only,
以建立初始哈希等价数据库。
43 设置 Yocto Project 构建
要使用上一节启动的服务器,请在 configuration file 中设置以下变量:
BB_HASHSERVE = "<bind address>"
BB_SIGNATURE_HANDLER = "OEEquivHash"
将 <bind address> 替换为上一节启动的服务器地址。
BB_SIGNATURE_HANDLER 的更多信息见该变量的文档。
还可以通过 BB_HASHSERVE_UPSTREAM 变量指定上游服务器,例如:
BB_HASHSERVE_UPSTREAM = "wss://hashserv.yoctoproject.org/ws"
这样本地服务器便会从上游服务器拉取哈希。只有服务器正在运行,也就是已设置 BB_HASHSERVE 时,BB_HASHSERVE_UPSTREAM 才有效。
要在启动构建时输出哈希等价处理的调试信息,可以在 configuration file 中如下配置 BitBake 日志:
BB_LOGCONFIG = "hashequiv.json"
hashequiv.json 的内容如下:
{
"version": 1,
"loggers": {
"BitBake.SigGen.HashEquiv": {
"level": "VERBOSE",
"handlers": ["BitBake.verbconsole"]
},
"BitBake.RunQueue.HashEquiv": {
"level": "VERBOSE",
"handlers": ["BitBake.verbconsole"]
}
}
}
这会将哈希等价相关变化输出到控制台,例如:
NOTE: Task <recipe.bb>:do_<task> unihash changed to dc0da29c62a2d78d8d853fbb9c173778fe7d6fa4a68c67494b17afffe8ca1894