Skip site navigation (1)Skip section navigation (2)

FreeBSD Man Pages

Man Page or Keyword Search:
Man Architecture
Apropos Keyword Search (all sections) Output format
home | help
RELEASE(7)	   FreeBSD Miscellaneous Information Manual	    RELEASE(7)

NAME
     release --	release	building infrastructure

DESCRIPTION
     FreeBSD provides a	complete build environment suitable for	users to make
     full releases of the FreeBSD operating system.  All of the	tools neces-
     sary to build a release are available from	the FreeBSD source code	repos-
     itory in src/release.  A complete release can actually be built with only
     a single command, including the creation of ISO images suitable for burn-
     ing to CD-ROM, memory stick images, and an	FTP install directory.	This
     command is	aptly named ``make release''.

     For some users, it	may be desirable to provide an absolutely clean	build
     environment, with no local	modifications to the source tree or to
     make.conf(5), and with clean checkouts of specific	versions of the	doc,
     src, and ports trees.  For	this purpose, a	script
     (src/release/release.sh) is provided to automate these checkouts and then
     execute ``make release'' in a clean chroot(8).

     Before attempting to build	a release, the user is expected	to be familiar
     with the contents of build(7), and	should have experience upgrading sys-
     tems from source.

     The release build process requires	that /usr/obj be populated with	the
     output of ``make buildworld'' and ``make buildkernel''.  This is neces-
     sary to provide the object	files for the release or, when using
     release.sh, so that the object files for a	complete system	can be
     installed into a clean chroot(8) environment.

     If	the target release build is for	a different architecture or machine
     type, the TARGET and TARGET_ARCH variables	must be	used.  See the sup-
     ported release.conf variables for more information.

     The release procedure on some architectures may also require that the
     md(4) (memory disk) device	driver be present in the kernel	(either	by
     being compiled in or available as a module).

     This document does	not cover source code management, quality assurance,
     or	other aspects of the release engineering process.

CLEAN RELEASE GENERATION
     Official releases of FreeBSD are produced in a totally clean environment
     to	ensure consistency between the versions	of the src, ports, and doc
     trees and to avoid	contamination from the host system (such as local
     patches, changes to make.conf(5), etc.).  This is accomplished using the
     wrapper script src/release/release.sh.

     release.sh	[-c release.conf]

     release.sh	checks out the src/, ports/, and doc/ trees to CHROOTDIR, then
     calls ``make buildworld'' and ``make installworld'' to generate a
     chroot(8) environment.  Next, ``make release'' is run within the
     chroot(8) environment and places the result in $CHROOTDIR/R.

     The optional release.conf configuration file supports the following vari-
     ables:

     CHROOTDIR	      The directory within which the release will be built.

     SVNROOT	      The svn(1) host used to check out	the various trees.
		      Defaults to svn://svn.FreeeBSD.org.

     SRCBRANCH	      The src/ branch to use.  Defaults	to head/@rHEAD.

     DOCBRANCH	      The doc/ branch to use.  Defaults	to head/@rHEAD.

     PORTBRANCH	      The ports/ branch	to use.	 Defaults to head/@rHEAD.

     TARGET	      The target machine type for cross-building a release.

     TARGET_ARCH      The target machine architecture for cross-building a
		      release.

		      For the supported	list of	TARGET and TARGET_ARCH combi-
		      nations, consult the output of ``make targets'' as docu-
		      mented in	build(7).

     KERNEL	      The target kernel	configuration to use.  Defaults	to
		      GENERIC.	Multiple KERNEL	entries	may be specified.

     MAKE_CONF	      The make.conf(5) to use for the release build.  Defaults
		      to /dev/null to prevent polluting	the release with local
		      system changes.

     SRC_CONF	      The src.conf(5) to use for the release build.  Defaults
		      to /dev/null to prevent polluting	the release with local
		      system changes.

     MAKE_FLAGS	      Additional flags to pass to make(1).

     WORLD_FLAGS      Additional flags to pass to make(1) during the
		      ``buildworld'' phase.  Defaults to setting the number of
		      make(1) jobs (-j)	to the number of CPUs available	on a
		      SMP-capable system.

     KERNEL_FLAGS     Additional flags to pass to make(1) during the
		      ``buildkernel'' phase.  Defaults to setting the number
		      of make(1) jobs (-j) to half the number of CPUs avail-
		      able on a	SMP-capable system.

     NODOC	      Set to a non-empty value to skip the doc/	tree checkout.
		      When set,	NODOC will prevent the doc.txz distribution
		      package from being created.

     NOPORTS	      Set to a non-empty value to skip the ports/ tree check-
		      out.  When set, NOPORTS will prevent the ports.txz dis-
		      tribution	package	from being created.  Setting this also
		      sets NODOC.

     WITH_DVD	      Set to a non-empty value to include the dvdrom target.

