[英]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
条目的type
、 login
、 password
信息的dict
。 魔法本身发生在use_netrc
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.