气隙网络的依赖归档

Dependency archiving for airgapped network

我正在尝试在未连接到 Internet 的网络中使用 Bazel。即使不使用任何特殊的库,Bazel 仍然需要通过 HTTP 下载一些依赖项。

有人建议我尝试设置一个 HTTP 代理服务器来缓存 Bazel 下载的文件,然后将代理服务器及其缓存传输到我们的隔离网络中。

为了让它工作,我需要能够以两种模式操作代理:

  1. 创建缓存时,代理缓存来自 Bazel 的所有请求,并且从不丢弃任何文件。
  2. 在网络中使用缓存时,代理从不尝试缓存任何其他文件,提供缓存中的现有文件并且从不丢弃它们。

我查看了 nginx 以实现此目的,但找不到任何选项来防止缓存中的文件被丢弃。

nginx 有什么办法可以做到这一点吗?如果没有,是否有适合我的用例的代理?或者可能还有其他我没有考虑过的替代解决方案?

您可以在气隙环境中使用 --distdir distribution directory。此分发目录应包含您正在调用的 Bazel 二进制文件的隐式依赖项。

要在气隙环境之外构建这些依赖项,请首先检查正确版本的 Bazel 源代码树:

git clone https://github.com/bazelbuild/bazel "$BAZEL_DIR"
cd "$BAZEL_DIR"
git checkout "$BAZEL_VERSION"

然后,构建包含特定 Bazel 版本的隐式运行时依赖项的 tarball:

bazel build @additional_distfiles//:archives.tar

将此 tarball 导出到可以复制到气隙环境中的目录。请注意 --strip-components 标志,因为 --distdir 对目录嵌套级别可能非常挑剔:

tar xvf bazel-bin/external/additional_distfiles/archives.tar -C "$NEW_DIRECTORY" --strip-components=3

最后,当您在气隙环境中使用 Bazel 时,传递指向目录的 --distdir 标志。我建议将其添加为 .bazelrc 条目:

build --distdir=path/to/directory