MAKEFILE TARGETS
     The release makefile (src/release/Makefile) is fairly abstruse.  Most
     developers	will only be concerned with the	release	and install targets.

     release	    Meta-target	to build all release media and distributions
		    applicable to this platform.

     install	    Copy all produced release media to ${DESTDIR}.

     cdrom	    Builds installation	CD-ROM images.	This may require the
		    md(4) (memory disk)	device driver be present in the	kernel
		    (either by being compiled in or available as a module).
		    This target	produces files called disc1.iso	and
		    bootonly.iso as its	output.

     dvdrom	    Builds installation	DVD-ROM	images.	 This may require the
		    md(4) (memory disk)	device driver be present in the	kernel
		    (either by being compiled in or available as a module).
		    This target	produces the dvd1.iso file as its output.

     memstick	    Builds an installation memory stick	image named
		    memstick.img.  Not applicable on all platforms.  Requires
		    that the md(4) (memory disk) device	driver be present in
		    the	kernel (either by being	compiled in or available as a
		    module).

     ftp	    Creates a directory	named ftp containing the distribution
		    files used in network installations	and suitable for
		    upload to an FTP mirror.

     Major subtargets called by	targets	above:

     packagesystem  Generates all the distribution archives (base, kernel,
		    ports, doc)	applicable on this platform.

     system	    Builds a bootable installation system containing all the
		    distribution files packaged	by the packagesystem target,
		    and	suitable for imaging by	the cdrom, dvdrom and memstick
		    targets.

     reldoc	    Builds the release documentation.  This includes the
		    release notes, hardware guide, and installation instruc-
		    tions.  Other documentation, such as the Handbook, is
		    built during the base.txz target invoked by	packagesystem.

ENVIRONMENT
     Optional variables:

     OSRELEASE	  Optional base	name for generated media images	(e.g.,
		  FreeBSD-9.0-RC2-amd64).  Defaults to the output of `uname
		  -s`-`uname -r`-`uname	-p` within the chroot.

     WORLDDIR	  Location of a	directory containing the src tree.  By
		  default, the directory above the one containing the makefile
		  (src).

     PORTSDIR	  Location of a	directory containing the ports tree.  By
		  default, /usr/ports.	If it is unset or cannot be found,
		  ports	will not be included in	the release.

     DOCDIR	  Location of a	directory containing the doc tree.  By
		  default, /usr/doc.  If it is unset or	cannot be found, most
		  documentation	will not be included in	the release; see NODOC
		  below.

     NOPORTS	  If defined, the Ports	Collection will	be omitted from	the
		  release.

     NOSRC	  If set, do not include system	source code in the release.

     NODOC	  If defined, the XML-based documentation from the FreeBSD
		  Documentation	Project	will not be built.  However, the
		  ``doc'' distribution will still be created with the minimal
		  documentation	set provided in	src/share/doc.

     TARGET	  The target hardware platform.	 This is analogous to the
		  ``uname -m'' output.	This is	necessary to cross-build some
		  target architectures.	 For example, cross-building for PC98
		  machines requires TARGET_ARCH=i386 and TARGET=pc98.  If not
		  set, TARGET defaults to the current hardware platform.

     TARGET_ARCH  The target machine processor architecture.  This is analo-
		  gous to the ``uname -p'' output.  Set	this to	cross-build
		  for a	different architecture.	 If not	set, TARGET_ARCH
		  defaults to the current machine architecture,	unless TARGET
		  is also set, in which	case it	defaults to the	appropriate
		  value	for that platform.  Typically, one only	needs to set
		  TARGET.

