summaryrefslogtreecommitdiff
path: root/static/freebsd/man7/release.7
diff options
context:
space:
mode:
Diffstat (limited to 'static/freebsd/man7/release.7')
-rw-r--r--static/freebsd/man7/release.7806
1 files changed, 806 insertions, 0 deletions
diff --git a/static/freebsd/man7/release.7 b/static/freebsd/man7/release.7
new file mode 100644
index 00000000..3309b7ed
--- /dev/null
+++ b/static/freebsd/man7/release.7
@@ -0,0 +1,806 @@
+.\"
+.\" SPDX-License-Identifier: BSD-2-Clause
+.\"
+.\" Copyright (c) 2002 Murray Stokely <murray@FreeBSD.org>
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.Dd October 13, 2025
+.Dt RELEASE 7
+.Os
+.Sh NAME
+.Nm release
+.Nd "release building infrastructure"
+.Sh DESCRIPTION
+.Fx
+provides a complete build environment suitable for users to make
+full releases of the
+.Fx
+operating system.
+All of the tools necessary to build a release are available from the
+.Fx
+source code repository in
+.Pa src/release .
+A complete release can be built with only a single command,
+including the creation of ISO images suitable for burning to CD-ROM,
+memory stick images, and a network install directory.
+This command is aptly named
+.Dq Li "make release" .
+.Pp
+For some users, it may be desirable to provide an absolutely clean
+build environment, with no local modifications to the source tree or to
+.Xr make.conf 5 ,
+and with clean checkouts of specific versions of the doc, src, and ports
+trees.
+For this purpose, a script
+.Pq Pa src/release/release.sh
+is provided to automate these checkouts and then execute
+.Dq Li "make release"
+in a clean
+.Xr chroot 8 .
+.Pp
+Before attempting to build a release, the user is expected to be
+familiar with the contents of
+.Xr build 7 ,
+and should have experience upgrading systems from source.
+.Pp
+The release build process requires that
+.Pa /usr/obj
+be populated with the output of
+.Dq Li "make buildworld"
+and
+.Dq Li "make buildkernel" .
+This is necessary to provide the object files for the release or, when
+using
+.Pa release.sh ,
+so that the object files for a complete system can be installed into a clean
+.Xr chroot 8
+environment.
+.Pp
+If the target release build is for a different architecture or machine type,
+the
+.Va TARGET
+and
+.Va TARGET_ARCH
+variables must be used.
+See the supported
+.Fa release.conf
+variables for more information.
+.Pp
+The release procedure on some architectures may also require that the
+.Xr md 4
+(memory disk) device driver be present in the kernel
+.Pq either by being compiled in or available as a module .
+.Pp
+This document does not cover source code management, quality
+assurance, or other aspects of the release engineering process.
+.Sh CLEAN RELEASE GENERATION
+Official releases of
+.Fx
+are produced in a clean environment to
+ensure consistency between the versions of the src, ports, and doc trees
+and to avoid contamination from the host system
+.Po such as local patches, changes
+to
+.Xr make.conf 5 ,
+etc.
+.Pc .
+This is accomplished using the wrapper script
+.Pa src/release/release.sh .
+.Pp
+.Ic release.sh
+.Op Fl c Ar release.conf
+.Pp
+.Ic release.sh
+checks out the
+.Li src/ ,
+.Li ports/ ,
+and
+.Li doc/
+trees to
+.Va CHROOTDIR ,
+then calls
+.Dq Li "make buildworld"
+and
+.Dq Li "make installworld"
+to generate a
+.Xr chroot 8
+environment.
+Next,
+.Dq Li "make release"
+is run within the
+.Xr chroot 8
+environment and places the result in
+.Pa $CHROOTDIR/R .
+.Pp
+The optional
+.Fa release.conf
+configuration file supports the following variables:
+.Bl -tag -width Ev
+.It Va CHROOTDIR
+The directory within which the release will be built.
+Defaults to
+.Pa /scratch .
+.It Va CHROOT_MAKEENV
+Additional
+.Xr make 1
+arguments to pass through, which directly affect the
+tuning of the build chroot.
+.It Va NOGIT
+Do not explicitly require the
+.Xr git 1
+port to be installed.
+.It Va GITROOT
+The
+.Xr git 1
+host used to check out the various trees.
+Defaults to
+.Pa https://git.FreeBSD.org .
+.It Va SRCBRANCH
+The
+.Li src/
+branch to use.
+Defaults to
+.Fl b Va main .
+.It Va PORTBRANCH
+The
+.Li ports/
+branch to use.
+Defaults to
+.Va head/@rHEAD .
+.It Va TARGET
+The target machine type for cross-building a release.
+.It Va TARGET_ARCH
+The target machine architecture for cross-building a release.
+.Pp
+For the supported list of
+.Va TARGET
+and
+.Va TARGET_ARCH
+combinations, consult the output of
+.Dq make targets
+as documented in
+.Xr build 7 .
+.It Va KERNEL
+The target kernel configuration to use.
+Defaults to
+.Va GENERIC .
+Multiple
+.Va KERNEL
+entries may be specified.
+.It Va MAKE_CONF
+The
+.Xr make.conf 5
+to use for the release build.
+Defaults to
+.Fa /dev/null
+to prevent polluting the release with local system changes.
+.It Va SRC_CONF
+The
+.Xr src.conf 5
+to use for the release build.
+Defaults to
+.Fa /dev/null
+to prevent polluting the release with local system changes.
+.It Va MAKE_FLAGS
+Additional flags to pass to
+.Xr make 1 .
+.It Va WORLD_FLAGS
+Additional flags to pass to
+.Xr make 1
+during the
+.Dq buildworld
+phase.
+Defaults to setting the number of
+.Xr make 1
+jobs
+.Pq Ar -j
+to the number of CPUs available on a SMP-capable system.
+.It Va KERNEL_FLAGS
+Additional flags to pass to
+.Xr make 1
+during the
+.Dq buildkernel
+phase.
+Defaults to setting the number of
+.Xr make 1
+jobs
+.Pq Ar -j
+to half the number of CPUs available on a SMP-capable system.
+.It Va NOPORTS
+Set to a non-empty value to skip the
+.Li ports/
+tree checkout.
+When set,
+.Va NOPORTS
+will prevent the
+.Fa ports.txz
+distribution package from being created.
+.It Va WITH_DVD
+Set to a non-empty value to include the
+.Cm dvdrom
+target.
+.It Va WITH_COMPRESSED_IMAGES
+Set to a non-empty value to compress the release images with
+.Xr xz 1 .
+The original
+.Pq uncompressed
+images are not removed.
+.It Va XZ_THREADS Pq Vt int
+Set to the number of threads
+.Xr xz 1
+should use when compressing images.
+By default,
+.Va XZ_THREADS
+is set to
+.Va 0 ,
+which uses all available cores on the system.
+.It Va VCSCMD
+The command run to obtain the source trees.
+Defaults to
+.Qq Cm git clone Fl q .
+.It Va CHROOTBUILD_SKIP
+If defined, the
+.Li buildworld ,
+.Li installworld ,
+and
+.Li distribution
+stages of the
+.Xr chroot 8
+build environment setup are skipped.
+This is intended solely for cases where the
+.Xr chroot 8
+userland are provided by alternate means.
+.It Va SRC_UPDATE_SKIP
+Set to a non-empty value to prevent checkout or update of
+.Fa /usr/src
+within the
+.Xr chroot 8 .
+This is intended for use only when
+.Fa /usr/src
+is expected to exist by alternative means.
+.It Va PORTS_UPDATE_SKIP
+Set to a non-empty value to prevent checkout or update of
+.Fa /usr/ports
+within the
+.Xr chroot 8 .
+This is intended for use only when
+.Fa /usr/ports
+is expected to exist by alternative means.
+.It Va NOPKGBASE
+Include legacy tarball distribution sets for use on the install media,
+instead of base system packages.
+.It Va PKG_CMD
+A path to the
+.Xr pkg 8
+executable to use when installing packages in release images as a non-root user.
+.It Va PKG_REPOS_DIR
+An optional path to a directory containing
+.Xr pkg 8
+repository configuration files.
+These configuration files will be used when installing packages in release
+images as a non-root user.
+.It Va PKG_REPO_NAME
+The name of the repository configuration to use when installing packages in
+release images as a non-root user.
+.El
+.Sh EMBEDDED BUILDS
+The following
+.Fa release.conf
+variables are relevant only to release builds for embedded systems:
+.Bl -tag -width Ev
+.It Va EMBEDDEDBUILD
+Set to a non-null value to enable functionality for embedded device
+release builds.
+.Pp
+When set,
+.Va WITH_DVD
+is unset.
+Additionally,
+.Va EMBEDDED_TARGET
+and
+.Va EMBEDDED_TARGET_ARCH
+must also be defined.
+When the build environment is created,
+.Fa release.sh
+runs a separate build script located in an architecture-specific
+directory in
+.Pa src/release/${EMBEDDED_TARGET}/ .
+.It Va EMBEDDEDPORTS
+Set to the list of any ports that are required for the target device
+in the format of
+.Fa category/port .
+.It Va EMBEDDED_TARGET
+When set, its value is passed to
+.Xr make 1
+to set the
+.Va TARGET
+.Pq value of Cm uname Fl m
+to cross build the target userland.
+.It Va EMBEDDED_TARGET_ARCH
+When set, its value is passed to
+.Xr make 1
+to set the
+.Va TARGET_ARCH
+.Pq value of Cm uname Fl p
+to cross build the target userland.
+.El
+.Sh VIRTUAL MACHINE DISK IMAGES
+The following
+.Fa release.conf
+variables are relevant only to virtual machine disk image builds:
+.Bl -tag -width Ev
+.It Va WITH_VMIMAGES
+Set to a non-null value to build virtual machine disk images as part
+of the release build.
+.Va WITH_VMIMAGES
+may also be specified as an environment variable passed to
+.Xr make 1 .
+.It Va WITH_COMPRESSED_VMIMAGES
+Set to a non-null value to compress the virtual machine disk images with
+.Xr xz 1
+as part of the
+.Cm install
+.Xr make 1
+target.
+Note that compressing virtual machine disk images may take a very long
+time on some systems.
+.It Va VMBASE
+Set to change the name of the resulting virtual machine disk image file.
+The default value is
+.Va vm .
+.It Va VMSIZE
+Set to change the size of the virtual machine disk capacity.
+The default value is
+.Va 20g .
+See
+.Xr makefs 8
+for valid values.
+.Pp
+Virtual machine disk images are, by default, created as sparse images.
+When
+.Va WITH_COMPRESSED_VMIMAGES
+is used, the resulting files compressed with
+.Xr xz 1
+compress to roughly the same size, regardless of the specified disk image
+size.
+.It Va VMFS
+(Deprecated.)
+Set to specify which of the filesystem(s) listed in
+.Va VMFSLIST
+is linked to the historical non-filesystem-labelled file name.
+Valid values are
+.Va ufs
+and
+.Va zfs .
+The default value is
+.Va ufs .
+.It Va VMFSLIST
+Set to specify the list of file system types to build images for.
+Valid values are one or both of
+.Va ufs
+and
+.Va zfs .
+The default value is
+.Va ufs zfs .
+.It Va VMFORMATS
+Set to the target virtual disk image format(s) to create.
+By default, the
+.Va vhdf , Va vmdk , Va qcow2 ,
+and
+.Va raw
+formats are created.
+See
+.Xr mkimg 1
+for valid format values.
+.El
+.Pp
+For a list of supported
+.Va VMFORMATS
+values
+.Pq including cloud hosting provider formats
+along with a brief description, run:
+.Bd -literal -offset indent
+cd /usr/src
+make -C release list-vmtargets
+.Ed
+.Sh CLOUD HOSTING MACHINE IMAGES
+The
+.Fx
+release build tools support building virtual machine images for various
+cloud hosting providers, each with their own specific configuration to
+include support for each hosting provider by default.
+.Pp
+The following
+.Xr make 1
+environment variables are supported:
+.Bl -tag -width Ev
+.It Va CLOUDWARE
+Set to a list of one or more cloud hosting providers, enclosed in quotes.
+Requires
+.Va WITH_CLOUDWARE
+to also be set.
+.It Va WITH_CLOUDWARE
+Set to a non-empty value to enable building virtual machine images
+for various cloud hosting providers.
+Requires
+.Va CLOUDWARE
+to also be set.
+.El
+.Pp
+Additionally, the
+.Va CLOUDWARE
+and
+.Va WITH_CLOUDWARE
+variables can be added to
+.Pa release.conf ,
+and used in conjunction with
+.Pa release.sh .
+.Pp
+For a list of supported
+.Va CLOUDWARE
+values, run:
+.Bd -literal -offset indent
+cd /usr/src
+make -C release list-cloudware
+.Ed
+.Sh OCI IMAGES
+The
+.Fx
+release build tools have experimental support for building
+Open Container Initiative (OCI) format container base images.
+This is enabled using a
+.Fa release.conf
+variable:
+.Bl -tag -width Ev
+.It Va WITH_OCIIMAGES
+Set to a non-null value to build OCI base images.
+.El
+.Sh MAKEFILE TARGETS
+The release makefile
+.Pq Pa src/release/Makefile
+is fairly abstruse.
+Most developers will only be concerned with the
+.Cm release
+and
+.Cm install
+targets.
+.\" XXX: Some sort of introduction to this list? All the others have one.
+.Bl -tag -width ".Cm packagesystem"
+.It Cm release
+Meta-target to build all release media and distributions applicable to this
+platform.
+.It Cm install
+Copy all produced release media to
+.Pa ${DESTDIR} .
+.It Cm cdrom
+Builds installation CD-ROM images.
+This may require the
+.Xr 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
+.Pa disc1.iso
+and
+.Pa bootonly.iso
+as its output.
+.It Cm dvdrom
+Builds installation DVD-ROM images.
+This may require the
+.Xr 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
+.Pa dvd1.iso
+file as its output.
+.It Cm memstick
+Builds an installation memory stick image named
+.Pa memstick.img .
+Not applicable on all platforms.
+Requires that the
+.Xr md 4
+.Pq memory disk
+device driver be present in the kernel
+.Pq either by being compiled in or available as a module .
+.It Cm mini-memstick
+Similar to
+.Cm memstick ,
+with the exception that the installation distribution sets
+are not included.
+.It Cm ftp
+Creates a directory named
+.Pa ftp
+containing the distribution files used in network installations
+and suitable for upload to an FTP mirror.
+.It Cm vm-image
+Creates virtual machine disk images in various formats.
+The
+.Cm vm-image
+target requires the
+.Va WITH_VMIMAGES
+.Xr make 1
+environment variable to be set to a non-null value.
+.It Cm vm-cloudware
+Builds
+.Fx
+virtual machine images for various cloud hosting providers.
+See
+.Qq CLOUD HOSTING MACHINE IMAGES
+for implementation details.
+.It Cm list-cloudware
+Displays the list of valid
+.Va CLOUDWARE
+values.
+.It Cm list-vmtargets
+Displays the list of valid
+.Va VMFORMATS
+and
+.Va CLOUDWARE
+values.
+.El
+.Pp
+Major subtargets called by targets above:
+.Bl -tag -width ".Cm packagesystem"
+.It Cm packagesystem
+Generates all the distribution archives
+.Pq base, kernel, ports, doc
+applicable on this platform.
+.It Cm disc1
+Builds a bootable installation system containing all the distribution files
+packaged by the
+.Cm packagesystem
+target, and suitable for imaging by the
+.Cm cdrom ,
+.Cm dvdrom
+and
+.Cm memstick
+targets.
+.It Cm reldoc
+Builds the release documentation.
+This includes the release notes,
+hardware guide, and installation instructions.
+Other documentation, such as the Handbook,
+is built during the
+.Cm base.txz
+target invoked by
+.Cm packagesystem .
+.El
+.Sh ENVIRONMENT
+Optional variables:
+.Bl -tag -width ".Ev TARGET_ARCH"
+.It Ev OSRELEASE
+Optional base name for generated media images when invoking the
+.Cm install
+target
+.Pq e.g., FreeBSD-12.1-RELEASE-amd64 .
+Defaults to the output of
+.Ic `uname -s`-`uname -r`-`uname -p`
+within the chroot.
+.It Ev WORLDDIR
+Location of a directory containing the src tree.
+By default, the directory
+above the one containing the makefile
+.Pq Pa src .
+.It Ev PORTSDIR
+Location of a directory containing the ports tree.
+By default,
+.Pa /usr/ports .
+If it is unset or cannot be found, ports will not be included in the release.
+.It Ev NOPORTS
+If defined, the Ports Collection will be omitted from the release.
+.It Ev NOSRC
+If set, do not include system source code in the release.
+.It Ev TARGET
+The target hardware platform.
+This is analogous to the
+.Dq Nm uname Fl m
+output.
+This is necessary to cross-build some target architectures.
+For example, cross-building for ARM64 machines requires
+.Ev TARGET_ARCH Ns = Ns Li aarch64
+and
+.Ev TARGET Ns = Ns Li arm64 .
+If not set,
+.Ev TARGET
+defaults to the current hardware platform.
+.It Ev TARGET_ARCH
+The target machine processor architecture.
+This is analogous to the
+.Dq Nm uname Fl p
+output.
+Set this to cross-build for a different architecture.
+If not set,
+.Ev TARGET_ARCH
+defaults to the current machine architecture, unless
+.Ev TARGET
+is also set, in which case it defaults to the appropriate
+value for that platform.
+Typically, one only needs to set
+.Ev TARGET .
+.El
+.Sh FILES
+.Bl -tag -compact -width Pa
+.It Pa /scratch
+.It Pa /usr/doc/Makefile
+.It Pa /usr/doc/share/mk/doc.project.mk
+.It Pa /usr/ports/Mk/bsd.port.mk
+.It Pa /usr/ports/Mk/bsd.sites.mk
+.It Pa /usr/share/examples/etc/make.conf
+.It Pa /usr/src/Makefile
+.It Pa /usr/src/Makefile.inc1
+.It Pa /usr/src/release/Makefile
+.It Pa /usr/src/release/Makefile.vm
+.It Pa /usr/src/release/release.sh
+.It Pa /usr/src/release/release.conf.sample
+.It Pa /usr/src/release/tools/*.conf
+.It Pa /usr/src/release/tools/vmimage.subr
+.El
+.Sh EXAMPLES
+The following sequence of commands can be used to build a
+.Dq "-CURRENT snapshot":
+.Bd -literal -offset indent
+cd /usr
+git clone -b main https://git.freebsd.org/src.git src
+cd src
+make buildworld buildkernel
+cd release
+make obj
+make release
+make install DESTDIR=/var/freebsd-snapshot
+.Ed
+.Pp
+After running these commands, all produced distribution files (tarballs
+for FTP, CD-ROM images, etc.) are available in the
+.Pa /var/freebsd-snapshot
+directory.
+.Pp
+The following sequence of commands can be used to build a
+.Dq "-CURRENT snapshot"
+in a clean environment, including ports and documentation:
+.Bd -literal -offset indent
+cd /usr/src/release
+sh release.sh
+.Ed
+.Pp
+Optionally, a configuration file can be used to customize the release build:
+.Bd -literal -offset indent
+cd /usr/src/release
+sh release.sh -c $HOME/release.conf
+.Ed
+.Pp
+Configuration files specific to various supported embedded systems, such as
+the Raspberry Pi, exist in the directory corresponding to the
+.Va TARGET
+.Xr make 1
+variable.
+For example, to build an image for 64-bit Raspberry Pis:
+.Bd -literal -offset indent
+cd /usr/src/release
+sh release.sh -c arm64/RPI.conf
+.Ed
+.Pp
+After running these commands, all prepared release files are available in the
+.Pa /scratch
+directory.
+The target directory can be changed by specifying the
+.Va CHROOTDIR
+variable in
+.Li release.conf .
+.Sh COMPATIBILITY
+The reldoc target was removed in commit f61e92ca5a23, and
+.Ev DOCDIR ,
+.Ev DOCBRANCH ,
+.Ev DOC_UPDATE_SKIP ,
+and
+.Ev NODOC
+are therefore no longer supported.
+.Sh SEE ALSO
+.Xr cc 1 ,
+.Xr git 1 Pq Pa ports/devel/git ,
+.Xr install 1 ,
+.Xr make 1 ,
+.Xr mkimg 1 ,
+.Xr uname 1 ,
+.Xr md 4 ,
+.Xr make.conf 5 ,
+.Xr build 7 ,
+.Xr ports 7 ,
+.Xr chroot 8 ,
+.Xr mtree 8 ,
+.Xr sysctl 8
+.Rs
+.%T "FreeBSD Release Engineering"
+.%U https://docs.freebsd.org/en/articles/freebsd-releng/
+.Re
+.Rs
+.%T "FreeBSD Developers' Handbook"
+.%U https://docs.freebsd.org/en/books/developers-handbook/
+.Re
+.Sh HISTORY
+.Fx
+1.x
+used a manual checklist, compiled by
+.An 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.
+.Pp
+As part of the
+.Fx 2.0
+release engineering effort, significant
+effort was spent getting
+.Pa src/release/Makefile
+into a shape where it could at least automate most of the tediousness
+of building a release in a sterile environment.
+.Pp
+For the
+.Fx 9.0
+release,
+.Pa src/release/Makefile
+was overhauled and the wrapper script
+.Pa src/release/generate-release.sh
+introduced to support the introduction of a new installer.
+.Pp
+For the
+.Fx 9.2
+release,
+.Pa src/release/release.sh
+was introduced to support per-build configuration files.
+.Pa src/release/release.sh
+is heavily based on the
+.Pa src/release/generate-release.sh
+script.
+.Pp
+At near 1000 revisions spread over multiple branches, the
+.Xr git 1
+log of
+.Pa src/release/Makefile
+contains a vivid historical record of some
+of the hardships release engineers go through.
+.Sh AUTHORS
+.Pa src/release/Makefile
+was originally written by
+.An -nosplit
+.An Rod Grimes ,
+.An Jordan Hubbard ,
+and
+.An Poul-Henning Kamp .
+.Pp
+This manual page was originally written by
+.An Murray Stokely Aq Mt murray@FreeBSD.org .
+.Pp
+It was updated by
+.An Nathan Whitehorn Aq Mt nwhitehorn@FreeBSD.org
+to include the
+.Fa generate-release.sh
+script used for the
+.Fx 9.0
+release cycle.
+.Pp
+It was later updated by
+.An Glen Barber Aq Mt gjb@FreeBSD.org
+to include the
+.Fa release.sh
+script used for the
+.Fx 9.2
+release cycle.