0%

[笔记] bazel 依赖项缓存

上一篇 Envoy bazel 学习 & 踩坑 中记录了,bazel 一个很重要的功能就是管理依赖项。我们只需要申明依赖项的来源,bazel 会自动去获取。

听上去是挺美好的,然而现实中的网络环境确实残酷的。这不,最近就踩坑了。

前两天编译 Envoy 的时候,开启了 WASM,就需要下载 v8 那个依赖项。那个依赖项死活下载不了,在开发机上,每次下载完成的长度都少一大截,通不过验证。

不过,在本地浏览器中下载的文件是正常的,就想着 hack 一下他的缓存,然而这种内部实现,是没有文档的。折腾了一番,搞定了,记录一笔的。

bazel 的依赖项缓存,是按照 sha 来的,比如如下这个例子:

1
2
3
4
5
6
7
8
boringssl = dict(
project_name = "BoringSSL",
project_url = "https://github.com/google/boringssl",
version = "098695591f3a2665fccef83a3732ecfc99acdcdd",
sha256 = "e141448cf6f686b6e9695f6b6459293fd602c8d51efe118a83106752cf7e1280",
strip_prefix = "boringssl-{version}",
urls = ["https://github.com/google/boringssl/archive/{version}.tar.gz"],
),

首先缓存目录是:~/.cache/bazel/_bazel_doujiang24/cache/repos/v1/content_addressable/,其中的 doujiang24 每个环境会不一样。

然后${version}.tar.gz 文件会缓存在 sha256/$sha256/file$sha256 也就是上述配置中申明的。

bazel 也就是通过类似的方式来查找,校验缓存的。

1
2
$ sha256sum sha256/e141448cf6f686b6e9695f6b6459293fd602c8d51efe118a83106752cf7e1280/file
e141448cf6f686b6e9695f6b6459293fd602c8d51efe118a83106752cf7e1280 sha256/e141448cf6f686b6e9695f6b6459293fd602c8d51efe118a83106752cf7e1280/file

需要 hack 的时候,通过写入对应的 file 文件即可。