나는 처형한다
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입니다.
어떤 미러에서 왔는지 잘 모르겠습니다. 오래되었고 당시 다른 사람이 저장소를 가져오고 있었지만 이 버전은 가져온 버전에 비해 실패했습니다.페도라 모자MD5 값이 다양해서...제 버전에 뭔가 문제가 있는 것 같습니다. Python을 고치지 않고는 다른 것을 배울 수 없기 때문에 결과를 답변으로 표시합니다.
@Bratchley에게 감사드립니다(내 의견을 바탕으로 스택 추적을 얻으려고 노력하겠습니다).