condorports ----------- This is a version of portbuild designed to exploit the features of the HTCondor batch scheduler instead of a homegrown scheduler, in particular the abilities of the Condor DAG manager. Features: - Heterogeneous clusters: support builds for multiple architectures using a mixed architecture cluster - No shared file system required: distfiles and packages are transferred via condor file transfer to the build node, requiring only static read-only copies of the base system and the ports tree[s] on build nodes - Flocking support: if you have multiple Condor clusters, jobs submitted on one can transparently "flock" to another, letting the package builds exploit the resources of geographically distributed computing clusters - Many builds for many architectures, OS releases, and ports trees can continue in parallel - Uses standard HPC software for scheduling with high performance, reliability, and security with only a light layer on top (155 lines of shell scripts) Submit node prerequisites: -------------------------- - sysutils/condor, configured to allow job submission - Copies of the relevant ports trees, at the same paths as they are on the build nodes (in /buildshare/ports/XXX) - python - A lot of disk space (> 100 GB) Build node prerequisites: ------------------------- - sysutils/condor, configured using condor_config.local in this directory (adapted for the system in question) - security/sudo, with sudoers file in this directory - A lot of local disk space in /scratch - A copy of all relevant worlds in /buildshare/releases/ - A copy of all relevant ports trees in /buildshare/ports/XXX - NB: /buildshare can be read-only and node-private - The prepbuildjail and reapbuildjail scripts installed in /pkgscripts Using: ------ The basic procedure is: cd condorports ./startbuild.sh 355755 /path/to/output amd64 10.0-RELEASE This will configure and submit a Condor DAG for the ports tree in /buildshare/ports/355755, the amd64 architecture, and the 10.0-RELEASE world, using the common distfiles directory in /scratch/horde (on the submit node). The last argument is optional. If unspecified, it will instead use a build-private directory in /path/to/output. As the build runs, log files and built packages will appear under /path/to/output. The build queue can be inspected using condor_q -wide. TODO: ---- Not all features are fully implemented yet. In particular: - Need to advertise release and ports directory availability in the machine classad (via STARTD_CRON) so that jobs are scheduled only on hosts that have acquired the appropriate resources. This is especially important in the flocking case.