| Summary: | no attribute 'headerFromPackage' | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Ivan Zakharyaschev <imz> |
| Component: | distrodb-utils | Assignee: | viy <viy> |
| Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P3 | CC: | glebfm, viy |
| Version: | unstable | ||
| Hardware: | all | ||
| OS: | Linux | ||
| Bug Depends on: | |||
| Bug Blocks: | 38602 | ||
commit 5211039a20762b4a50c006ccf79666bff34967c2
Author: jbj <devnull@localhost>
Date: Mon Aug 5 21:46:50 2002 +0000
- python: the death of rpmdb-py.[ch], use ts.fooDB() methods instead.
- python: the death of rpm.headerFromPackage(), use ts.hdrFromFdno().
- python: permit direct ts.dbMatch() python iterations.
- python: the death of rpm.checksig(), use ts.hdrFromFdno() instead.
CVS patchset: 5603
CVS date: 2002/08/05 21:46:50
See also http://git.altlinux.org/gears/a/apt-printchanges.git?p=apt-printchanges.git;a=commitdiff;h=1701076e4baaf5e1ca140996b53ab90891827be0 : From 1701076e4baaf5e1ca140996b53ab90891827be0 Mon Sep 17 00:00:00 2001 From: Gleb Fotengauer-Malinovskiy <glebfm@altlinux.org> Date: Wed, 14 Dec 2016 20:24:04 +0300 Subject: [PATCH] apt-printchanges: fix for new python-module-rpm The older method rpm.headerFromPackage() has been replaced by ts.hdrFromFdno(). --- apt-printchanges | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/apt-printchanges b/apt-printchanges index 6cc661e..e75861d 100755 --- a/apt-printchanges +++ b/apt-printchanges @@ -30,7 +30,8 @@ def getHeaders(filename): """ try: with open(filename) as f: - (headers, _) = rpm.headerFromPackage(f.fileno()) + ts = rpm.TransactionSet() + headers = ts.hdrFromFdno(f.fileno()) Name = headers[rpm.RPMTAG_NAME] Author = headers[rpm.RPMTAG_CHANGELOGNAME][0] ChangelogEntry = headers[rpm.RPMTAG_CHANGELOGTEXT][0] -- 1.7.3.3 Спасибо! Я сейчас не возьмусь чинить, так как закончить хочу java и python, а потом сяду сразу за все подобные задачи, сязяанные с новым rpm. Пока по возможности попробуйте запустить на p8, например, на ноутбуке, который у Миши Шигорина для тестирования образов. distrodb-utils-0.11-alt1 -> sisyphus: * Thu Mar 30 2017 Ivan Zakharyaschev <imz@altlinux> 0.11-alt1 - Adapted to the new RPM (>= 4.13) Python API (ALT#32900), introduced in commit 5211039a20762b4a50c006ccf79666bff34967c2 Author: jbj Date: Mon Aug 5 21:46:50 2002 +0000 (In reply to comment #4) > distrodb-utils-0.11-alt1 -> sisyphus: > > * Thu Mar 30 2017 Ivan Zakharyaschev <imz@altlinux> 0.11-alt1 > - Adapted to the new RPM (>= 4.13) Python API (ALT#32900), > introduced in commit 5211039a20762b4a50c006ccf79666bff34967c2 > Author: jbj Date: Mon Aug 5 21:46:50 2002 +0000 Отправил свой коммит поверх Вашего Git upstream в /gears/ -- чтобы коммит не потерялся. (А не из вредности.) Кажется, нет смысла в такой ситуации делать NMU в виде srpm, когда есть Git upstream repo у мейнтейнера пакета, а сборка делается через srpm. Из /gears/ Вы сможете взять настоящий мой коммит (и не забыть) и при желании продолжить дальше собирать srpm-ы. А при сборке NMU через srpm потребовалось бы дополнительное согласование и напоминание. Спасибо! только этот код в p8 будет работать? там проверяется версия rpm/python-rpm? (In reply to comment #7) > только этот код в p8 будет работать? > там проверяется версия rpm/python-rpm? В p8 не будет. Но он формально не пройдёт в p8, потому что я поставил в spec-е: # The new API appears to be incompatible with the old one Requires: python-module-rpm >= 4.13 (In reply to comment #8) > (In reply to comment #7) > > только этот код в p8 будет работать? > > там проверяется версия rpm/python-rpm? > > В p8 не будет. Но он формально не пройдёт в p8, потому что я поставил в spec-е: > > # The new API appears to be incompatible with the old one > Requires: python-module-rpm >= 4.13 Есть, конечно, вероятность, что этот новый интерфейс был раньше (ещё до удаления старого какое-то время), но я не проверял, есть ли он в p8. Посчитал, что это очень маловероятно. (In reply to comment #9) > (In reply to comment #8) > > (In reply to comment #7) > > > только этот код в p8 будет работать? > > > там проверяется версия rpm/python-rpm? > > > > В p8 не будет. Но он формально не пройдёт в p8, потому что я поставил в spec-е: > > > > # The new API appears to be incompatible with the old one > > Requires: python-module-rpm >= 4.13 > > Есть, конечно, вероятность, что этот новый интерфейс был раньше (ещё до > удаления старого какое-то время), но я не проверял, есть ли он в p8. Посчитал, > что это очень маловероятно. Проверил в исходниках нашего rpm 4.0.4 -- нового ещё API нет. ок. Я позже попробую написать проверку, чтобы работало на всех python-rpm А теперь ещё такая неприятность может случиться (я так понимаю, если пакет подписан, но ключа нет):
processing rpms ...
processing rpm repo_nct/ipvsadm-1.27-7.el7.x86_64.rpm...
warning: /........../ipvsadm-1.27-7.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 192a7d7d: NOKEY
Traceback (most recent call last):
File "/usr/bin/pkglist2distrodb.py", line 402, in <module>
process_args(distrodb,srpm_filter,sys.argv[1:])
File "/usr/bin/pkglist2distrodb.py", line 316, in process_args
process_raw_rpms(rawrpm,srpm_filter)
File "/usr/bin/pkglist2distrodb.py", line 142, in process_raw_rpms
(header, isSource)=readRpmHeader(rpmfile)
File "/usr/bin/pkglist2distrodb.py", line 135, in readRpmHeader
header = ts.hdrFromFdno(fd)
File "/usr/lib64/python2.7/site-packages/rpm/transaction.py", line 171, in hdrFromFdno
raise rpm.error("public key not available")
_rpm.error: public key not available
А теперь ещё такая неприятность может случиться (я так понимаю, если пакет
подписан, но ключа нет):
processing rpms ...
processing rpm ........./ipvsadm-1.27-7.el7.x86_64.rpm...
warning: /........../ipvsadm-1.27-7.el7.x86_64.rpm: Header V4 DSA/SHA1
Signature, key ID 192a7d7d: NOKEY
Traceback (most recent call last):
File "/usr/bin/pkglist2distrodb.py", line 402, in <module>
process_args(distrodb,srpm_filter,sys.argv[1:])
File "/usr/bin/pkglist2distrodb.py", line 316, in process_args
process_raw_rpms(rawrpm,srpm_filter)
File "/usr/bin/pkglist2distrodb.py", line 142, in process_raw_rpms
(header, isSource)=readRpmHeader(rpmfile)
File "/usr/bin/pkglist2distrodb.py", line 135, in readRpmHeader
header = ts.hdrFromFdno(fd)
File "/usr/lib64/python2.7/site-packages/rpm/transaction.py", line 171, in
hdrFromFdno
raise rpm.error("public key not available")
_rpm.error: public key not available
у меня эта проблема вылезла в perl-RPM, я ее решил так (код содрал с rpm2cpio в rpm4.13) http://git.altlinux.org/people/viy/packages/?p=perl-RPM.git;a=commitdiff;h=a383fe272ed1694d4bce6fd466159238883be9bb |
distrodb-utils-0.10-alt1.noarch python-module-rpm-4.13.0-alt4.x86_64 rpm-4.13.0-alt4.x86_64 $ distrodb-helper-mkdistrodb processing rpms in dir ./repo_nct/custom/packages... processing rpms in dir ./repo_nct/epel/packages... processing rpms in dir ./repo_nct/fsapi/packages... processing rpms in dir ./repo_nct/others/packages... processing rpms ... processing rpm ./repo_nct/custom/packages/perl-URI-Escape-XS-0.13-1.el7.x86_64.rpm... Traceback (most recent call last): File "/usr/bin/pkglist2distrodb.py", line 401, in <module> process_args(distrodb,srpm_filter,sys.argv[1:]) File "/usr/bin/pkglist2distrodb.py", line 315, in process_args process_raw_rpms(rawrpm,srpm_filter) File "/usr/bin/pkglist2distrodb.py", line 141, in process_raw_rpms (header, isSource)=readRpmHeader(rpmfile) File "/usr/bin/pkglist2distrodb.py", line 134, in readRpmHeader (header, isSource) = rpm.headerFromPackage(fd) AttributeError: 'module' object has no attribute 'headerFromPackage' $