release revision 1d94248a12c2fcce1428c8ffd9ec4864db8a10fd
4812N/ACopyright (C) 2004-2007, 2009, 2014 Internet Systems Consortium, Inc. ("ISC")
4812N/ACopyright (C) 2000-2003 Internet Software Consortium.
4812N/ASee COPYRIGHT in the source root or http://isc.org/copyright.html for terms.
4812N/A
4812N/A$Id: release,v 1.74 2009/08/06 23:47:44 tbox Exp $
4812N/A
4812N/APreparing a bind9 release
4812N/A
4812N/AHere's a rough outline of the steps to follow in preparing a new bind9
4812N/Arelease.
4812N/A
4812N/A - Update the README file
4812N/A
4812N/A - Send the new README file to webteam@nominum.com at least 48
4812N/A hours prior to the planned release and ask them to prepare
4812N/A the web pages for the new version. If there have been only
4812N/A minor changes, send context diffs relative to the previous
4812N/A release instead.
4812N/A
4812N/A - Do a "cvs update" to check that all changes have been committed.
4812N/A
4812N/A - Verify that the file "version" contains the correct version
4812N/A number (it should have been incremented after the
4812N/A previous release)
4812N/A
4812N/A - If building from a release branch, check that any important
4812N/A bug fixes made on the mainline since the last release have
4812N/A been pulled up. You can do this by comparing the CHANGES
4812N/A files using the util/check-pullups.pl script. For example,
4812N/A running the script from a mainline tree:
4812N/A
4812N/A perl util/check-pullups.pl CHANGES ../9.2/CHANGES ../9.2/EXCLUDED
4812N/A
4812N/A This will list all bug fixes on the mainline that are not
4812N/A on the 9.2 release branch.
4812N/A
4812N/A - Before creating a new release branch, update the lib/*/api files
4812N/A as needed. See the libtool info file for information about what
4812N/A the various numbers mean.
4812N/A
4812N/A cvs rdiff -r <last_release> -r <branch/HEAD> bind9/lib > diff
4812N/A
4812N/A e.g.
4812N/A
4812N/A cvs rdiff -r v9_4_0rc2 -r v9_4 bind9/lib > diff
4812N/A
4812N/A - Check that https://internal.isc.org/bind-build/
4812N/A shows a clean build and test status for all supported
4812N/A systems and that the tests are actually being run on the
4812N/A version being released (the version can be found in the
4812N/A page behind the "Source tar build" link).
4812N/A
4812N/A - Check that running "make all_tests" in bin/tests does not
4812N/A produce compile errors.
4812N/A
4812N/A - Regenerate the documentation by running "make man" (mainline/9.2)
4812N/A or by running genhtml.sh in doc/arm (9.1 release branch)
4812N/A and commit it. Note that not all machines have the
4812N/A necessary XML tools, but at least trebuchet, cuba,
4812N/A and Scanner's machine do. Commit any files that were
4812N/A regenerated.
4812N/A
4812N/A Most of this has now been automated, only doc/arm/ARM.pdf will
4812N/A not be committed:
4812N/A ssh tbox@docs.lab.isc.org
4812N/A run this command from crontab.
4812N/A1 1 * * * /usr/bin/lockf -s -t 0 /udir/tbox/bind9-documents/regenerate.lock /udir/tbox/bind9-documents/regenerate
4812N/A
4812N/A Check to see if the ARM has changed since the last release
4812N/A and if it has commit doc/arm/ARM.pdf.
4812N/A e.g.
4812N/A cvs rdiff -r v9_6_1 -r v9_6 bind9/doc/arm
4812N/A cd bind9-documents/bind9.v9_6
4812N/A cvs commit doc/arm/ARM.pdf
4812N/A
4812N/A - Verify that the documents in doc/misc are up-to-date.
4812N/A
4812N/A - Update the copyrights.
4812N/A
4812N/A ssh tbox@cvs.isc.org
4812N/A run these two command from the crontab
4812N/A#
4812N/A# Merge and Update copyrights
4812N/A#
4812N/A30 23 * * * /usr/bin/lockf -s -t 3600 /udir/tbox/tarballs/build-tarballs.lock /bin/sh /udir/tbox/tarballs/mergecopyrights
4812N/A45 23 * * * /usr/bin/lockf -s -t 3600 /udir/tbox/updatecopyrights/updatecopyrights.lock /bin/sh /udir/tbox/updatecopyrights/updatecopyrights
4812N/A
4812N/A When tbox@cvs.isc.org is not available:
4812N/A
4812N/A Go to the root of the source tree.
4812N/A The scripts need to be run from there; they reference the util
4812N/A subdirectory internally.
4812N/A
4812N/A $ make distclean
4812N/A ... [I prefer to check out a fresh source tree --gson]
4812N/A $ perl util/merge_copyrights
4812N/A $ diff util/copyrights util/newcopyrights
4812N/A ... examine output, particularly any files with the "?" type, and
4812N/A ... then edit util/newcopyrights if necessary
4812N/A $ mv util/newcopyrights util/copyrights
4812N/A $ cvs ci -m'merge_copyrights' util/copyrights
4812N/A $ perl util/update_copyrights < util/copyrights
4812N/A $ cvs diff
4812N/A ... examine output, edit as necessary. mail me about anything that
4812N/A ... the script should have been able to do itself. :-)
4812N/A $ cvs ci -m'update_copyrights'
4812N/A
4812N/A - Announce a CVS freeze if doing an alpha or beta release from
4812N/A the mainline, or stop doing pullups if building from a release branch.
4812N/A
4812N/A - Run util/altbuild.sh. This is to make sure that
4812N/A builds using libtool, separate source/object directories, and other
4812N/A obscure build options work. This script may need some hacking if run
4812N/A on anything other than NetBSD. Save the output (it's big) and look
4812N/A for error and warning messages.
4812N/A
4812N/A cd $top_of_mainline_tree
4812N/A sh util/altbuild.sh v9_0
4812N/A
4812N/A or
4812N/A
4812N/A cd $top_of_9_1_tree
4812N/A sh util/altbuild.sh v9_1
4812N/A
4812N/A Alteratively, you can do this after building the kit, by giving
4812N/A the kit .tar.gz file as an argument to altbuild.sh instad of
4812N/A the CVS tag.
4812N/A
4812N/A - If you can (= your system is similar enough to the one Tale is using),
4812N/A check the header files for cruft by running the command
4812N/A [ This step is quite imperfect and should probably be skipped
4812N/A for now -- Tale ]
4812N/A
4812N/A find lib -name '*.h' -print | xargs perl util/check-includes.pl
4812N/A
4812N/A - Ensure that the JPNIC patch applies cleanly (9.2 and 9.3):
4812N/A
4812N/A If you don't have the "iconv" library, you need to get it from
4812N/A http://clisp.cons.org/~haible/packages-libiconv.html and install it.
4812N/A
4812N/A If you're reading this part of these instructions in order to generate
4812N/A a version of the patch for a new release, you'll need to pick a
4812N/A version of the patch from some prior release to use as a starting
4812N/A point. In general, the patch corresponding to the most recent
4812N/A prior release will be the best starting point.
4812N/A
4812N/A $ patch -p0 < contrib/idn/idnkit-1.0-src/patch/bind9/bind-9.x.y-patch \
4812N/A > patch.out 2>&1
4812N/A $ egrep Hunk patch.out
4812N/A
4812N/A All hunks should have applied successfully with no offset or fuzz.
4812N/A If all succeeded but some were offset or had fuzz, the patch will be
4812N/A regenerated at the end of this stage.
4812N/A
4812N/A Note that two of the files which the patch attempts to update
4812N/A (configure and config.h.in) are generated automatically. When
4812N/A generating a new patch, the old version of the patch may not apply
4812N/A correctly to these files, but that's ok so long as the patch does
4812N/A apply correctly to the source files from which these files are
4812N/A generated. The steps below will regenerate these files.
4812N/A
4812N/A $ cd contrib/idn/idnkit-1.0-src
4812N/A
4812N/A [ Sample on netbsd ... ]
4812N/A $ CFLAGS=-I/usr/local/include ./configure '--with-iconv=-L/usr/local/lib -liconv'
4812N/A
4812N/A [ Sample on freebsd -- formerly used giconv, now uses iconv ]
4812N/A ./configure --with-iconv-include=/usr/local/include \
4812N/A '--with-iconv=-L/usr/local/lib -liconv'
4812N/A
4812N/A $ make
4812N/A $ cd ../../.. ; : cd back to top level
4812N/A $ autoheader ; : regenerate config.h.in
4812N/A $ autoconf ; : regenerate configure
4812N/A $ ./configure
4812N/A $ make
4812N/A ... should cleanly compile
4812N/A $ (cd bin/dig ; rm host.1 dig.1 ; make host.1 dig.1 ; cvs update host.1 dig.1 )
4812N/A $ make distclean
4812N/A $ rm -rf /tmp/idn
4812N/A $ mkdir -p /tmp/idn/lib /tmp/idn/include
4812N/A $ idn=contrib/idn/idnkit-1.0-src
4812N/A $ cp $idn/lib/.libs/libidnkit.so* /tmp/idn/lib
4812N/A $ cp -r $idn/include/mdn $idn/include/idn /tmp/idn/include
4812N/A $ ./configure --with-idn=/tmp/idn --with-iconv="-L/usr/local/lib -liconv"
4812N/A $ LD_LIBRARY_PATH=/usr/local/lib:/tmp/idn/lib:/usr/lib make
4812N/A ... should cleanly compile
4812N/A
4812N/A [ Some tests will be added to bin/tests/system to validate operation. ]
4812N/A
4812N/A Generate a fresh copy of the diffs:
4812N/A
4812N/A $ patchd=$idn/patch/bind9
4812N/A $ old_patch=bind-9.x.y-patch
4812N/A $ new_patch=bind-9.x.z-patch
4812N/A $ files=`awk '/^Index:/ && NF == 2 {print $2}' $patchd/$old_patch`
4812N/A $ missing=`cvs status $files | awk '/Status: Unknown/ { print $2; }'`
4812N/A $ sed '/^Index:/,$d' $patchd/$old_patch > $patchd/$new_patch
4812N/A $ for i in $missing; \
4812N/A do echo Index: $i; diff -u /dev/null $i; done >> $patchd/$new_patch
4812N/A $ cvs -f diff -U 2 -N $files >> $patchd/$new_patch
4812N/A
4812N/A $ cvs add -ko $patchd/$new_patch
4812N/A $ cvs ci $patchd/$new_patch
4812N/A
4812N/A $ cvs update -C
4812N/A $ rm README.idnkit
4812N/A $ make distclean
4812N/A
4812N/A - Add a marker line like " --- 9.0.0rc10 released ---"
4812N/A to the CHANGES file.
4812N/A
4812N/A - Tag the CVS source tree with the final tag, as in
4812N/A "cvs rtag v9_0_0rc1 bind9" (mainline) or
4812N/A "cvs rtag -r v9_2 v9_2_0rc10 bind9" (release branch).
4812N/A
4812N/A - Build the release kit. This procedure differs
4812N/A between the 9.0 release branch and later versions.
4812N/A On the 9.0 release branch,
4812N/A
4812N/A cd <temporary directory>
4812N/A cvs export -r v9_0_0rc10 bind9
4812N/A cd bind9
4812N/A sh configure
4812N/A make kit
4812N/A
4812N/A On the 9.[1-2] release branch or mainline, use the
4812N/A "util/kit.sh" script.
4812N/A
4812N/A - Build bind9 from the kit on ns-ext (phred)
4812N/A and ns-int (rc), install it, and let it run for
4812N/A a day keeping an eye on it for any problems.
4812N/A
4812N/A ssh phred.isc.org
4812N/A ver=9.2.0
4812N/A scp rc.isc.org:bind-$ver.tar.gz .
4812N/A gunzip <bind-$ver.tar.gz | tar xfv -
4812N/A cd bind-$ver
4812N/A sh configure
4812N/A make
4812N/A su
4812N/A make install
4812N/A ps -elf | grep named
4812N/A # kill both the keep-running script and named itself
4812N/A /var/named/keep-running ns-ext &
4812N/A
4812N/A ssh rc
4812N/A ver=9.2.0
4812N/A gunzip <bind-$ver.tar.gz | tar xfv -
4812N/A cd bind-$ver
4812N/A sh configure
4812N/A make
4812N/A su
4812N/A make install
4812N/A mv /usr/local/sbin/named /usr/local/sbin/named9
4812N/A ps -elf | grep named
4812N/A # kill both keep-running scripts and both named9:s
4812N/A /var/named/keep-running9 rc-res1 &
4812N/A /var/named/keep-running9 ns-int &
4812N/A
4812N/A - If you can, try resolving some IPv6 addresses and
4812N/A doing queries over IPv6.
4812N/A
4812N/A - If problems are found at this stage, fix them, move the
4812N/A release tag up using "rtag -F", and respin the kit.
4812N/A
4812N/A - Sign the distribution files with the ISC signing PGP key
4812N/A and fix the permissions on the signature file:
4812N/A
4812N/A ver=9.2.0
4812N/A pgp -sba bind-$ver.tar.gz -u 0x51BAB2ED
4812N/A chmod 644 bind-$ver.tar.gz.asc
4812N/A
4812N/A - Verify the PGP signature:
4812N/A
4812N/A pgp bind-$ver.tar.gz.asc bind-$ver.tar.gz
4812N/A
4812N/A (Look for the words "Good signature" in the output.)
4812N/A
4812N/A - If there is a companion binary kit for NT, sign it and verify the
4812N/A signature:
4812N/A
4812N/A scp rc.isc.org:/udir/mayer/BIND$ver.zip .
4812N/A pgp -sba BIND$ver.zip -u 0x51BAB2ED
4812N/A chmod 644 BIND$ver.zip.asc
4812N/A pgp BIND$ver.zip.asc BIND$ver.zip
4812N/A
4812N/A - Prepare a release announcement based on the previous one.
4812N/A
4812N/A - Copy the distribution and PGP signature files to the FTP site:
4812N/A
4812N/A ssh -n isrv4.pa.vix.com "mkdir /udir/ftp/isc/bind9/$ver"
4812N/A scp bind-$ver.tar.gz bind-$ver.tar.gz.asc \
4812N/A isrv4.pa.vix.com:/udir/ftp/isc/bind9/$ver
4812N/A
4812N/A - If there is a companion binary kit for NT, copy it, too:
4812N/A
4812N/A ssh -n isrv4.pa.vix.com "mkdir /udir/ftp/isc/bind/contrib/ntbind-$ver"
4812N/A scp BIND$ver.zip BIND$ver.zip.asc \
4812N/A isrv4.pa.vix.com:/udir/ftp/isc/bind/contrib/ntbind-$ver
4812N/A
4812N/A - Download using FTP (or a web browser) using the URLs in the release
4812N/A announcement and verify the PGP signature again
4812N/A
4812N/A - Ask webteam@nominum.com to publish the updated web pages
4812N/A
4812N/A - When the web pages are up, announce the release on
4812N/A bind-announce@isc.org
4812N/A
4812N/A - Increment the version in the file "version", "configure.in" and
4812N/A "doc/arm/Bv9ARM-book.xml".
4812N/A
4812N/A - Resume doing pullups
4812N/A
4812N/A