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' $
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