Bug 32900 - no attribute 'headerFromPackage'
Summary: no attribute 'headerFromPackage'
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: distrodb-utils (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: viy
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks: 38602
  Show dependency tree
 
Reported: 2016-12-16 15:56 MSK by Ivan Zakharyaschev
Modified: 2020-06-20 01:14 MSK (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ivan Zakharyaschev 2016-12-16 15:56:53 MSK
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 Ivan Zakharyaschev 2016-12-16 16:01:55 MSK
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 Ivan Zakharyaschev 2016-12-16 20:25:06 MSK
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 viy 2016-12-17 20:26:11 MSK
Спасибо!
Я сейчас не возьмусь чинить, так как закончить хочу java и python,
а потом сяду сразу за все подобные задачи, сязяанные с новым rpm.

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

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

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