在 Fedora 23 中,有人知道为什么 DNF 会搞砸吗?
root>dnf info
Traceback (most recent call last):
File "/usr/bin/dnf", line 58, in <module>
main.user_main(sys.argv[1:], exit_code=True)
File "/usr/lib/python2.7/site-packages/dnf/cli/main.py", line 174, in user_main
errcode = main(args)
File "/usr/lib/python2.7/site-packages/dnf/cli/main.py", line 60, in main
return _main(base, args)
File "/usr/lib/python2.7/site-packages/dnf/cli/main.py", line 112, in _main
cli.run()
File "/usr/lib/python2.7/site-packages/dnf/cli/cli.py", line 1098, in run
self._process_demands()
File "/usr/lib/python2.7/site-packages/dnf/cli/cli.py", line 813, in _process_demands
load_available_repos=lar)
File "/usr/lib/python2.7/site-packages/dnf/base.py", line 239, in fill_sack
self._add_repo_to_sack(r)
File "/usr/lib/python2.7/site-packages/dnf/base.py", line 115, in _add_repo_to_sack
hrepo.filelists_fn = repo.filelists_fn
TypeError: Expected a string or a unicode object
无法使用其他 dnf 命令
我遇到了同样的问题,从 /etc/yum.repos.d/ 文件夹中删除一个(很可能已损坏).repo 解决了问题。
删除了所有存储库。似乎已损坏。
我在设置 Artifactory rpm 存储库时遇到了这个问题,正如其他评论所建议的,它与存储库配置有关。
如果您查看引发错误的 _add_repo_to_sack(r) 方法的开头:
def _add_repo_to_sack(self, repo):
repo.load()
hrepo = repo._hawkey_repo
hrepo.repomd_fn = repo._repomd_fn
hrepo.primary_fn = repo._primary_fn
hrepo.filelists_fn = repo._filelists_fn
...
所有任务都对应于加载存储库配置和元数据,准备供 DNF 使用。
我对这些不是100%,但我认为:
hrepo.repomd_fn = repo._repomd_fn
指定repomd.xml 文件的路径hrepo.primary_fn = repo._primary_fn
将路径分配给primary.xml 文件hrepo.filelists_fn = repo._filelists_fn
指定 filelists.xml 文件的路径看到这个后,我检查了我的存储库 repodata/repomd.xml 元数据文件,并注意到它缺少“filelists”条目(因此出现错误)。
我必须在 JFrog Artifactory 存储库中“启用文件列表索引”,以便 RPM 元数据计算也将包括对 filelists.xml 元数据文件进行索引。一旦该文件包含在存储库中,dnf 就可以正常工作了。