rpm dependencies and duplicate provides

Florian La Roche laroche at redhat.com
Sat Apr 2 15:31:05 UTC 2005


We have looked at the dependency data within rpm packages. All packages
normally provide a list of included shared libraries and also automatically
generated perl deps.

The list of packages providing the same "provides" dependency data
is pretty long. The shortened list that only includes duplicate entries
and also might match any requirement lines in FC-devel is the following:


('perl(Automake::XFile)', 32776L, '1.1') ['automake16-1.6.3-5.noarch.rpm', 'automake17-1.7.9-6.noarch.rpm']
('webclient', 0L, '') ['elinks-0.10.3-1.i386.rpm', 'firefox-1.0.2-3.i386.rpm', 'lynx-2.8.5-23.i386.rpm', 'mozilla-1.7.6-2.i386.rpm', 'w3m-0.5.1-8.i386.rpm', 'wget-1.9.1-22.i386.rpm']
('/usr/sbin/sendmail', 0L, '') ['postfix-2.2.1-1.i386.rpm', 'sendmail-8.13.3-2.i386.rpm']
('smtpdaemon', 0L, '') ['postfix-2.2.1-1.i386.rpm', 'sendmail-8.13.3-2.i386.rpm']
('perl(Pod::Select)', 32776L, '1.13') ['mrtg-2.11.1-3.i386.rpm', 'perl-5.8.6-5.i386.rpm']
('perl(Automake::General)', 32768L, '') ['automake-1.9.5-1.noarch.rpm', 'automake16-1.6.3-5.noarch.rpm', 'automake17-1.7.9-6.noarch.rpm']
('perl(Automake::Struct)', 32776L, '0.58') ['automake-1.9.5-1.noarch.rpm', 'automake15-1.5-13.noarch.rpm', 'automake16-1.6.3-5.noarch.rpm', 'automake17-1.7.9-6.noarch.rpm']
('libxmlsec1.so.1', 32768L, '') ['openoffice.org-core-1.9.88-4.i386.rpm', 'xmlsec1-1.2.7-4.i386.rpm']
('perl(Automake::Channels)', 32768L, '') ['automake-1.9.5-1.noarch.rpm', 'automake17-1.7.9-6.noarch.rpm']
('perl(Inline)', 32768L, '') ['perl-Inline-0.44-14.i386.rpm', 'perl-PDL-2.4.1-9.i386.rpm']
('libmd5.so.0', 32768L, '') ['libsilc-0.9.12-9.i386.rpm', 'w3c-libwww-5.4.0-13.i386.rpm']
('libbind.so.3', 32768L, '') ['bind-libbind-devel-9.3.1-1_FC4.i386.rpm', 'bind-libs-9.3.1-1_FC4.i386.rpm']


So it is currently no real problem for FC-devel packages since
we normally make sure to link against system libs and the duplicate
perl items are also ok. This might look differently if we look at
require dependencies e.g. from Fedora Core Extras and then check
which deps might have duplicate provides within rpm packages
to find maybe real problems with our current deps.

greetings,

Florian La Roche




dupes = [ ("glibc", "i386"),
          ("nptl-devel", "i386"),
          ("openssl", "i386"),
          ("kernel", "i586"),
          ("kernel-smp", "i686"),
          ("kernel-smp-devel", "i686"),
          ("kernel-xen0", "i686"),
          ("kernel-xenU", "i686"),
          ("kernel-devel", "i586") ]
def checkProvides(repo):
    provides = {}
    requires = {}
    for rpm in repo:
        req = rpm.getRequires()
        if not req:
            continue
        for r in req:
            if not requires.has_key(r[0]):
                requires[r[0]] = []
            requires[r[0]].append(rpm.getFilename())
    for rpm in repo:
        if (rpm["name"], rpm["arch"]) in dupes:
            continue
        provs = rpm.getProvides()
        if not provs:
            continue
        for p in provs:
            if not provides.has_key(p):
                provides[p] = []
            provides[p].append(rpm.getFilename())
    print "Duplicate provides:"
    for p in provides.keys():
        if len(provides[p]) > 1:
            # also check if the rpm is different between provides/requires
            if not requires.has_key(p[0]):
                continue
            print p, provides[p]




More information about the devel mailing list