headerRead失敗メッセージでcreaterepoが失敗します。

headerRead失敗メッセージでcreaterepoが失敗します。

私は処刑する

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

次のファイルでも同じエラーが表示されます。そして次に、次に...

それで、リポジトリにあまりにも多くのファイルがあるかもしれないと思いました(約23,000個 - それほど印象的ではありませんが、ローカルリポジトリを構築したことはありません)。ファイルの半分程度を別のディレクトリに移動しました。

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

その後、createrepo問題なくepel2で実行しました。それでは、レポデータキャッシュが良くないのではないでしょうか?

rm -rf epel-dir/repodata epel2/repodata

そして、epel-dirとepel2でcreaterepoを再実行しました。約10,000個のファイルを持つepel2では成功しましたが、約12,000個のファイルを持つepel-dirディレクトリのファイル7745では失敗しました。

その後、ファイル自体に問題がないことを確認したいからです。

createrepo -v --update Bad/

エラーなしで6つのファイルに成功しました。何が問題なのかよく分からないし、どこを見るべきか分からない。 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

そのため、22,000個のファイルを特にスタックダンプ用のファイルに絞り込みました。

おそらくこれをより速く見つけることができましたが、シングルトンファイルがあるまではわかりませんでした。 createrepoは、ヘッダー確認情報が完了するまで処理情報を出力しません。失敗したため、エラー上記のrpmファイルは失敗したファイルではなく古いファイルであり、失敗したファイル名は決して出力されません。私は(退屈に)単一のファイルに範囲を絞り込み、スタックトレースの前にファイル情報の出力を見るまでそれを気づきました。これはバグで表示します!私の質問に対するエラー処理。

したがって、問題ファイルはlibmicrohttp-doc-0.4.6-1.el5.x86_64.rpmです。

どのミラーから来たのか分からない。古く、当時他の人がリポジトリをインポートしていましたが、このバージョンはインポートされたバージョンと比較して失敗しました。Fedoraの帽子MD5の値がさまざまなので、私のバージョンに何か問題があるようです。 Pythonを修正しないと他のことを学ぶことができないので、結果を答えとして表示します。

@Bratchleyに感謝します(私の意見に基づいてスタックトレースを取得しようとしています)。

関連情報