Copyright (C) 2004  Internet Systems Consortium, Inc. ("ISC")
Copyright (C) 2000, 2001  Internet Software Consortium.
See COPYRIGHT in the source root or http://isc.org/copyright.html for terms.

$Id: release,v 1.41.2.4 2004/04/12 23:59:15 marka Exp $

Preparing a bind9 release

Here's a rough outline of the steps to follow in preparing a new bind9
release.

 - Update the README file

 - Send the new README file to webteam@nominum.com at least 48
   hours prior to the planned release and ask them to prepare
   the web pages for the new version.  If there have been only
   minor changes, send context diffs relative to the previous
   release instead.

 - Do a "cvs update" to check that all changes have been committed.

 - Verify that the file "version" contains the correct version
   number (it should have been incremented after the
   previous release)

 - Update the lib/*/api files as needed.  See the libtool 
   info file for information about what the various numbers mean.

 - If building from a release branch, check that any important
   bug fixes made on the mainline since the last release have
   been pulled up.  You can do this by comparing the CHANGES
   files using the util/check-pullups.pl script.  For example,
   running the script from a mainline tree:

     perl util/check-pullups.pl CHANGES ../9.1/CHANGES

   This will list all bug fixes on the mainline that are not
   on the 9.1 release branch.

 - Check that http://status.isc.org/bind9/bind9.html 
   shows a clean build and test status for all supported 
   systems and that the tests are actually being run on the
   version being released (the version can be found in the
   page behind the "Source tar build" link).

 - Check that running "make all_tests" in bin/tests does not
   produce compile errors.

 - Regenerate the documentation by running "make man" (mainline)
   or by running genhtml.sh in doc/arm (9.1 release branch)
   and commit it.  Note that not all machines have the
   necessary XML tools, but at least trebuchet, cuba,
   and Scanner's machine do.

 - Verify that the documents in doc/misc are up-to-date.

 - Update the copyrights.  According to tale:

     Go to the root of the source tree.
     The scripts need to be run from there; they reference the util
     subdirectory internally.

     $ make distclean
     ... [I prefer to check out a fresh source tree --gson]
     $ perl util/merge_copyrights
     $ diff util/copyrights util/newcopyrights
     ... examine output, particularly any files with the "?" type, and
     ... then edit util/newcopyrights if necessary
     $ mv util/newcopyrights util/copyrights
     $ cvs ci -m'merge_copyrights' util/copyrights
     $ perl util/update_copyrights < util/copyrights
     $ cvs diff
     ... examine output, edit as necessary.  mail me about anything that
     ... the script should have been able to do itself. :-)
     $ cvs ci -m'update_copyrights'

 - Announce a CVS freeze if doing an alpha or beta release from 
   the mainline, or stop doing pullups if building from a release branch.

 - Run util/altbuild.sh.  This is to make sure that
   builds using libtool, separate source/object directories, and other 
   obscure build options work.  This script may need some hacking if run
   on anything other than NetBSD.  Save the output (it's big) and look 
   for error and warning messages.

      cd $top_of_mainline_tree
      sh util/altbuild.sh v9_0

   or

      cd $top_of_9_1_tree
      sh util/altbuild.sh v9_1

   Alteratively, you can do this after building the kit, by giving
   the kit .tar.gz file as an argument to altbuild.sh instad of
   the CVS tag.

 - If you can (= your system is similar enough to the one Tale is using),
   check the header files for cruft by running the command
   [ This step is quite imperfect and should probably be skipped
     for now -- Tale ]

      find lib -name '*.h' -print | xargs perl util/check-includes.pl

 - Ensure that the JPNIC patch applies cleanly:

   If you don't have the "iconv" library, you need to get it from
   http://clisp.cons.org/~haible/packages-libiconv.html and install it.

   If you're reading this part of these instructions in order to generate
   a version of the patch for a new release, you'll need to pick a
   version of the patch from some prior release to use as a starting
   point.  In general, the patch corresponding to the most recent
   prior release will be the best starting point.

   $ patch -p0 < contrib/idn/idnkit-1.0-src/patch/bind9/bind-9.x.y-patch \
               > patch.out 2>&1
   $ egrep Hunk patch.out

   All hunks should have applied successfully with no offset or fuzz.
   If all succeeded but some were offset or had fuzz, the patch will be
   regenerated at the end of this stage.

   Note that two of the files which the patch attempts to update
   (configure and config.h.in) are generated automatically.  When
   generating a new patch, the old version of the patch may not apply
   correctly to these files, but that's ok so long as the patch does
   apply correctly to the source files from which these files are
   generated.  The steps below will regenerate these files.

   $ cd contrib/idn/idnkit-1.0-src

   [ Sample on netbsd ... ]
   $ CFLAGS=-I/usr/local/include ./configure  '--with-iconv=-L/usr/local/lib -liconv'

   [ Sample on freebsd -- formerly used giconv, now uses iconv ]
	./configure --with-iconv-include=/usr/local/include \
              '--with-iconv=-L/usr/local/lib -liconv'

   $ make
   $ cd ../../.. ; : cd back to top level
   $ autoheader  ; : regenerate config.h.in
   $ autoconf    ; : regenerate configure
   $ ./configure
   $ make
   ... should cleanly compile
   $ make distclean
   $ rm -rf /tmp/idn
   $ mkdir -p /tmp/idn/lib /tmp/idn/include
   $ idn=`pwd`/contrib/idn/idnkit-1.0-src
   $ cp $idn/lib/.libs/libidnkit.so* /tmp/idn/lib
   $ cp -r $idn/include/idn /tmp/idn/include
   $ ./configure --with-idn=/tmp/idn --with-iconv="-L/usr/local/lib -liconv" 
   $ LD_LIBRARY_PATH=/usr/local/lib:/tmp/idn/lib:/usr/lib make
   ... should cleanly compile

   [ Some tests will be added to bin/tests/system to validate operation. ]

   Generate a fresh copy of the diffs:

   $ patchd=$idn/patch/bind9    
   $ old_patch=bind-9.x.y-patch
   $ new_patch=bind-9.x.z-patch
   $ files=`awk '/^Index:/ && NF == 2 {print $2}' $patchd/$old_patch`
   $ missing=`cvs log -R $files 2>&1 >/dev/null | \
              awk '/^cvs log: nothing known about/ {print $6}'`
   $ sed '/^Index:/,$d' < $patchd/$old_patch > $patchd/$new_patch
   $ for i in $missing; \
       do echo Index: $i; diff -u /dev/null $i; done >> $patchd/$new_patch
   $ cvs -f diff -U 2 -N $files >> $patchd/$new_patch

   [ Add comment at head of new patch file ]
   $ cvs add -ko $patchd/$new_patch
   $ cvs ci $patchd/$new_patch

 - Add a marker line like "	--- 9.0.0rc1 released ---"
   to the CHANGES file.

 - Tag the CVS source tree with the final tag, as in
   "cvs rtag v9_0_0rc1 bind9" (mainline) or
   "cvs rtag -r v9_1 v9_1_1rc7 bind9" (release branch).

 - Build the release kit.  This procedure differs
   between the 9.0 release branch and later versions.
   On the 9.0 release branch,

        cd <temporary directory>
	cvs export -r v9_0_0rc7 bind9
	cd bind9
	sh configure
	make kit

   On the 9.1 release branch or mainline, use the
   "util/kit.sh" script.

 - Build bind9 from the kit on at least one machine
   and test it.  Run it as a caching name server.
   If you can, try resolving some IPv6 addresses and
   doing queries over IPv6.

 - If problems are found at this stage, fix them, move the
   release tag up using "rtag -F", and respin the kit.

 - Sign the distribution files with the ISC signing PGP key
   and fix the permissions on the signature file:
  
   	pgp -sba bind-9.2.0b2.tar.gz -u 0x51BAB2ED
	chmod 644 bind-9.2.0b2.tar.gz.asc

 - Verify the PGP signature:

	pgp bind-9.2.0b2.tar.gz.asc bind-9.2.0b2.tar.gz

   (Look for the words "Good signature" in the output.)

 - Prepare a release announcement based on the previous one.

 - Copy the distribution and PGP signature files to the FTP site:

     ver=9.2.0b2
     ssh -n isrv4.pa.vix.com "mkdir /udir/ftp/isc/bind9/$ver"
     scp bind-$ver.tar.gz bind-$ver.tar.gz.asc \
	isrv4.pa.vix.com:/udir/ftp/isc/bind9/$ver

 - Download using FTP (or Netscape) using the URLs in the release
   announcement and verify the PGP signature again

 - Increment the version in the file "version"

 - Resume doing pullups

 - Announce the release on bind-announce@isc.org

