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 necessary to build a release are available from the CVS reposito
ry in
src/release. 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''.
Before attempting to build a release, the user is expected
to be familiar
with the contents of build(7), and should have experience
upgrading systems from source. The release build process requires that
/usr/obj be
populated with the output of a native ``make buildworld''
compiled from
sources matching the currently running kernel. This is nec
essary so that
the object files for a complete system can be installed into
a clean
chroot(8) environment. The release procedure also requires
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.

TARGETS

The release makefile (src/release/Makefile) is fairly ab
struse. Most
developers will only be concerned with the release target.
release Uses ``make installworld'' to install a
clean system
into a chroot(8) environment on the file
system.
Checks out the specified version of the
source code
and then rebuilds the entire system in
the clean environment with ``make buildworld''. The
detailed steps
that follow are then executed to package
up the different distributions, build the installa
tion floppy
disks, build release documentation, and
so on.
This target must be built as root with
the
kern.securelevel sysctl set to -1 (the
default).
rerelease Assumes that the output of a release
build has been
manually modified, and performs the mini
mal number of
steps to rebuild the release using the
intermediate
output of the previous ``make release''.
floppies Generate a new set of boot and fixit
floppies. This
will call the release.4, release.8,
floppies.1,
floppies.2, and floppies.3 targets to re
generate the
floppy images of a previous ``make re
lease''. This is
most often used to build custom boot
floppies.
package-split Generates the portions of the disc 1 and
disc 2 images
related to packages. It uses the list of
desired
packages from the
src/release/scripts/package-split.py script to pull packages out of a package
build provided by the ports team and organize them
appropriately. The resulting directory can then
be passed to
``make release'' via the CD_PACKAGE_TREE
variable to
populate the ISO images built by the
iso.1 target with
the correct package related bits.
Targets called by ``make release'':
release.1 Cleans out the ${CHROOTDIR}/R directory
and uses
mtree(8) to build the directory hierar
chy for the
system.
release.2 Installs the system into the distribu
tion directo
ries.
release.3 Makes and installs the GENERIC kernel
as well as any
other kernels listed in KERNELS.
release.4 Uses crunchgen(1) to build ``crunched''
binaries to
live on the installation floppies.
release.5 Builds synthetic distributions, and
cleans up the
previously built distribution trees.
release.6 Creates tarballs of the assembled dis
tribution
trees.
release.7 Makes source distributions.
release.8 Creates the MFS root file systems.
floppies.1 Creates the boot and kernel floppies.
floppies.2 Creates the fixit floppy.
floppies.3 Finalizes the
${CHROOTDIR}/R/ftp/stage/floppies
staging directory.
ftp.1 Sets up a suitable area for FTP instal
lations in
${CHROOTDIR}/R/ftp.
cdrom.1 Create the layout for the live file
system CD-ROM
image in ${CHROOTDIR}/R/cdrom.
cdrom.2 Create the layout for the first and
second CD-ROM
images.
cdrom.3 Create the layout for the boot-only CD
ROM image and
the boot-only UFS miniroot image.
iso.1 Builds ISO images (installation and
``live'' file
system) from the CD-ROM release area
(disabled by
default, see MAKE_ISOS below).
fetch-distfiles Fetches distfiles needed during the re
lease build
that are not already in
RELEASEDISTFILES.
doc.1 Builds all of the necessary tools to
turn the
FreeBSD Documentation Project source
documents
(SGML, XML) into HTML and text docu
ments that will
accompany the release. Also, builds
and installs
the actual user documentation. This
includes the
Handbook, FAQ, articles, and so on.
doc.2 Builds the release documentation. This
includes the
release notes, hardware guide, and in
stallation
instructions.

ENVIRONMENT

Variables that must be specified:

