• Home
  • Tags
  • RSS
  • About
  • port bootstrap build-ordering tool report 1

    Timestamp:
    Tags: debian

    A copy of this post is sent to soc-coordination@lists.alioth.debian.org as well as to debian-bootstrap@lists.mister-muffin.de.

    Diary

    May 21

    May 22

    May 23

    May 24

    May 25

    May 29

    May 30

    May 31

    June 1

    June 2

    Results

    I learned a good chunk of ocaml and how to use dose3 and libcudf.

    I created a gitorious project and a git repository for all the sourcecode.

    git clone git://gitorious.org/debian-bootstrap/botch.git
    

    The git as of now contains 30 commits and 1197 lines of ocaml code.

    So far, 62 emails have been exchanged between me and Pietro and Wookey.

    I created a mailinglist for this project where all email exchange so far is publicly accessible in the archives. You can also download all of the email exchange in mbox format. Everybody is welcome to join and/or read the list.

    What seems to be finished: the program that finds the minimal amount of source packages that have to be cross compiled to end up with a minimal build system. What it does is:

    1. get all essential packages
    2. get their runtime dependencies
    3. get build-essential plus runtime dependencies
    4. get all source packages that are necessary to build 1.-3. those are the packages that have to be cross compiled
    5. get a list of all packages that are built by source packages from 4.
    6. add all packages from 1.,2.,3. and 5. plus all arch:all packages to a universe
    7. use Depsolver.trim on that universe to figure out which of those packages are actually installable

    The result of 7. will then contain a list of packages that are available automatically on the foreign system due to cross compiled source packages and arch:all packages.

    For Debian Sid, the output of my program is:

    # (1) number of packages with priority:required: 62
    # (2) plus, number of dependencies of priority:required packages: 20
    # (3) plus, build-essential and dependencies: 31
    # number of source packages to build the above: 71
    # number of additional packages built from the above source packages: 292
    # (4) number of packages of those plus arch:all packages that are installable: 6421
    # total number of installable packages (1)+(2)+(3)+(4): 6534
    

    For Ubuntu Natty it is:

    # (1) number of packages with priority:required: 96
    # (2) plus, number of dependencies of priority:required packages: 7
    # (3) plus, build-essential and dependencies: 31
    # number of source packages to build the above: 87
    # number of additional packages built from the above source packages: 217
    # (4) number of packages of those plus arch:all packages that are installable: 2102
    # total number of installable packages (1)+(2)+(3)+(4): 2236
    

    So for Debian, 71 source packages definitely have to be made cross compilable while for Natty, the number is 87.

    The last two days I was toying around with these minimal systems to see how big the number of source packages is, that can be built on top of them without running into dependency cycles. After installing the binary packages that were built, I checked again until no new packages could be built.

    For Natty, I was only able to find 28 additional packages that can be built on top of the 2236 existing ones. This means that a number of dependency cycles prevent building anything else.

    In the coming two weeks I will focus on coming up with a tool that cleverly helps the user to identify packages that would be useful to have for building more packages (probably determined by how many packages depend on it - debhelper is an obvious candidate). The tool would then show why that crucial package is not available (in case of debhelper because some of its runtime dependencies are not available and require debhelper to be built) and how the situation can best be resolved. The possible methods to do so are to identify a package that is part of a cycle and either cross compile it or let it have staged build dependencies.