Copyright (C) Internet Systems Consortium, Inc. ("ISC")

See COPYRIGHT in the source root or http://isc.org/copyright.html for terms.

We do hourly test builds of the bind9 tree.  This is an attempt to
document how they work.

* How things work

The scripts driving the build system are in ~wpk/b9t.  They are now
under CVS control; the repository is in rc:/proj/cvs/isc/b9t (note
that this is a separate repository from the bind9 one).  The builds
are driven by cron jobs separately installed on each build system,
running as user wpk.

The sources are checked out, and the web reports are generated,
on bb, as driven by the following cron jobs:

    # Check out the current bind 9 version and make the source tarball.
    # Argument to maketar.sh should be v9_0 for 9.0 release branch,
    # HEAD for mainline.
    35 2-22 * * * PLATFORM=BSD-3.1 && . $HOME/b9t/hosts/$PLATFORM/env && \
	nice sh $HOME/b9t/bin/maketar.sh HEAD \
	>/proj/build-reports/bind9/tarsrc.txt 2>&1

    #
    # run the bind 9 build status report generator
    #
    30 3-22 * * * perl $HOME/b9t/bin/b9status.pl \
         > /proj/build-reports/bind9/bind9.html 2> /dev/null


Each host has a separate crontab entry for building the server and
running tests.  Here are examples from bb and sol:

    #
    # build the BSD-3.1 version of bind 9
    #
    0 3-22 * * * $HOME/b9t/bin/b9t.cron BSD-3.1

    #
    # bind 9 build for Solaris 5.6
    #
    0 3-22 * * * $HOME/b9t/bin/b9t.cron SunOS-5.6

Do not confuse the shell script ~wpk/b9t/bin/b9t.cron with the crontab
template (?) ~wpk/b9t/b9t.cron.  Although they have the same name,
they are not related.

The shell script b9t.cron then calls make, using the makefile b9t.mk
in the same location.  This makefile moves the old status files out of
the way and runs through the tests.

The current test schedule is as follows:

  :35             CVS tree extracted, tarball built and distributed
  :00             Most tests begin
  :45             Status report generator runs (was :30)

  bb:             Build starts at top of hour, 0300 to 2200
  durango:        Build starts at top of hour, 0300 to 2200
  trantor:        Build starts at top of hour, 0300 to 2100, odd-numbered hours
		  only
  hp:             Build starts at top of hour, 0300 to 2200
  irix:           Build starts at top of hour, 0300 to 2200
  netbsd:         Build starts at top of hour, 0300 to 2200 (was :45)
  aa:             Build starts at top of hour, 0300 to 2200
  rc:             Build starts at top of hour, 0300 to 2200
  mirepoix:       Build starts at top of hour, 0300 to 2200
  sol:            Build starts at top of hour, 0300 to 2200
  truffle:        Build starts at top of hour, 0300 to 2200
  anthrax:        Build starts at top of hour, 0300 to 2200

The actual builds take place in a directory whose location differs
among systems.  On most of them, it's on a local disk, under /build.
On some, it's on NFS; in this case the location is defined in
~wpk/b9t/hosts/$PLATFORM/env.

The output from the make process is in
~wpk/b9t/hosts/$PLATFORM/b9t-status, and the output from
The output from the later stages of the process is under
/proj/build-reports/bind9/hosts/$PLATFORM.  To make the files
harder to find (?), they have names starting with a period:

  .populate
  .config
  .build
  .test


* Common problems

Sometime named processes fail to die when the tests are done,
interfering with the next test.  Just kill them.

On hp.rc.vix.com, the tests often fail because of NFS I/O errors.
When this happens, the machine needs to be rebooted.  It will not
come up again without manually entering commands on the console.

On bb, the tests sometimes fail because .nfs* files stuck in the build
tree keep it from being completely deleted when the next test runs.
The .nfs* files cannot be deleted, but they can be moved, so one way
of fixing this is to move them to ~wpk.

On aix, the tests routinely fail with an assertion failure related
to omapi socket handling - see RT #507.


* Failure locking

When a test fails, further testing on that host is disabled in order
to preserve evidence. Also, tests don't start if they are already
running.  Both of these rules are enforce through "lockout files"
craeted in /proj/build-reports/bind9/hosts/*/.

To remove the lockout and allow more tests to be run, log in to bb,
su, su wpk, and remove any "failed" and "running" files:

   rm /proj/build-reports/bind9/hosts/*/failed
   rm /proj/build-reports/bind9/hosts/*/running

The "failed" file contains the time of failure, which is not
particularly useful.  The more useful information is in the various
log files under the build report.
