繁体   English   中英

Bazel 的 http_file 的调试认证

[英]Debug authentication of Bazel's http_file

我想通过 HTTP 在 Bazel 中获取一些数据。 有一个http_file 方法看起来像我想要的。 我从中获取的远程服务器使用身份验证,因此我将其编写为

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")

http_file(
    name = "data_file",
    urls = ["https://example.com/data.0.1.2"],
    sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    downloaded_file_path = "data_file",
)

当我尝试构建时,我得到

警告:从https://example.com/data.0.1.2下载失败:class com.google.devtools.build.lib.bazel.repository.downloader.UnrecoverableHttpException GET 返回 401 Unauthorized

紧接着是致命错误,因为该文件不存在。

该错误让我认为我没有正确进行身份验证。 我有一个.netrc文件, curl能够使用它来获取文件。

有没有办法让我调试? 如果是 curl,我会通过-v并查看与请求一起发送的 auth 标头。 我不确定 bazel 是否无法发送任何身份验证或者它是否不正确。

在 Mac OS (Darwin 19.6.0) 和 Linux (Ubuntu 18.04) 上运行 Bazel 3.2.0。

HTTP 401 听起来确实不正确或根本没有经过身份验证。 .netrc应该得到支持和认可。 如果没有使用netrc属性明确指定,如果HOME在环境中并且 bazel 在非 Windows 主机上运行(自 bazel 1.1 以来就是这种情况;并且很快在 0.29 中)或%USERPROFILE%/.netrc ,则将尝试${HOME}/.netrc netrc %USERPROFILE%/.netrc如果变量在环境中并且在 Windows 上运行(从 3.1 开始就是这种情况)。 冒着明显的风险, .netrc应该由使用它的进程运行的相同 UID 拥有,并且它的 permbits 应该是0600 如果需要 http basic 以外的身份验证方法, auth_patterns需要使用auth_patterns属性进行配置。

我不知道有任何现成的存储库规则调试工具,例如 CLI 标志,但在这种情况下,从tools/build_defs/repo复制它使用的规则和函数的实现应该是可行的,检测它以获得从中调试信息并将其用于此目的。 对于初学者来说,也许只是print(auth) auth = _get_auth(ctx, all_urls)结果,看看该规则是否对如何与有问题的主机交谈有正确的想法。 它应该是一个包含每个单独urls条目的typeloginpassword信息的dict 魔法本身发生在use_netrc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM