createrepo 失败并显示 headerRead 失败消息

createrepo 失败并显示 headerRead 失败消息

我执行

createrepo -v --update epel-dir/

在包号 14173 处,该过程失败,Python 堆栈跟踪抱怨:

headerRead failed: Header sanity check: OK

所以,我想好吧,我下载了一个错误的 RPM 文件:

mv epel/borked-1.2.3.x86_64.rpm Bad

将其移动到临时目录并重新运行后createrepo

createrepo -v --update epel-dir

下一个文件也会出现同样的错误。还有下一个,下一个……

所以,我想可能是存储库中的文件太多了(大约 23k - 这并没有让我印象深刻,但我从未构建过本地存储库)。我将大约一半的文件移动到另一个目录:

mkdir epel2
mv epel-dir/[n-z]* epel2

然后我createrepo在 epel2 上运行,没有任何问题。所以,我想也许 repodata 缓存是坏的?

rm -rf epel-dir/repodata epel2/repodata

并在 epel-dir 和 epel2 上重新运行 createrepo —— epel2 上成功,有约 10k 个文件,但在 epel-dir 目录上的文件 7745 处失败,该目录有大约 12k 个文件。

然后,因为我想确保文件本身不是问题:

createrepo -v --update Bad/

在六个左右的文件上成功且没有任何错误。我不确定问题是什么,也不知道去哪里查找——我不知道 RHEL/rpm,所以任何帮助/建议都会很棒。

更新:

我试图在这里总结Python堆栈跟踪:

error: rpmts_HdrFromFdno: headerRead failed: Header sanity check: OK
Trace....

  file dumpMetaData.py line 97 in returnHdr
   hdr = hdrFromFdno(fdno)
SystemError: error return without exception set

答案1

因此,我将 22k 文件的范围缩小到一个专门用于堆栈转储的文件。

我可能可以更快地发现这一点,只是直到我只有一个单例文件时我才意识到——createrepo 在完成标头检查信息之前不会输出任何处理信息。由于失败了,错误上方列出的 rpm 文件不是失败的文件,而是之前的文件,失败的文件名从未输出。我只是注意到它,直到我(乏味地)将其缩小到单个文件,然后在堆栈跟踪之前没有看到文件信息输出。我会将其标记为错误!以及我的问题中的错误处理。

因此,问题文件是 libmicrohttp-doc-0.4.6-1.el5.x86_64.rpm。

我不确定它来自哪个镜子 - 它很旧,当时其他人正在拉回购;然而,与从以下版本下拉的版本相比,该版本失败了软呢帽有不同的 MD5 值...所以我的版本似乎有问题。我将结果标记为已回答,因为如果不修复 Python,我就无法学到任何其他东西。

感谢@Bratchley(根据我的评论,我将尝试获取堆栈跟踪)。

相关内容