diff --git a/en/gifs/Makefile b/en/gifs/Makefile index 1ed2b29940..6e137d768a 100644 --- a/en/gifs/Makefile +++ b/en/gifs/Makefile @@ -1,4 +1,4 @@ -# $FreeBSD: www/en/gifs/Makefile,v 1.36 2000/12/31 17:03:51 wosch Exp $ +# $FreeBSD: www/en/gifs/Makefile,v 1.37 2001/06/20 17:05:23 obrien Exp $ .if exists(../Makefile.conf) .include "../Makefile.conf" @@ -53,5 +53,6 @@ DATA+= bsdcomp-4.2.gif DATA+= lob-freebsd-4.2.gif DATA+= daemon_hammer.jpg DATA+= daemon_hammer-tn15.jpg daemon_hammer-tn20.jpg daemon_hammer-tn25.jpg +DATA+= branches.png .include "${WEB_PREFIX}/share/mk/web.site.mk" diff --git a/en/gifs/branches.png b/en/gifs/branches.png new file mode 100644 index 0000000000..926bf830ce Binary files /dev/null and b/en/gifs/branches.png differ diff --git a/en/internal/Makefile b/en/internal/Makefile index f9e70448b3..09dcdba7ed 100644 --- a/en/internal/Makefile +++ b/en/internal/Makefile @@ -1,4 +1,4 @@ -# $FreeBSD: www/en/internal/Makefile,v 1.25 2001/04/27 09:15:00 wosch Exp $ +# $FreeBSD: www/en/internal/Makefile,v 1.26 2001/11/16 19:50:58 jhb Exp $ .if exists(../Makefile.conf) .include "../Makefile.conf" @@ -15,6 +15,7 @@ DOCS+= mirror.sgml DOCS+= statistic.sgml DOCS+= developer.sgml DOCS+= bylaws.sgml +DOCS+= releng.sgml INDEXLINK= internal.html diff --git a/en/internal/internal.sgml b/en/internal/internal.sgml index c85fa07d7e..ef1aeaeb70 100644 --- a/en/internal/internal.sgml +++ b/en/internal/internal.sgml @@ -1,6 +1,6 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN" [ <!ENTITY base CDATA ".."> -<!ENTITY date "$FreeBSD: www/en/internal/internal.sgml,v 1.15 2001/07/13 12:52:14 dd Exp $"> +<!ENTITY date "$FreeBSD: www/en/internal/internal.sgml,v 1.16 2001/11/02 14:39:25 keramida Exp $"> <!ENTITY title "FreeBSD Internal"> <!ENTITY % includes SYSTEM "../includes.sgml"> %includes; ]> @@ -38,6 +38,9 @@ for what.</p> developer groups are working on the cutting edge to expand FreeBSD's range of applications in new directions.</p> +<h2><a href="releng.html">FreeBSD Release Engineering Process</a></h2> +<p>This page documents the release engineering process for official +FreeBSD releases.</p> <h2><a href="../mailto.html">Contacting FreeBSD</a></h2> diff --git a/en/internal/releng.sgml b/en/internal/releng.sgml new file mode 100644 index 0000000000..5bb97c33d1 --- /dev/null +++ b/en/internal/releng.sgml @@ -0,0 +1,341 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN" [ +<!ENTITY base CDATA ".."> +<!ENTITY email 'releng'> +<!ENTITY date "$FreeBSD$"> +<!ENTITY title "FreeBSD Release Engineering"> +<!ENTITY % includes SYSTEM "../includes.sgml"> %includes; +]> + +<html> +&header; + +<p>This page documents the process used by the release engineering + team to produce official FreeBSD releases. Comments, suggestions, + and additional material are welcome. This is, as always, a work in + progress.</p> + +<h1>Release Process</h1> + + <p>New releases of FreeBSD are released from the -STABLE branch at + approximately four month intervals. The FreeBSD release process + begins to ramp up 45 days before the anticipated release date when + the release engineer sends an email to the development mailing + lists to remind developers that they only have 15 days to + integrate new changes before the code freeze. During this time, + many developers perform what have become known as ``MFC sweeps''. + MFC stands for ``Merge From CURRENT'' and it describes the process + of merging a tested change from our -CURRENT development branch to + our -STABLE branch.</p> + + <center><img src="../gifs/branches.png" alt="Release Branch + Diagram"></center> + + <p>To service our most conservative users, individual release + branches were introduced with FreeBSD 4.3. These release branches + are created shortly before a final release is made, and after the + release goes out only the most critical security fixes are merged + onto the release branch. In addition to source updates via CVS, + binary patchkits are available to keep systems on the + <tt>RELENG_4_3</tt> and <tt>RELENG_4_4</tt> branches updated.</p> + + <h2>Code Review</h2> + + <p>Thirty days before the anticipated release, the source repository + enters a ``code slush''. During this time, all commits to the + -STABLE branch must be approved by the release engineer (<a + href="mailto:re@FreeBSD.org">re@FreeBSD.org</a>). The kinds of + changes that are allowed during this 15 day period include :</p> + + <ul> + <li>Bug-fixes.</li> + <li>Documentation updates.</li> + <li>Security-related fixes of any kind.</li> + <li><em>Minor</em> changes to device drivers, such as adding new + device IDs.</li> + + <li>Any additional change that the release engineering team feels + is justified given the potential risk.</li> + </ul> + + <p>After the first 15 days of the code slush, a release candidate is + released for widespread testing and the code enters a ``code + freeze'' where it becomes much harder to justify new changes to + the system unless a serious bug-fix or security issue is involved. + During the code freeze, at least one release candidate is released + per week until the final release is ready. During the days + leading up to the final release, the release engineering team is + in constant communication with the security-officer team, the + documentation maintainers, and the ports managers, to make sure + that all of the different components required for a successful + release are available.</p> + + <h2>Final Release Checklist</h2> + + <p>When several release candidates have been made available for + widespread testing and all major issues have been resolved, the + final release ``polishing'' can begin.</p> + + <h3>Creating the Release Branch</h3> + + <p>As described in the introduction, the <tt>RELENG_X_Y</tt> release + branch is a relatively new addition to our release engineering + methodology. The first step in creating this branch is to ensure + that you are working with the newest version of the + <tt>RELENG_X</tt> sources that you want to branch + <em>from</em>.</p> + + <tt>/usr/src# cvs up -rRELENG_4 -P -d</tt> + + <p>The next step is to create a branch point tag. A ``tag'' is CVS + vernacular for a label that identifies the source at a specific + point in time. By tagging the tree, we ensure that future release + builders will always be able to use the same source we used to + create the official FreeBSD Project releases. The branch point + tag makes it easier to produce diffs against the start of the + branch :</p> + + <tt>/usr/src# cvs rtag -rRELENG_4 RELENG_4_4_BP src</tt> + + <p>And then a new branch tag is created with :</p> + + <tt>/usr/src# cvs rtag -b -rRELENG_4_4_BP RELENG_4_4 src</tt> + + <p>Note: The <tt>RELENG_*</tt> tags are restricted for use by the + CVS-meisters and release engineers.</p> + + <h3>Bumping up the Version Number</h3> + + <p>Before the final release can be tagged, built, and released, the + following files need to be modified to reflect the correct version + of FreeBSD :</p> + + <ul> + <li><tt>src/sys/conf/newvers.sh</tt></li> + <li><tt>src/sys/sys/param.h</tt></li> + <li><tt>src/release/doc/share/sgml/release.ent</tt></li> + <li><tt>src/gnu/usr.bin/groff/tmac/mdoc.local</tt></li> + <li><tt>doc/share/sgml/freebsd.ent</tt></li> + <li><tt>doc/en_US.ISO8859-1/books/handbook/mirrors/chapter.sgml</tt></li> + <li><tt>www/en/releases/*</tt></li> + <li><tt>src/UPDATING</tt></li> + </ul> + + <h3>Creating the Release Tags</h3> + + <p>When the final release is ready, the following command will create the + <tt>RELENG_4_4_0_RELEASE</tt> tag.</p> + + <tt>/usr/src# cvs rtag -rRELENG_4_4 RELENG_4_4_0_RELEASE src</tt> + + <p>The Documentation and Ports managers are responsible for tagging + the respective trees with the <tt>RELEASE_4_4_0</tt> tag.</p> + + <p>Occasionally, a last minute fix may be required <em>after</em> + the final tags have been created. In practice this isn't a + problem, since CVS allows tags to be manipulated with <tt>cvs tag + -d <em>tagname</em> <em>filename</em></tt>. It is very important + that any last minute changes be tagged appropriately as part of + the release. FreeBSD releases must always be reproduceable. + Local hacks in the release engineer's environment are not + acceptable.</p> + +<h1>Release Building</h1> + + <p>FreeBSD releases can be built by anyone with a fast machine and + access to a source repository. <em>(That should be everyone, + since we offer anonymous CVS! See <a + href="http://www.FreeBSD.org/handbook">The Handbook</a> for + details.)</em>. The only special requirement is that the + <tt>vn</tt> <em>(On -CURRENT, this device has been replaced by the + new <tt>md</tt> memory disk driver.)</em> device must be + available. If the device is not loaded into your kernel, then the + kernel module should be automatically loaded when + <tt>vnconfig</tt> is executed during the boot media creation + phase. All of the tools necessary to build a release are + available from the CVS repository in <tt>src/release</tt>. These + tools aim to provide a consistent way to build FreeBSD releases. + A complete release can actually be built with only a single + command, including the creation of ISO images suitable for burning + to CDROM, installation floppies, and an FTP install directory. + This command is aptly named ``make release''.</p> + + <h2>``make release''</h2> + + <p>To successfully build a release, you must first populate + <tt>/usr/obj</tt> by running ``make world'' or simply ``make + buildworld''. The release target requires several variables be + set properly to build a release :</p> + + <ul> + <li><strong><tt>CHROOTDIR</tt></strong> - The directory to be used + as the chroot environment for the entire release build.</li> + <li><strong><tt>BUILDNAME</tt></strong> - The name of the release + to be built.</li> + <li><strong><tt>CVSROOT</tt></strong> - The location of a CVS + repository.</li> + <li><strong><tt>RELEASETAG</tt></strong> - The CVS tag + corresponding to the release you would like to build.</li> + </ul> + + <p>There are many other variables available to customize the release + build. Most of these variables are documented at the top of + <tt>src/release/Makefile</tt>. The exact command used to build + the official FreeBSD 4.4 (x86) release was :</p> + + <tt>make release CHROOTDIR=/local3/release BUILDNAME=4.4-RELEASE CVSROOT=/host/cvs/usr/home/ncvs RELEASETAG=RELENG_4_4_0_RELEASE</tt> + + <p>The release Makefile can be broken down into several distinct + steps.</p> + + <ul> + <li>Creation of a sanitized system environment in a separate + directory hierarchy with ``make installworld''.</li> + <li>Checkout from CVS of a clean version of the system source, + documentation, and ports into the release build hierarchy.</li> + <li>Population of <tt>/etc</tt> and <tt>/dev</tt> in the chrooted + environment.</li> + <li>chroot into the release build hierarchy, to make it harder for + the outside environment to taint this build.</li> + <li>``make world'' in the chrooted environment.</li> + <li>Build of Kerberos-related binaries.</li> + <li>Build 'GENERIC' kernel.</li> + <li>Creation of a staging directory tree where the binary + distributions will be built and packaged.</li> + <li>Build and installation of the documentation toolchain needed + to convert the documentation source (SGML) into HTML, and text + documents that will accompany the release.</li> + <li>Build and installation of the actual documentation (user + manuals, tutorials, release notes, hardware compatibility lists, + etc...)</li> + <li>Build of the ``crunched'' binaries used for installation + floppies.</li> + <li>Package up distribution tarballs of the binaries and + sources.</li> + <li>Create the boot media and a fixit floppy.</li> + <li>Create FTP installation hierarchy.</li> + <li>(optionally) Create ISO images for CDROM/DVD media.</li> + </ul> + + <h2>Contributed Software (``ports'')</h2> + + <p>The <a href="http://www.FreeBSD.org/ports">FreeBSD Ports + collection</a> is a collection of over 6,000 third-party software + packages available for FreeBSD. The ports team (<a + href="mailto:portmgr@FreeBSD.org">portmgr@FreeBSD.org</a>) + responsible for maintaining a consistent ports tree that can be + used to create the binary packages that accompany a given FreeBSD + release.</p> + + <h3>The Ports Cluster</h3> + + <p>In order to provide a consistent set of third-party packages for + FreeBSD releases, every port is built in a separate chroot + environment, starting with an empty <tt>/usr/local</tt> and + <tt>/usr/X11R6</tt>. The requisite dependencies are installed as + packages before the build proceeds. This enforces <em> + consistency</em> in the package build process. By starting the + package build in a pristine environment, we can assure that the + package metadata (such as required dependencies) is accurate, and + so we will never generate packages that might work on some systems + and not on others depending on what software was previously + installed.</p> + + <p>The ``Ports Cluster'' for the x86 architecture currently consists + of a master node (Dual Pentium III 733Mhz) and 8 slave nodes + (Pentium III 800Mhz) to do the actual package builds. With this + configuration, a complete package build takes over 24 hours. + These machines are co-located with the other FreeBSD Project + equipment at Yahoo's corner of Exodus in Santa Clara, CA.</p> + + <p>The ``Ports Cluster'' for the Alpha architecture consists of 7 + PWS 500A machines donated by Compaq and also co-located with + Yahoo's facilities.</p> + + <h3>The Package Split</h3> + + <p>For FreeBSD 4.4 over 4.1 gigabytes of packages were created. + This causes a problem for CDROM distributions because we would + like to ship as many packages as possible without making the user + insert another disc to satisfy dependencies. The solution is to + create ``clusters'' of like packages with similar dependencies + onto specific discs. The package split is performed by the <a + href="mailto:portmgr@FreeBSD.org">portmgr</a> team in coordination + with the wishes of the general user community with respect to + which packages get to appear on the first CD.</p> + + <h2>Release ISOs</h2> + + <p>Starting with FreeBSD 4.4, the FreeBSD Project decided to release + all four ISO images that were previously sold on the BSDi/Wind + River Systems ``official'' CDROM distributions. Each of the four + discs must contain a <tt>README.TXT</tt> file that explains the + contents of the disc, a <tt>CDROM.INF</tt> file that provides + meta-data for the disc so that sysinstall can validate and use the + contents, and a <tt>filename.txt</tt> file that provides a + manifest for the disc. This manifest can be created with a simple + command :</p> + + <tt>/stage/cdrom# find . -type f | sed -e 's/\^.\///' | sort > filename.txt</tt> + + <p>The specific requirements of each CD is outlined below.</p> + + <h3>Disc #1</h3> + + <p>The first disc is almost completely created by ``make release''. + The only changes that should be made to the <tt>disc1</tt> + directory are the addition of a 'tools' directory, XFree86, and as + many popular third party software packages as will fit on the + disc. The 'tools' directory contains software that allow users to + create installation floppies from other operating systems. This + disc should be made bootable so that users of modern PCs do not + need to create installation floppy disks.</p> + + <p>If an alternate version of XFree86 is to be provided, then + sysinstall must be updated to reflect the new location and + installation instructions. The relevant code is contained in + <tt>src/release/sysinstall</tt> on -STABLE or + <tt>src/usr.sbin/sysinstall</tt> on -CURRENT. Specifically, the + files <tt>dist.c</tt>, <tt>menus.c</tt>, and <tt>config.c</tt> + will need to be updated.</p> + + <h3>Disc #2</h3> + + <p>The second disc is also largely created by ``make release''. + This disc contains a ``live filesystem'' that can be used from + sysinstall to troubleshoot a FreeBSD installation. This disc + should be bootable and should also contain a compressed copy of + the CVS repository in the <tt>CVSROOT</tt> directory and + commercial software demos in the <tt>commerce</tt> directory.</p> + + <h3>Discs #3 and 4</h3> + + <p>The remaining two discs contains additional software packages for + FreeBSD. The packages should be clustered so that a package and + all of its dependencies are included on the same disc.</p> + +<h1>Further Reading</h1> + + <ul> + <li><a + href="http://people.FreeBSD.org/~murray/papers/releng.pdf">The + Release Engineering of FreeBSD 4.4</a>, BSDCon Europe 2001 + Proceedings. [ <a + href="http://people.FreeBSD.org/~murray/papers/releng.pdf">PDF</a> + ] [ <a + href="http://people.FreeBSD.org/~murray/papers/releng.ps">PostScript</a> + ] [ <a + href="http://people.FreeBSD.org/~murray/#presentations">Slides</a> + ]</li> + + <li><a + href="http://www.netbsd.org/developers/releng/index.html">NetBSD + Developer Documentation : Release Engineering</a></li> + + <li><a href="http://people.FreeBSD.org/~jhb/docs/releng.txt">John + Baldwin's Release Engineering Proposal</a></li> + </ul> + + &footer; + + </body> +</html>