Goal

Miron is interested in what it would take to make reproducible builds of HTCondor in the build and test environment. These builds should be "on-demand"--perhaps eventually via a web interface--and ideally should not rely on the HTCondor Flightworthy infrastructure. That is, we should be able to stash what is necessary for a build, and therefore be able to do the builds independently.

Summary of steps we know we need to take

These are the steps we need in the short to medium term--clearly there are more things we could do long-term.

  1. Provide a repository that associates the source code and externals with a given version.

  2. Update the HTCondor build script so that it (optionally) does not fetch externals from where they are now--either they are provided to the build, or it might fetch them from the repository. (This step is technically optional, but allows for the builds to happen without relying on an external service.)

  3. Provide a command-line interface to request a build. Input includes:

    • HTCondor version
    • Platform (OS & architecture, such as x86_rhap_5)
    • Desired packaging (tarball, RPM, Deb, Windows installer. Not all of them are available on all platforms.)

  4. Provide a web interface.

Details follow.

Current Situation

Today, builds get input files from a variety of locations. For the HTCondor builds these include the git source code repository for the HTCondor source code and the HTCondor web site for the external packages HTCondor depends on. Reproducing any given build requires that both git and the web site be available and complete. If an old external was deleted from the web site because HTCondor perceived it as no longer necessary, builds needing that external would not work.

The HTCondor source and documentation are pulled together on an NMI submit node. The externals are pulled on each individual build machine on an as needed basis, completely outside of NMI management. If the externals cache is being used, the input file will never be loaded.

Because each machine pulls together externals on its own, it's hard to say how much disk space a given build requires. The HTCondor source is about 20MB while the documentation is about 1MB. The externals, excluding glibc, are about 107MB; a given build may not use all of the externals, but different builds typically share externals. glibc is complex, only platforms supporting the standard universe include it, and different platforms may use different glibc. A given glibc source is about 163MB, and we might use 2 or 3 across all of our builds. This gives a total size of about 20+1+107+(163*3)= 617MB. These are all compressed tarballs, further compression is unlikely to provide significant savings. Assuming we archive two builds per night (one stable, one developer), we're looking at about 440GB per year of storage. Assuming a single backup, we're close to needing 1TB per year. These numbers ignore developer builds.

Open Questions

Complications

Plans