FILES
     /usr/doc/Makefile
     /usr/doc/share/mk/doc.project.mk
     /usr/ports/Mk/bsd.port.mk
     /usr/ports/Mk/bsd.sites.mk
     /usr/share/examples/etc/make.conf
     /usr/src/Makefile
     /usr/src/Makefile.inc1
     /usr/src/release/Makefile
     /usr/src/release/release.sh
     /usr/src/release/release.conf.sample

EXAMPLES
     The following sequence of commands	can be used to build a ``-CURRENT
     snapshot'':

	   cd /usr
	   svn co svn://svn.freebsd.org/base/head src
	   cd src
	   make	buildworld buildkernel
	   cd release
	   make	release
	   make	install	DESTDIR=/var/freebsd-snapshot

     After running these commands, all produced	distribution files (tarballs
     for FTP, CD-ROM images, etc.) are available in the	/var/freebsd-snapshot
     directory.

     The following sequence of commands	can be used to build a ``-CURRENT
     snapshot''	in a clean environment,	including ports	and documentation:

	   cd /usr/src/release
	   sh release.sh

     Optionally, a configuration file can be used customize the	release	build,
     such as the subversion revision to	use, the branch	of the subversion tree
     for src/, ports/, and doc/.

	   cd /usr/src/release
	   sh release.sh -c $HOME/release.conf

     After running these commands, all prepared	release	files are available in
     the /scratch directory.  The target directory can be changed by specify-
     ing the CHROOTDIR variable	in release.conf.

SEE ALSO
     cc(1), install(1),	make(1), svn(1)	(ports/devel/subversion), uname(1),
     md(4), make.conf(5), build(7), ports(7), chroot(8), mtree(8), sysctl(8)

     FreeBSD Release Engineering,
     http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/releng/.

     FreeBSD Release Engineering of Third Party	Packages,
     http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/releng-packages/.

     FreeBSD Developers' Handbook,
     http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/developers-handbook/.

HISTORY
     FreeBSD 1.x used a	manual checklist, compiled by Rod Grimes, to produce a
     release.  Apart from being	incomplete, the	list put a lot of specific
     demands on	available file systems and was quite torturous to execute.

     As	part of	the FreeBSD 2.0	release	engineering effort, significant	effort
     was spent getting src/release/Makefile into a shape where it could	at
     least automate most of the	tediousness of building	a release in a sterile
     environment.

     For the FreeBSD 9.0 release, src/release/Makefile was overhauled and the
     wrapper script src/release/generate-release.sh introduced to support the
     introduction of a new installer.

     For the FreeBSD 9.2 release, src/release/release.sh was introduced	to
     support per-build configuration files.  src/release/release.sh is heavily
     based on the src/release/generate-release.sh script.

     At	near 1000 revisions spread over	multiple branches, the svn(1) log of
     src/release/Makefile contains a vivid historical record of	some of	the
     hardships release engineers go through.

AUTHORS
     src/release/Makefile was originally written by Rod	Grimes,	Jordan
     Hubbard, and Poul-Henning Kamp.

     This manual page was originally written by	Murray Stokely
     <murray@FreeBSD.org>.

     It	was updated by Nathan Whitehorn	<nwhitehorn@FreeBSD.org> to include
     the generate-release.sh script used for the FreeBSD 9.0 release cycle.

     It	was later updated by Glen Barber <gjb@FreeBSD.org> to include the
     release.sh	script used for	the FreeBSD 9.2	release	cycle.

FreeBSD	9.2		       December	2, 2013			   FreeBSD 9.2

NAME | DESCRIPTION | CLEAN RELEASE GENERATION | MAKEFILE TARGETS | ENVIRONMENT | FILES | EXAMPLES | SEE ALSO | HISTORY | AUTHORS

Want to link to this manual page? Use this URL:
<http://www.freebsd.org/cgi/man.cgi?query=release&manpath=FreeBSD+10.0-RELEASE>

home | help