Deleted Added
full compact
release.7 (107064) release.7 (107788)
1.\" Copyright (c) 2002 Murray Stokely <murray@FreeBSD.org>
2.\" All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
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.
12.\"
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
23.\" SUCH DAMAGE.
24.\"
1.\" Copyright (c) 2002 Murray Stokely <murray@FreeBSD.org>
2.\" All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
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.
12.\"
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
23.\" SUCH DAMAGE.
24.\"
25.\" $FreeBSD: head/share/man/man7/release.7 107064 2002-11-18 20:31:35Z jhb $
25.\" $FreeBSD: head/share/man/man7/release.7 107788 2002-12-12 17:26:04Z ru $
26.\"
27.Dd March 12, 2002
28.Dt RELEASE 7
29.Os
30.Sh NAME
31.Nm release
32.Nd "release building infrastructure"
33.Sh DESCRIPTION
34.Fx
35provides a complete build environment suitable for users to make
36full releases of the
37.Fx
38operating system.
39All of the tools necessary to build a release are available from the
40CVS repository in
41.Pa src/release .
42A complete release can actually be built with only a single command,
43including the creation of ISO images suitable for burning to CD-ROM,
44installation floppies, and an FTP install directory.
45This command is aptly named
46.Dq Li "make release" .
47.Pp
48Before attempting to build a release, the user is expected to be
49familiar with the contents of
50.Xr build 7 ,
51and should have experience upgrading systems from source with
52.Dq Li "make world" .
53The release build process requires that
54.Pa /usr/obj
55be populated with the output of
56.Dq Li "make buildworld" .
57This is necessary so that the object files for a complete system can
58be installed into a clean
59.Xr chroot 8
60environment.
61The release procedure also requires that the
62.Xr md 4
63(memory disk) device driver be present in the kernel
64(either by being compiled in or loaded as a module).
65.Pp
66This document does not cover source code management, quality
67assurance, or other aspects of the release engineering process.
68.Sh TARGETS
69The release makefile
70.Pq Pa src/release/Makefile
71is fairly abstruse.
72Most developers will only be concerned with the
73.Cm release
74target.
75.\" XXX: Some sort of introduction to this list? All the others have one.
76.Bl -tag -width ".Cm rerelease"
77.It Cm release
78Uses
79.Dq Li "make installworld"
80to install a clean system into a
81.Xr chroot 8
26.\"
27.Dd March 12, 2002
28.Dt RELEASE 7
29.Os
30.Sh NAME
31.Nm release
32.Nd "release building infrastructure"
33.Sh DESCRIPTION
34.Fx
35provides a complete build environment suitable for users to make
36full releases of the
37.Fx
38operating system.
39All of the tools necessary to build a release are available from the
40CVS repository in
41.Pa src/release .
42A complete release can actually be built with only a single command,
43including the creation of ISO images suitable for burning to CD-ROM,
44installation floppies, and an FTP install directory.
45This command is aptly named
46.Dq Li "make release" .
47.Pp
48Before attempting to build a release, the user is expected to be
49familiar with the contents of
50.Xr build 7 ,
51and should have experience upgrading systems from source with
52.Dq Li "make world" .
53The release build process requires that
54.Pa /usr/obj
55be populated with the output of
56.Dq Li "make buildworld" .
57This is necessary so that the object files for a complete system can
58be installed into a clean
59.Xr chroot 8
60environment.
61The release procedure also requires that the
62.Xr md 4
63(memory disk) device driver be present in the kernel
64(either by being compiled in or loaded as a module).
65.Pp
66This document does not cover source code management, quality
67assurance, or other aspects of the release engineering process.
68.Sh TARGETS
69The release makefile
70.Pq Pa src/release/Makefile
71is fairly abstruse.
72Most developers will only be concerned with the
73.Cm release
74target.
75.\" XXX: Some sort of introduction to this list? All the others have one.
76.Bl -tag -width ".Cm rerelease"
77.It Cm release
78Uses
79.Dq Li "make installworld"
80to install a clean system into a
81.Xr chroot 8
82environment on the filesystem.
82environment on the file system.
83Checks out the specified version of the source code and then rebuilds
84the entire system in the clean environment with
85.Dq Li "make world" .
86The detailed steps that follow are then executed to package up the
87different distributions, build the installation floppy disks, build
88release documentation, and so on.
89.It Cm rerelease
90Assumes that the output of a release build has been manually modified,
91and performs the minimal number of steps to rebuild the release using
92the intermediate output of the previous
93.Dq Li "make release" .
94.It Cm floppies
95Generate a new set of boot floppies.
96This will call the
97.Cm release.5 ,
98.Cm release.9 ,
99and
100.Cm release.10
101targets to re-generate the floppy images of a previous
102.Dq Li "make release" .
103This is most often used to build custom boot floppies.
104.El
105.Pp
106Targets called by
107.Dq Li "make release" :
108.Bl -tag -width ".Cm release.10"
109.It Cm release.1
110Cleans out the
111.Pa ${CHROOTDIR}/R
112directory and uses
113.Xr mtree 8
114to build the directory hierarchy for the system.
115.It Cm release.2
116Installs the system into the distribution directories.
117.It Cm release.3
118Builds and installs
119.Dq crypto ,
120.Dq krb4
121and
122.Dq krb5
123distributions.
124.It Cm release.4
125.\" XXX: We build more than one kernel. We build a stripped down
126.\" kernel for the boot media in addition to a full GENERIC kernel.
127Makes and installs the
128.Pa GENERIC
129kernel.
130.It Cm release.5
131Uses
132.Xr crunchgen 1
133to build
134.Dq crunched
135binaries to live on the installation floppies.
136.It Cm release.6
137Builds synthetic distributions, and cleans up the previously built
138distribution trees.
139.It Cm release.7
140Creates tarballs of the assembled distribution trees.
141.It Cm release.8
142Makes source distributions.
143.It Cm release.9
144Creates the boot and MFS root floppies.
145.It Cm release.10
146Creates the fixit floppy.
147.It Cm ftp.1
148Sets up a suitable area for FTP installations in
149.Pa ${CHROOTDIR}/R/ftp .
150.It Cm cdrom.1
151Sets up a suitable area to build CD-ROM images in
152.Pa ${CHROOTDIR}/R/cdrom .
153.It Cm iso.1
154Builds two ISO images (installation and
155.Dq live
83Checks out the specified version of the source code and then rebuilds
84the entire system in the clean environment with
85.Dq Li "make world" .
86The detailed steps that follow are then executed to package up the
87different distributions, build the installation floppy disks, build
88release documentation, and so on.
89.It Cm rerelease
90Assumes that the output of a release build has been manually modified,
91and performs the minimal number of steps to rebuild the release using
92the intermediate output of the previous
93.Dq Li "make release" .
94.It Cm floppies
95Generate a new set of boot floppies.
96This will call the
97.Cm release.5 ,
98.Cm release.9 ,
99and
100.Cm release.10
101targets to re-generate the floppy images of a previous
102.Dq Li "make release" .
103This is most often used to build custom boot floppies.
104.El
105.Pp
106Targets called by
107.Dq Li "make release" :
108.Bl -tag -width ".Cm release.10"
109.It Cm release.1
110Cleans out the
111.Pa ${CHROOTDIR}/R
112directory and uses
113.Xr mtree 8
114to build the directory hierarchy for the system.
115.It Cm release.2
116Installs the system into the distribution directories.
117.It Cm release.3
118Builds and installs
119.Dq crypto ,
120.Dq krb4
121and
122.Dq krb5
123distributions.
124.It Cm release.4
125.\" XXX: We build more than one kernel. We build a stripped down
126.\" kernel for the boot media in addition to a full GENERIC kernel.
127Makes and installs the
128.Pa GENERIC
129kernel.
130.It Cm release.5
131Uses
132.Xr crunchgen 1
133to build
134.Dq crunched
135binaries to live on the installation floppies.
136.It Cm release.6
137Builds synthetic distributions, and cleans up the previously built
138distribution trees.
139.It Cm release.7
140Creates tarballs of the assembled distribution trees.
141.It Cm release.8
142Makes source distributions.
143.It Cm release.9
144Creates the boot and MFS root floppies.
145.It Cm release.10
146Creates the fixit floppy.
147.It Cm ftp.1
148Sets up a suitable area for FTP installations in
149.Pa ${CHROOTDIR}/R/ftp .
150.It Cm cdrom.1
151Sets up a suitable area to build CD-ROM images in
152.Pa ${CHROOTDIR}/R/cdrom .
153.It Cm iso.1
154Builds two ISO images (installation and
155.Dq live
156filesystem) from the CD-ROM release area
156file system) from the CD-ROM release area
157(disabled by default, see
158.Va MAKE_ISOS
159below).
160.It Cm doc.1
161Builds all of the necessary tools to turn the
162.Fx
163Documentation Project source documents (SGML, XML) into HTML
164and text documents that will accompany the release.
165Also, builds and installs the actual user documentation.
166This includes the Handbook, FAQ, articles, and so on.
167.It Cm doc.2
168Builds the release documentation.
169This includes the release notes,
170hardware guide, and installation instructions.
171.El
172.Sh ENVIRONMENT
173Variables that must be specified:
174.Bl -tag -width ".Va BUILDNAME"
175.It Va BUILDNAME
176The name of the release to be built.
177This is used to set the
178.Va RELEASE
179value in
180.Pa sys/conf/newvers.sh ,
181which affects the output of
182.Xr uname 1 .
183.It Va CHROOTDIR
184The directory to be used as the
185.Xr chroot 8
186environment for the entire release build.
187.\" XXX: I recommend against hardcoding specific numbers like "2.3" here;
188.\" XXX: perhaps it should be replaced with something to the effect of
189.\" XXX: "we don't know how much space you'll need, but make sure you have
190.\" XXX: at least 3 GB to be safe" (I know i'm still hardcoding a number,
191.\" XXX: but at least it looks less like a decree and more like an estimate.
157(disabled by default, see
158.Va MAKE_ISOS
159below).
160.It Cm doc.1
161Builds all of the necessary tools to turn the
162.Fx
163Documentation Project source documents (SGML, XML) into HTML
164and text documents that will accompany the release.
165Also, builds and installs the actual user documentation.
166This includes the Handbook, FAQ, articles, and so on.
167.It Cm doc.2
168Builds the release documentation.
169This includes the release notes,
170hardware guide, and installation instructions.
171.El
172.Sh ENVIRONMENT
173Variables that must be specified:
174.Bl -tag -width ".Va BUILDNAME"
175.It Va BUILDNAME
176The name of the release to be built.
177This is used to set the
178.Va RELEASE
179value in
180.Pa sys/conf/newvers.sh ,
181which affects the output of
182.Xr uname 1 .
183.It Va CHROOTDIR
184The directory to be used as the
185.Xr chroot 8
186environment for the entire release build.
187.\" XXX: I recommend against hardcoding specific numbers like "2.3" here;
188.\" XXX: perhaps it should be replaced with something to the effect of
189.\" XXX: "we don't know how much space you'll need, but make sure you have
190.\" XXX: at least 3 GB to be safe" (I know i'm still hardcoding a number,
191.\" XXX: but at least it looks less like a decree and more like an estimate.
192This filesystem should have at least 2.3 gigabytes of free space on the
192This file system should have at least 2.3 gigabytes of free space on the
193i386 architecture.
194.It Va CVSROOT
195The location of the
196.Fx
197CVS repository.
198This path name is in reference to the real system root,
199.Em not
200the root of the
201.Xr chroot 8
202directory tree.
203.El
204.Pp
205Optional variables:
206.Bl -tag -width ".Va PREFETCHDISTFILES"
207.It Va CVSCMDARGS
208Additional arguments for
209.Xr cvs 1
210.Ic checkout
211and
212.Ic update
213commands.
214For example, setting this variable to
215.Dq Li "-D '01/01/2002 00:00:00 GMT'"
216for
217.Dq Li "make release"
218or
219.Dq Li "make rerelease"
220will ask
221.Xr cvs 1
222to check out or update sources as of 00:00:00 GMT, January 1 2002, respectively.
223.It Va DOC_LANG
224The list of languages and encodings the SGML-based documentation
225should be built for.
226If not set, the documentation is built for all available languages.
227.It Va DOCRELEASETAG
228The CVS tag to use when checking out the documentation tree.
229Usually,
230the head of the documentation tree is used by default.
231If
232.Va RELEASETAG
233specifies a release tag,
234then the associated release version is used as the default instead.
235.It Va EXTLOCALDIR
236The directory that will be copied to
237.Pa ${CHROOTDIR}/usr/local .
238.It Va KERNEL_FLAGS
239The contents of this variable are passed to
240.Xr make 1
241when building kernels during the release build.
242For example, setting this variable to
243.Dq Li "-j 4"
244will instruct
245.Xr make 1
246to execute up to four processes at a time.
247.It Va KERNELS
248Specifies a list of additional kernel configurations to compile and
249install into the
250.Dq base
251distribution.
252Each kernel is installed into
253.Pa /boot/<config>
254so that it can be booted from the loader via
255.Dq Li "boot <config>" .
256.It Va LOCAL_PATCHES
257A patch file against
258.Pa /usr/src
259that will be applied in the
260.Xr chroot 8
261environment before the release build begins.
262.It Va PATCH_FLAGS
263Arguments for the
264.Xr patch 1
265command used to apply
266.Va LOCAL_PATCHES
267patch file.
268.It Va LOCAL_SCRIPT
269A script that will be run in the
270.Xr chroot 8
271environment immediately after any local patches are applied.
272.It Va MAKE_ISOS
273If defined, bootable ISO CD-ROM images will be created from the
274contents of the CD-ROM stage directory.
275.It Va NOCDROM
276If defined, the CD-ROM stage directories will not be created.
277.It Va NODOC
278If set to
279.Dq Li YES ,
280the SGML-based documentation from the
281.Fx
282Documentation Project will not be built.
283However, the
284.Dq doc
285distribution will still be created with the minimal documentation set
286provided in
287.Pa src/share/doc .
288.It Va NO_FLOPPIES
289If defined, no floppy disk image files will be created.
290.It Va NOPORTS
291If set to
292.Dq Li YES
293then the Ports Collection will be omitted from the release.
294.It Va NOPORTREADMES
295If defined, readme files will not be created for each individual port
296in the Ports Collection.
297The default behavior is for
298.Dq Li "make release"
299to run
300.Dq Li "make readmes"
301from
302.Pa ${CHROOTDIR}/usr/ports ,
303which can be a very time consuming operation.
304.It Va PORTSRELEASETAG
305The CVS tag to use when checking out the ports tree.
306Usually,
307the head of the ports tree is used by default.
308If
309.Va RELEASETAG
310specifies a release tag,
311then the associated release version is used as the default instead.
312.It Va PREFETCHDISTFILES
313If this variable is defined,
314then distfiles needed during the release build will be downloaded prior to
315entering the
316.Xr chroot 8
317environment.
318Note that this is done after any distfiles are obtained via
319.Va RELEASEDISTFILES .
320.It Va RELEASEDISTFILES
321The directory where the distribution files for ports required by the
322release build can be found.
323This may save a significant amount of time over downloading the
324distfiles through a slow link.
325.It Va RELEASENOUPDATE
326If this variable is defined for
327.Dq Li "make rerelease" ,
328the source code will not be updated with
329.Dq Li "cvs update" .
330.It Va RELEASETAG
331The CVS tag corresponding to the release that is to be built.
332If undefined, the release will be built from the
333.Dv HEAD
334of the CVS tree
335(a
336.Dq "-CURRENT snapshot" ) .
337.It Va TARGET_ARCH
338The target machine processor architecture.
339This is analogous to the
340.Dq Nm uname Fl p
341output.
342Set this to cross-build for a different architecture.
343.It Va TARGET
344The target hardware platform.
345This is analogous to the
346.Dq Nm uname Fl m
347output.
348This is necessary to cross-build some target architectures.
349For example, cross-building for PC98 machines requires
350.Va TARGET_ARCH Ns = Ns Li i386
351and
352.Va TARGET Ns = Ns Li pc98 .
353.It Va WORLD_FLAGS
354The contents of this variable are passed to
355.Xr make 1
356when building world during the release build.
357For example, setting this variable to
358.Dq Li "-j 4"
359will instruct
360.Xr make 1
361to execute up to four processes at a time.
362.El
363.Sh FILES
364.Bl -tag -compact
365.It Pa /etc/make.conf
366.It Pa /usr/doc/Makefile
367.It Pa /usr/doc/share/mk/doc.project.mk
368.It Pa /usr/ports/Mk/bsd.port.mk
369.It Pa /usr/ports/Mk/bsd.sites.mk
370.It Pa /usr/share/examples/etc/make.conf
371.It Pa /usr/src/Makefile
372.It Pa /usr/src/Makefile.inc1
373.It Pa /usr/src/release/Makefile
374.It Pa /usr/src/release/${arch}/drivers.conf
375.It Pa /usr/src/release/${arch}/boot_crunch.conf
376.It Pa /usr/src/release/${arch}/fixit_crunch.conf
377.El
378.Sh EXAMPLES
379The following sequence of commands was used to build the
380.Fx 4.5
381release:
382.Bd -literal -offset indent
383cd /usr
384cvs co -rRELENG_4_5_0_RELEASE src
385cd src
386make buildworld
387cd release
388make release CHROOTDIR=/local3/release BUILDNAME=4.5-RELEASE \\
389 CVSROOT=/host/cvs/usr/home/ncvs RELEASETAG=RELENG_4_5_0_RELEASE
390.Ed
391.Pp
392After running these commands, a complete system suitable for FTP or
393CD-ROM distribution is available in the
394.Pa /local3/release/R
395directory.
396.Pp
397The following sequence of commands can be used to build a
398.Dq "-CURRENT snapshot"
399of a
400locally modified source tree:
401.Bd -literal -offset indent
402cd /usr/src
403cvs diff -u > /path/to/local.patch
404make buildworld
405cd release
406make release CHROOTDIR=/local3/release BUILDNAME=5.0-CURRENT \\
407 CVSROOT=/host/cvs/usr/home/ncvs LOCAL_PATCHES=/path/to/local.patch
408.Ed
409.Sh SEE ALSO
410.Xr cc 1 ,
411.Xr crunchgen 1 ,
412.Xr cvs 1 ,
413.Xr install 1 ,
414.Xr make 1 ,
415.Xr patch 1 ,
416.Xr uname 1 ,
417.Xr md 4 ,
418.Xr drivers.conf 5 ,
419.Xr make.conf 5 ,
420.Xr build 7 ,
421.Xr ports 7 ,
422.Xr chroot 8 ,
423.Xr mtree 8
424.Rs
425.%T "FreeBSD Release Engineering"
426.%O http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/releng/
427.Re
428.Rs
429.%T "FreeBSD Release Engineering of Third Party Packages"
430.%O http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/releng-packages/
431.Re
432.Rs
433.%T "FreeBSD Developers' Handbook"
434.%O http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/developers-handbook/
435.Re
436.Sh HISTORY
437.Fx
4381.x
439used a manual checklist, compiled by
440.An Rod Grimes ,
441to produce a release.
442Apart from being incomplete, the list put a lot of specific demands on
193i386 architecture.
194.It Va CVSROOT
195The location of the
196.Fx
197CVS repository.
198This path name is in reference to the real system root,
199.Em not
200the root of the
201.Xr chroot 8
202directory tree.
203.El
204.Pp
205Optional variables:
206.Bl -tag -width ".Va PREFETCHDISTFILES"
207.It Va CVSCMDARGS
208Additional arguments for
209.Xr cvs 1
210.Ic checkout
211and
212.Ic update
213commands.
214For example, setting this variable to
215.Dq Li "-D '01/01/2002 00:00:00 GMT'"
216for
217.Dq Li "make release"
218or
219.Dq Li "make rerelease"
220will ask
221.Xr cvs 1
222to check out or update sources as of 00:00:00 GMT, January 1 2002, respectively.
223.It Va DOC_LANG
224The list of languages and encodings the SGML-based documentation
225should be built for.
226If not set, the documentation is built for all available languages.
227.It Va DOCRELEASETAG
228The CVS tag to use when checking out the documentation tree.
229Usually,
230the head of the documentation tree is used by default.
231If
232.Va RELEASETAG
233specifies a release tag,
234then the associated release version is used as the default instead.
235.It Va EXTLOCALDIR
236The directory that will be copied to
237.Pa ${CHROOTDIR}/usr/local .
238.It Va KERNEL_FLAGS
239The contents of this variable are passed to
240.Xr make 1
241when building kernels during the release build.
242For example, setting this variable to
243.Dq Li "-j 4"
244will instruct
245.Xr make 1
246to execute up to four processes at a time.
247.It Va KERNELS
248Specifies a list of additional kernel configurations to compile and
249install into the
250.Dq base
251distribution.
252Each kernel is installed into
253.Pa /boot/<config>
254so that it can be booted from the loader via
255.Dq Li "boot <config>" .
256.It Va LOCAL_PATCHES
257A patch file against
258.Pa /usr/src
259that will be applied in the
260.Xr chroot 8
261environment before the release build begins.
262.It Va PATCH_FLAGS
263Arguments for the
264.Xr patch 1
265command used to apply
266.Va LOCAL_PATCHES
267patch file.
268.It Va LOCAL_SCRIPT
269A script that will be run in the
270.Xr chroot 8
271environment immediately after any local patches are applied.
272.It Va MAKE_ISOS
273If defined, bootable ISO CD-ROM images will be created from the
274contents of the CD-ROM stage directory.
275.It Va NOCDROM
276If defined, the CD-ROM stage directories will not be created.
277.It Va NODOC
278If set to
279.Dq Li YES ,
280the SGML-based documentation from the
281.Fx
282Documentation Project will not be built.
283However, the
284.Dq doc
285distribution will still be created with the minimal documentation set
286provided in
287.Pa src/share/doc .
288.It Va NO_FLOPPIES
289If defined, no floppy disk image files will be created.
290.It Va NOPORTS
291If set to
292.Dq Li YES
293then the Ports Collection will be omitted from the release.
294.It Va NOPORTREADMES
295If defined, readme files will not be created for each individual port
296in the Ports Collection.
297The default behavior is for
298.Dq Li "make release"
299to run
300.Dq Li "make readmes"
301from
302.Pa ${CHROOTDIR}/usr/ports ,
303which can be a very time consuming operation.
304.It Va PORTSRELEASETAG
305The CVS tag to use when checking out the ports tree.
306Usually,
307the head of the ports tree is used by default.
308If
309.Va RELEASETAG
310specifies a release tag,
311then the associated release version is used as the default instead.
312.It Va PREFETCHDISTFILES
313If this variable is defined,
314then distfiles needed during the release build will be downloaded prior to
315entering the
316.Xr chroot 8
317environment.
318Note that this is done after any distfiles are obtained via
319.Va RELEASEDISTFILES .
320.It Va RELEASEDISTFILES
321The directory where the distribution files for ports required by the
322release build can be found.
323This may save a significant amount of time over downloading the
324distfiles through a slow link.
325.It Va RELEASENOUPDATE
326If this variable is defined for
327.Dq Li "make rerelease" ,
328the source code will not be updated with
329.Dq Li "cvs update" .
330.It Va RELEASETAG
331The CVS tag corresponding to the release that is to be built.
332If undefined, the release will be built from the
333.Dv HEAD
334of the CVS tree
335(a
336.Dq "-CURRENT snapshot" ) .
337.It Va TARGET_ARCH
338The target machine processor architecture.
339This is analogous to the
340.Dq Nm uname Fl p
341output.
342Set this to cross-build for a different architecture.
343.It Va TARGET
344The target hardware platform.
345This is analogous to the
346.Dq Nm uname Fl m
347output.
348This is necessary to cross-build some target architectures.
349For example, cross-building for PC98 machines requires
350.Va TARGET_ARCH Ns = Ns Li i386
351and
352.Va TARGET Ns = Ns Li pc98 .
353.It Va WORLD_FLAGS
354The contents of this variable are passed to
355.Xr make 1
356when building world during the release build.
357For example, setting this variable to
358.Dq Li "-j 4"
359will instruct
360.Xr make 1
361to execute up to four processes at a time.
362.El
363.Sh FILES
364.Bl -tag -compact
365.It Pa /etc/make.conf
366.It Pa /usr/doc/Makefile
367.It Pa /usr/doc/share/mk/doc.project.mk
368.It Pa /usr/ports/Mk/bsd.port.mk
369.It Pa /usr/ports/Mk/bsd.sites.mk
370.It Pa /usr/share/examples/etc/make.conf
371.It Pa /usr/src/Makefile
372.It Pa /usr/src/Makefile.inc1
373.It Pa /usr/src/release/Makefile
374.It Pa /usr/src/release/${arch}/drivers.conf
375.It Pa /usr/src/release/${arch}/boot_crunch.conf
376.It Pa /usr/src/release/${arch}/fixit_crunch.conf
377.El
378.Sh EXAMPLES
379The following sequence of commands was used to build the
380.Fx 4.5
381release:
382.Bd -literal -offset indent
383cd /usr
384cvs co -rRELENG_4_5_0_RELEASE src
385cd src
386make buildworld
387cd release
388make release CHROOTDIR=/local3/release BUILDNAME=4.5-RELEASE \\
389 CVSROOT=/host/cvs/usr/home/ncvs RELEASETAG=RELENG_4_5_0_RELEASE
390.Ed
391.Pp
392After running these commands, a complete system suitable for FTP or
393CD-ROM distribution is available in the
394.Pa /local3/release/R
395directory.
396.Pp
397The following sequence of commands can be used to build a
398.Dq "-CURRENT snapshot"
399of a
400locally modified source tree:
401.Bd -literal -offset indent
402cd /usr/src
403cvs diff -u > /path/to/local.patch
404make buildworld
405cd release
406make release CHROOTDIR=/local3/release BUILDNAME=5.0-CURRENT \\
407 CVSROOT=/host/cvs/usr/home/ncvs LOCAL_PATCHES=/path/to/local.patch
408.Ed
409.Sh SEE ALSO
410.Xr cc 1 ,
411.Xr crunchgen 1 ,
412.Xr cvs 1 ,
413.Xr install 1 ,
414.Xr make 1 ,
415.Xr patch 1 ,
416.Xr uname 1 ,
417.Xr md 4 ,
418.Xr drivers.conf 5 ,
419.Xr make.conf 5 ,
420.Xr build 7 ,
421.Xr ports 7 ,
422.Xr chroot 8 ,
423.Xr mtree 8
424.Rs
425.%T "FreeBSD Release Engineering"
426.%O http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/releng/
427.Re
428.Rs
429.%T "FreeBSD Release Engineering of Third Party Packages"
430.%O http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/releng-packages/
431.Re
432.Rs
433.%T "FreeBSD Developers' Handbook"
434.%O http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/developers-handbook/
435.Re
436.Sh HISTORY
437.Fx
4381.x
439used a manual checklist, compiled by
440.An Rod Grimes ,
441to produce a release.
442Apart from being incomplete, the list put a lot of specific demands on
443available filesystems and was quite torturous to execute.
443available file systems and was quite torturous to execute.
444.Pp
445As part of the
446.Fx 2.0
447release engineering effort, significant
448effort was spent getting
449.Pa src/release/Makefile
450into a shape where it could at least automate most of the tediousness
451of building a release in a sterile environment.
452.Pp
453With its almost 1000 revisions spread over multiple branches, the
454.Xr cvs 1
455log of
456.Pa src/release/Makefile
457contains a vivid historical record of some
458of the hardships release engineers go through.
459.Sh AUTHORS
460.Pa src/release/Makefile
461was originally written by
462.An -nosplit
463.An Rod Grimes ,
464.An Jordan Hubbard ,
465and
466.An Poul-Henning Kamp .
467This manual page was written by
468.An Murray Stokely Aq murray@FreeBSD.org .
444.Pp
445As part of the
446.Fx 2.0
447release engineering effort, significant
448effort was spent getting
449.Pa src/release/Makefile
450into a shape where it could at least automate most of the tediousness
451of building a release in a sterile environment.
452.Pp
453With its almost 1000 revisions spread over multiple branches, the
454.Xr cvs 1
455log of
456.Pa src/release/Makefile
457contains a vivid historical record of some
458of the hardships release engineers go through.
459.Sh AUTHORS
460.Pa src/release/Makefile
461was originally written by
462.An -nosplit
463.An Rod Grimes ,
464.An Jordan Hubbard ,
465and
466.An Poul-Henning Kamp .
467This manual page was written by
468.An Murray Stokely Aq murray@FreeBSD.org .