1 .\" Copyright (c) 2002 Murray Stokely <murray@FreeBSD.org>
2 .\" All rights reserved.
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\" notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\" notice, this list of conditions and the following disclaimer in the
11 .\" documentation and/or other materials provided with the distribution.
13 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
14 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE
17 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 .Nd "release building infrastructure"
35 provides a complete build environment suitable for users to make
39 All of the tools necessary to build a release are available from the
41 source code repository in
43 A complete release can actually be built with only a single command,
44 including the creation of ISO images suitable for burning to CD-ROM,
45 memory stick images, and an FTP install directory.
46 This command is aptly named
47 .Dq Li "make release" .
49 For some users, it may be desirable to provide an absolutely clean
50 build environment, with no local modifications to the source tree or to
52 and with clean checkouts of specific versions of the doc, src, and ports
53 trees. For this purpose, a script
54 .Pq Pa src/release/generate-release.sh
55 is provided to automate these checkouts and then execute
60 Before attempting to build a release, the user is expected to be
61 familiar with the contents of
63 and should have experience upgrading systems from source.
65 The release build process requires that
67 be populated with the output of
68 .Dq Li "make buildworld" .
69 This is necessary to provide the object files for the release or, when
71 .Pa generate-release.sh ,
72 so that the object files for a complete system can be installed into a clean
74 environment. In this second case, the built world must be capable of running
75 on the build system (i.e. it must be for the same architecture and be
76 compatible with the installed kernel).
77 The release procedure on some architectures may also require that the
79 (memory disk) device driver be present in the kernel
80 (either by being compiled in or available as a module).
82 This document does not cover source code management, quality
83 assurance, or other aspects of the release engineering process.
84 .Sh CLEAN RELEASE GENERATION
85 Official releases of FreeBSD are produced in a totally clean environment to
86 ensure consistency between the versions of the src, ports, and doc trees
87 and to avoid contamination from the host system (e.g. local patches, changes
90 etc.). This is accomplished using the wrapper script
91 .Pa src/release/generate-release.sh .
93 .Ic generate-release.sh
94 svn-branch scratch-dir
96 .Ic generate-release.sh
98 .Dq Li "make installworld"
103 It then checks out the src tree specified by
107 and (optionally) the ports and documentation trees using
111 Once the various source trees have been obtained, it executes
112 .Dq Li "make release"
115 environment and places the result in
117 Note that because this uses a chroot, it cannot be used to cross-build
121 Environment variables:
122 .Bl -tag -width ".Cm MAKE_FLAGS"
124 The CVSUP server to use for the doc and ports trees. One of
128 must be specified for ports and documentation to be included in the release.
132 CVS repository to use for the doc and ports trees. One of
136 must be specified for ports and documentation to be included in the release.
140 is set, that tag will be used for CVS checkouts (doc and ports), otherwise
141 .Ic generate-release.sh
144 This environment variable can be set to pass flags (e.g. -j) to
146 when invoked by the script.
148 The location of the FreeBSD SVN source repository. Defaults to
149 .Pa svn://svn.freebsd.org/base .
153 .Pq Pa src/release/Makefile
155 Most developers will only be concerned with the
160 .\" XXX: Some sort of introduction to this list? All the others have one.
161 .Bl -tag -width ".Cm packagesystem"
163 Meta-target to build all release media and distributions applicable to this
166 Copy all produced release media to
169 Builds installation CD-ROM images. On some systems, this may require that
172 .Pq Pa sysutils/cdrtools
173 and possibly that the
175 (memory disk) device driver be present in the kernel
176 (either by being compiled in or available as a module). This target
177 produces files called
183 Builds an installation memory stick image named
185 Not applicable on all platforms. Requires that the
187 (memory disk) device driver be present in the kernel
188 (either by being compiled in or available as a module).
190 Creates a directory named
192 containing the distribution files used in network installations
193 and suitable for upload to an FTP mirror.
196 Major subtargets called by targets above:
197 .Bl -tag -width ".Cm packagesystem"
199 Generates all the distribution archives (e.g. base, kernel, ports, doc)
200 applicable on this platform.
202 Builds a bootable installation system containing all the distribution files
205 target, and suitable for imaging by the
211 Builds the release documentation.
212 This includes the release notes,
213 hardware guide, and installation instructions. Other documentation (e.g.
214 the Handbook) is built during the
221 .Bl -tag -width ".Va TARGET_ARCH"
223 Location of a directory containing the src tree. By default, the directory
224 above the one containing the makefile
227 Location of a directory containing the ports tree. By default,
229 If it is unset or cannot be found, ports will not be included in the release.
231 Location of a directory containing the doc tree. By default,
233 If it is unset or cannot be found, most documentation will not be included in
238 If defined, the Ports Collection will be omitted from the release.
240 If set, do not include system source code in the release.
242 If defined, the SGML-based documentation from the
244 Documentation Project will not be built.
247 distribution will still be created with the minimal documentation set
251 The target hardware platform.
252 This is analogous to the
255 This is necessary to cross-build some target architectures.
256 For example, cross-building for PC98 machines requires
257 .Va TARGET_ARCH Ns = Ns Li i386
259 .Va TARGET Ns = Ns Li pc98 .
262 defaults to the current hardware platform.
264 The target machine processor architecture.
265 This is analogous to the
268 Set this to cross-build for a different architecture.
271 defaults to the current machine architecture, unless
273 is also set, in which case it defaults to the appropriate
274 value for that platform.
275 Typically, one only needs to set
280 .It Pa /usr/doc/Makefile
281 .It Pa /usr/doc/share/mk/doc.project.mk
282 .It Pa /usr/ports/Mk/bsd.port.mk
283 .It Pa /usr/ports/Mk/bsd.sites.mk
284 .It Pa /usr/share/examples/etc/make.conf
285 .It Pa /usr/src/Makefile
286 .It Pa /usr/src/Makefile.inc1
287 .It Pa /usr/src/release/Makefile
288 .It Pa /usr/src/release/generate-release.sh
291 The following sequence of commands can be used to build a
292 .Dq "-CURRENT snapshot":
293 .Bd -literal -offset indent
295 svn co svn://svn.freebsd.org/base/head src
300 make install DESTDIR=/var/freebsd-snapshot
303 After running these commands, all produced distribution files (tarballs
304 for FTP, CD-ROM images, etc.) are available in the
305 .Pa /var/freebsd-snapshot
308 The following sequence of commands can be used to build a
309 .Dq "-CURRENT snapshot"
310 in a clean environment, including ports and documentation:
311 .Bd -literal -offset indent
315 export CVSUP_HOST=cvsupN.freebsd.org
316 sh generate-release.sh head /local3/release
319 After running these commands, all prepared release files are available in the
320 .Pa /local3/release/R
327 .Xr svn 1 Pq Pa ports/devel/subversion-freebsd ,
337 .%T "FreeBSD Release Engineering"
338 .%U http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/releng/
341 .%T "FreeBSD Release Engineering of Third Party Packages"
342 .%U http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/releng-packages/
345 .%T "FreeBSD Developers' Handbook"
346 .%U http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/developers-handbook/
351 used a manual checklist, compiled by
353 to produce a release.
354 Apart from being incomplete, the list put a lot of specific demands on
355 available file systems and was quite torturous to execute.
359 release engineering effort, significant
360 effort was spent getting
361 .Pa src/release/Makefile
362 into a shape where it could at least automate most of the tediousness
363 of building a release in a sterile environment.
368 .Pa src/release/Makefile
369 was overhauled and the wrapper script
370 .Pa src/release/generate-release.sh
371 introduced to support the introduction of a new installer.
373 At near 1000 revisions spread over multiple branches, the
376 .Pa src/release/Makefile
377 contains a vivid historical record of some
378 of the hardships release engineers go through.
380 .Pa src/release/Makefile
381 was originally written by
386 .An Poul-Henning Kamp .
387 This manual page was written by
388 .An Murray Stokely Aq murray@FreeBSD.org .