气隙网络的依赖归档
Dependency archiving for airgapped network
我正在尝试在未连接到 Internet 的网络中使用 Bazel。即使不使用任何特殊的库,Bazel 仍然需要通过 HTTP 下载一些依赖项。
有人建议我尝试设置一个 HTTP 代理服务器来缓存 Bazel 下载的文件,然后将代理服务器及其缓存传输到我们的隔离网络中。
为了让它工作,我需要能够以两种模式操作代理:
- 创建缓存时,代理缓存来自 Bazel 的所有请求,并且从不丢弃任何文件。
- 在网络中使用缓存时,代理从不尝试缓存任何其他文件,提供缓存中的现有文件并且从不丢弃它们。
我查看了 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
我正在尝试在未连接到 Internet 的网络中使用 Bazel。即使不使用任何特殊的库,Bazel 仍然需要通过 HTTP 下载一些依赖项。
有人建议我尝试设置一个 HTTP 代理服务器来缓存 Bazel 下载的文件,然后将代理服务器及其缓存传输到我们的隔离网络中。
为了让它工作,我需要能够以两种模式操作代理:
- 创建缓存时,代理缓存来自 Bazel 的所有请求,并且从不丢弃任何文件。
- 在网络中使用缓存时,代理从不尝试缓存任何其他文件,提供缓存中的现有文件并且从不丢弃它们。
我查看了 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