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