Bug 32900 - no attribute 'headerFromPackage'
: no attribute 'headerFromPackage'
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/distrodb-utils)
: unstable
: all Linux
: P3 normal
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2016-12-16 15:56 by
Modified: 2017-04-01 18:36 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2016-12-16 15:56:53
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'
$
------- Comment #1 From 2016-12-16 16:01:55 -------
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
------- Comment #2 From 2016-12-16 20:25:06 -------
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
------- Comment #3 From 2016-12-17 20:26:11 -------
Спасибо!
Я сейчас не возьмусь чинить, так как закончить хочу java и python,
а потом сяду сразу за все подобные задачи, сязяанные с новым rpm.

Пока по возможности попробуйте запустить на p8, например, на ноутбуке,
который у Миши Шигорина для тестирования образов.
------- Comment #4 From 2017-03-30 17:39:03 -------
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
------- Comment #5 From 2017-03-30 17:44:49 -------
(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 потребовалось бы
дополнительное согласование и напоминание.
------- Comment #6 From 2017-03-30 18:00:02 -------
Спасибо!
------- Comment #7 From 2017-03-30 18:02:34 -------
только этот код в p8 будет работать?
там проверяется версия rpm/python-rpm?
------- Comment #8 From 2017-03-30 18:11:26 -------
(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
------- Comment #9 From 2017-03-30 18:15:24 -------
(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. Посчитал,
что это очень маловероятно.
------- Comment #10 From 2017-03-30 18:18:53 -------
(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 нет.
------- Comment #11 From 2017-03-30 18:22:00 -------
ок. Я позже попробую написать проверку,
чтобы работало на всех python-rpm
------- Comment #12 From 2017-03-30 20:22:09 -------
А теперь ещё такая неприятность может случиться (я так понимаю, если пакет
подписан, но ключа нет):

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
------- Comment #13 From 2017-03-30 20:24:13 -------
А теперь ещё такая неприятность может случиться (я так понимаю, если пакет
подписан, но ключа нет):

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
------- Comment #14 From 2017-04-01 18:36:16 -------
у меня эта проблема вылезла в perl-RPM,
я ее решил так (код содрал с rpm2cpio в rpm4.13)
http://git.altlinux.org/people/viy/packages/?p=perl-RPM.git;a=commitdiff;h=a383fe272ed1694d4bce6fd466159238883be9bb