Hi everyone.

During last weeks Base WG discussion about package set and self hosting of Base we came to a point where especially the self hosting of Base would currently look absurd as we'd require more than 2000 components to do so.

For that reason we'd like to propose the following initiative:

Initiate build requires cleanup for base related packages in Fedora working with maintainers and the community. The goal is to reduce the number of self-hosting packages required for Base from currently over 2000 packages.

To kickstart this off one idea would be to start looking at very small self contained package sets that already exist:

https://fedoraproject.org/wiki/Base/Packages

This is a page thatHarald Hoyer put together and consists of a very limited set of packages that are together dependency complete.

Now, to figure our how the build chains for these packages look like i've cobbled together a (really bad) hack using python and repoclosure that basically takes a set of packages as an input (actually a set of requirements) and then spits out consecutively the groups of packages needed to build the previous ones, so basically a reverse grouped build order:

------------------ snipp here ------------------

import sys
import subprocess

def getBuildRequires(pkgset):
    requires = set()
cmd = ["repoquery", "--enablerepo=fedora-source", "--requires", "--srpm", "--source"]
    cmd.extend(pkgset)
    out = subprocess.check_output(cmd)
    for r in out.split("\n"):
        requires.add(r)
    return requires

def getSRPMs(requires):
    newpkgset = set()
    cmd = ["repoquery", "--whatprovides", "--source"]
    cmd.extend(requires)
    out = subprocess.check_output(cmd)
    for prov in out.split("\n"):
        if prov[-8:] != ".src.rpm":
            continue
        newpkgset.add(prov[:-8])
    return newpkgset

oldpkgset = set()
newpkgset = set(getSRPMs(sys.argv[1:]))

while len(newpkgset - oldpkgset) > 0:
    diff = newpkgset - oldpkgset
    print len(diff), diff
    oldpkgset = set(newpkgset)
    newpkgset = newpkgset | getSRPMs(getBuildRequires(diff))

print len(newpkgset), newpkgset

------------------ snipp here ------------------

The output is awful, but can be easily adapted to what one needs. It needs to be run on a current Fedora system (F20 or rawhide) like so:

python bo2.py <componentname> *[<componentname>]

and it'll spit the different sets of package srpm NEVRAs that need to be built with the last output being the whole set of packages and the second to last one being the first component group that needs to be built. So if you only want the groups, just put a comment before the last line.

I know this could probably be written much nicer using the yum API, but it does the job for me for now and it's relatively fast (couple of minutes for a set of packages).

I'll add some better formated lists to Harald's wiki page so the buildreqs and groups can be studied and tackled by anyone who feels like wanting to help here. :)

And obviously if you as a package maintainer feel like you'd like to cleaning up your package, hopefully this tool will help you determine why the heck your package might have some really oddball buildrequire chain, too. :)

Thanks & regards, Phil

--
Philipp Knirsch              | Tel.:  +49-711-96437-470
Manager Core Services        | Fax.:  +49-711-96437-111
Red Hat GmbH                 | Email: Phil Knirsch <pknir...@redhat.com>
Wankelstrasse 5              | Web:   http://www.redhat.com/
D-70563 Stuttgart, Germany
--
devel mailing list
devel@lists.fedoraproject.org
https://admin.fedoraproject.org/mailman/listinfo/devel
Fedora Code of Conduct: http://fedoraproject.org/code-of-conduct

Reply via email to