在 Fedora 26 上,当我这样做时,sudo dnf -v update
我收到错误
> Loaded plugins: builddep, config-manager, copr, debug, debuginfo-install, download, generate_completion_cache,
> needs-restarting, playground, repoclosure, repograph, repomanage,
> reposync, system-upgrade
> DNF version: 2.6.3
> cachedir: /var/cache/dnf
> Cannot download 'http://download.fedoraproject.org/pub/fedora/linux/updates/26/x86_64/':
> Cannot download repomd.xml: Cannot download repodata/repomd.xml: All
> mirrors were tried.
> Error: Failed to synchronize cache for repo 'updates'
我配置了系统范围的代理和 dnf.conf 中的代理。其他连接(例如浏览器)可使用此代理。代理需要身份验证 - 我已在 dnf.confproxy_username
和中设置了所需的值proxy_password
。
我还有一个 .bashrc 设置http_proxy=http://username:password@proxy:port/
.然后,如果我运行curl http://download.fedoraproject.org/pub/fedora/linux/updates/26/x86_64/repodata/repomd.xml
,它会失败并显示 HTTP 407。如果我添加--proxy-ntlm
.根据布吉拉,dnf
已被修补,以便在调用 时允许 NTLM libcurl
。
但是,yum
还用于禁用 Kerberos/“协商”身份验证,因为在某些情况下,这将是提供的第一个选项,并且在 NTLM 可以工作的情况下它会失败。第二个问题提供了补丁,但仅解决了第一个问题后,该错误就被关闭了......
我怎样才能去dnf update
上班?
答案1
我终于找到了解决办法。问题是这个bug,目前还没有修复: https://bugzilla.redhat.com/show_bug.cgi?id=1387622
我必须编辑 /usr/lib/python3.6/site-packages/dnf/repo.py 并更改以下内容:
- h.setopt(librepo.LRO_PROXYAUTH, True)
+ h.setopt(librepo.LRO_PROXYAUTHMETHODS, 8)
答案2
根据布吉拉,dnf
已被修补,以便在调用 时允许 NTLM libcurl
。
但是,yum
还用于禁用 Kerberos/“协商”身份验证,因为在某些情况下,这将是提供的第一个选项,并且在 NTLM 可以工作的情况下它会失败。针对第二个问题提供了补丁,但是在仅解决第一个问题后,该错误就被关闭了...考虑到 NTLM 对您有用,这很可能是您的问题。 (您可以查看该错误以了解有关 HTTP 回复标头在这种情况下的更多详细信息,例如,如果您使用 Wireshark 捕获它们)。
在这种情况下,当前唯一可用的解决方案似乎是在本地计算机上设置代理,将基本身份验证转换为 NTLM 身份验证或类似的身份验证。看NTLM-APS。
答案3
在dnf.conf中添加
proxy=http://cisco-wsa.internal.net:3128
proxy_username=myusername
proxy_password=VeryStrongPassword