BUILDNAME The name of the release to be built. This is
used to set
the RELEASE value in sys/conf/newvers.sh,
which affects
the output of uname(1).
CHROOTDIR The directory to be used as the chroot(8) en
vironment for
the entire release build. This file system
should have at
least 3.2 gigabytes of free space on the i386
architecture.
CVSROOT The location of the FreeBSD CVS repository.
This path
name is in reference to the real system root,
not the root
of the chroot(8) directory tree.
Optional variables:
CD_PACKAGE_TREE A directory containing extra bits
for the first
and second CD-ROM images. The ex
tra files for
the first disc should be in
${CD_PACKAGE_TREE}/disc1 and the
extra files
for the second disc should be in
${CD_PACKAGE_TREE}/disc2. Typi
cally, this
variable will be set to the output
directory of
an earlier invocation of the
package-split target.
CVSARGS Additional arguments for cvs(1)
that come
before the subcommands such as
``-qR''.
CVSCMDARGS Additional arguments for cvs(1)
checkout and
update commands. For example,
setting this
variable to ``-D '01/01/2002
00:00:00 GMT'''
for ``make release'' or ``make
rerelease'' will
ask cvs(1) to check out or update
sources as of
00:00:00 GMT, January 1 2002, re
spectively.
DOC_LANG The list of languages and encod
ings the SGML
based documentation should be
built for. If
not set, the documentation is
built for all
available languages.
DOCRELEASETAG The CVS tag to use when checking
out the docu
mentation tree. Usually, the head
of the documentation tree is used by default.
If
RELEASETAG specifies a release
tag, then the
associated release version is used
as the
default instead.
EXTLOCALDIR The directory that will be copied
to
${CHROOTDIR}/usr/local.
EXTSRCDIR The directory specified by this
variable will
be copied into
${CHROOTDIR}/usr/src instead of
that directory being populated by
a CVS checkout. For ``rerelease'', this will
NOT be
copied; cvs update will be used
instead.
EXTDOCDIR The directory specified by this
variable will
be copied into
${CHROOTDIR}/usr/doc. For
``rerelease'', this will NOT be
copied; cvs
update will be used instead.
EXTPORTSDIR The directory specified by this
variable will
be copied into
${CHROOTDIR}/usr/ports. For
``rerelease'', this will do NOTH
ING.
KERNEL_FLAGS The contents of this variable are
passed to
make(1) when building kernels dur
ing the
release build. For example, set
ting this variable to ``-j 4'' will instruct
make(1) to execute up to four processes at a
time.
KERNELS Specifies a list of additional
kernel configu
rations to compile and install in
to the
``base'' distribution. Each ker
nel is
installed into /boot/<config> so
that it can be
booted from the loader via ``boot
<config>''.
LOCAL_PATCHES Patch files against /usr/src that
will be
applied in the chroot(8) environ
ment before the
release build begins.
PATCH_FLAGS Arguments for the patch(1) command
used to
apply LOCAL_PATCHES patch file.
LOCAL_SCRIPT A script that will be run in the
chroot(8)
environment immediately after any
local patches
are applied.
MAKE_ISOS If defined, bootable ISO CD-ROM
images will be
created from the contents of the
CD-ROM stage
directory.
NOCDROM If defined, the CD-ROM stage di
rectories will
not be created.
NODOC If defined, the SGML-based docu
mentation from
the FreeBSD Documentation Project
will not be
built. However, the ``doc'' dis
tribution will
still be created with the minimal
documentation
set provided in src/share/doc.
NO_FLOPPIES If defined, no boot and fixit
floppy disk
images will be created (for those
platforms
supporting them).
NOPORTS If defined, the Ports Collection
will be omit
ted from the release.
PORTSRELEASETAG The CVS tag to use when checking
out the ports
tree. Usually, the head of the
ports tree is
used by default. If RELEASETAG
specifies a
release tag, then the associated
release version is used as the default in
stead.
NO_PREFETCHDISTFILES If this variable is defined, then
distfiles
needed during the release build
will not be
downloaded prior to entering the
chroot(8)
environment. Note that if
NO_PREFETCHDISTFILES
is not set, the fetching is done
after any distfiles are obtained via
RELEASEDISTFILES.
RELEASEDISTFILES The directory where the distribu
tion files for
ports required by the release
build can be
found. This may save a signifi
cant amount of
time over downloading the dist
files through a
slow link.
RELEASENOUPDATE If this variable is defined for
``make
rerelease'', the source code will
not be
updated with ``cvs update''.
RELEASETAG The CVS tag corresponding to the
release that
is to be built. If undefined, the
release will
be built from the HEAD of the CVS
tree (a
``-CURRENT snapshot'').
SEPARATE_LIVEFS Store the live file system on its
own CD-ROM
image rather than placing it on
the first disc.
TARGET_ARCH The target machine processor ar
chitecture.
This is analogous to the ``uname
-p'' output.
Set this to cross-build for a dif
ferent architecture.
TARGET The target hardware platform.
This is analo
gous to the ``uname -m'' output.
This is necessary to cross-build some target
architectures. For example, cross-build
ing for PC98
machines requires TARGET_ARCH=i386
and
TARGET=pc98.
WORLDDIR The directory where ``make build
world'' was
run; defaults to ${.CURDIR}/..
which usually
points to /usr/src.
WORLD_FLAGS The contents of this variable are
passed to
make(1) when building world during
the release
build. For example, setting this
variable to
``-j 4'' will instruct make(1) to
execute up to
four processes at a time.

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/${arch}/boot_crunch.conf
/usr/src/release/${arch}/fixit_crunch.conf

EXAMPLES

The following sequence of commands was used to build the
FreeBSD 4.9
release:

cd /usr
cvs co -rRELENG_4_9_0_RELEASE src
cd src
make buildworld
cd release
make release CHROOTDIR=/local3/release BUILD
NAME=4.9-RELEASE CVSROOT=/host/cvs/usr/home/ncvs RE
LEASETAG=RELENG_4_9_0_RELEASE
After running these commands, a complete system suitable for
FTP or CDROM distribution is available in the /local3/release/R di
rectory.
The following sequence of commands can be used to build a
``-CURRENT
snapshot'' of a locally modified source tree:

cd /usr/src
cvs diff -u > /path/to/local.patch
make buildworld
cd release
make release CHROOTDIR=/local3/release BUILD
NAME=6.0-CURRENT CVSROOT=/host/cvs/usr/home/ncvs LO
CAL_PATCHES=/path/to/local.patch

SEE ALSO

cc(1), crunchgen(1), cvs(1), install(1), make(1), patch(1),
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, sig
nificant 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.
With its almost 1000 revisions spread over multiple branch
es, the cvs(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 writ
ten by Murray
Stokely <murray@FreeBSD.org>.

BUGS

Infrastructure changes are occasionally made to the FreeBSD
documentation
set in such a way that release builds on security branches
can fail. To
work around this, release builds can be made to checkout the
documentation from the last fully supported release of FreeBSD. For
example:

make release RELEASETAG=RELENG_4_9 DOCRELEASETAG=RE
LEASE_4_9_0 ...
BSD May 17, 2005
Copyright © 2010-2024 Platon Technologies, s.r.o.           Home | Man pages | tLDP | Documents | Utilities | About
Design by styleshout