diff options
Diffstat (limited to 'share/man/man7/release.7')
-rw-r--r-- | share/man/man7/release.7 | 574 |
1 files changed, 574 insertions, 0 deletions
diff --git a/share/man/man7/release.7 b/share/man/man7/release.7 new file mode 100644 index 0000000..8e512c2 --- /dev/null +++ b/share/man/man7/release.7 @@ -0,0 +1,574 @@ +.\" 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. +.\" +.\" $FreeBSD$ +.\" +.Dd August 17, 2009 +.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 +CVS repository in +.Pa src/release . +A complete release can actually be built with only a single command, +including the creation of ISO images suitable for burning to CD-ROM, +installation floppies, and an FTP install directory. +This command is aptly named +.Dq Li "make release" . +.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. +The release build process requires that +.Pa /usr/obj +be populated with the output of +a native +.Dq Li "make buildworld" +compiled from sources matching the currently running kernel. +This is necessary so that the object files for a complete system can +be installed into a clean +.Xr chroot 8 +environment. +The release procedure also requires that the +.Xr md 4 +(memory disk) device driver be present in the kernel +(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 TARGETS +The release makefile +.Pq Pa src/release/Makefile +is fairly abstruse. +Most developers will only be concerned with the +.Cm release +target. +.\" XXX: Some sort of introduction to this list? All the others have one. +.Bl -tag -width ".Cm package-split" +.It Cm release +Uses +.Dq Li "make installworld" +to install a clean system into a +.Xr 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 +.Dq Li "make buildworld" . +The detailed steps that follow are then executed to package up the +different distributions, build the installation floppy disks, build +release documentation, and so on. +.Pp +This target must be built as root with the +.Va kern.securelevel +sysctl set to \-1 (the default). +.It Cm rerelease +Assumes that the output of a release build has been manually modified, +and performs the minimal number of steps to rebuild the release using +the intermediate output of the previous +.Dq Li "make release" . +.It Cm floppies +Generate a new set of boot and fixit floppies. +This will call the +.Cm release.4 , +.Cm release.8 , +.Cm floppies.1 , +.Cm floppies.2 , +and +.Cm floppies.3 +targets to re-generate the floppy images of a previous +.Dq Li "make release" . +This is most often used to build custom boot floppies. +.It Cm 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 +.Pa 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 +.Dq Li "make release" +via the +.Va CD_PACKAGE_TREE +variable to populate the ISO images built by the +.Cm iso.1 +target with the correct package related bits. +.El +.Pp +Targets called by +.Dq Li "make release" : +.Bl -tag -width ".Cm fetch-distfiles" +.It Cm release.1 +Cleans out the +.Pa ${CHROOTDIR}/R +directory and uses +.Xr mtree 8 +to build the directory hierarchy for the system. +.It Cm release.2 +Installs the system into the distribution directories. +.It Cm release.3 +Makes and installs the +.Pa GENERIC +kernel as well as any other kernels listed in +.Va KERNELS . +.It Cm release.4 +Uses +.Xr crunchgen 1 +to build +.Dq crunched +binaries to live on the installation floppies. +.It Cm release.5 +Builds synthetic distributions, and cleans up the previously built +distribution trees. +.It Cm release.6 +Creates tarballs of the assembled distribution trees. +.It Cm release.7 +Makes source distributions. +.It Cm release.8 +Creates the MFS root file systems. +.It Cm floppies.1 +Creates the boot and kernel floppies. +.It Cm floppies.2 +Creates the fixit floppy. +.It Cm floppies.3 +Finalizes the +.Pa ${CHROOTDIR}/R/ftp/stage/floppies +staging directory. +.It Cm ftp.1 +Sets up a suitable area for FTP installations in +.Pa ${CHROOTDIR}/R/ftp . +.It Cm cdrom.1 +Create the layout for the live file system CD-ROM image in +.Pa ${CHROOTDIR}/R/cdrom . +.It Cm cdrom.2 +Create the layout for the first and second CD-ROM images. +.It Cm cdrom.3 +Create the layout for the boot-only CD-ROM image and the boot-only UFS +miniroot image. +.It Cm iso.1 +Builds ISO images (installation and +.Dq live +file system) from the CD-ROM release area +(disabled by default, see +.Va MAKE_ISOS +below). +.It Cm fetch-distfiles +Fetches distfiles needed during the release build that are not already in +.Va RELEASEDISTFILES . +.It Cm doc.1 +Builds all of the necessary tools to turn the +.Fx +Documentation Project source documents (SGML, XML) into HTML +and text documents that will accompany the release. +Also, builds and installs the actual user documentation. +This includes the Handbook, FAQ, articles, and so on. +.It Cm doc.2 +Builds the release documentation. +This includes the release notes, +hardware guide, and installation instructions. +.El +.Sh ENVIRONMENT +Variables that must be specified: +.Bl -tag -width ".Va CHROOTDIR" +.It Va CHROOTDIR +The directory to be used as the +.Xr chroot 8 +environment for the entire release build. +.\" XXX: I recommend against hardcoding specific numbers like "2.3" here; +.\" XXX: perhaps it should be replaced with something to the effect of +.\" XXX: "we do not know how much space you'll need, but make sure you have +.\" XXX: at least 3 GB to be safe" (I know i'm still hardcoding a number, +.\" XXX: but at least it looks less like a decree and more like an estimate. +This file system should have at least 3.2 gigabytes of free space on the +i386 architecture. +.It Va CVSROOT +The location of the +.Fx +CVS repository. +This path name is in reference to the real system root, +.Em not +the root of the +.Xr chroot 8 +directory tree. +.El +.Pp +Optional variables: +.Bl -tag -width ".Va NO_PREFETCHDISTFILES" +.It Va BUILDNAME +The name of the release to be built. +This is used to set the +.Va RELEASE +value in +.Pa sys/conf/newvers.sh , +which affects the output of +.Xr uname 1 . +If not set, a name with the timestamp and the +.Dq Li -SNAP +suffix will be generated. +.It Va CD_PACKAGE_TREE +A directory containing extra bits for the first and second CD-ROM images. +The extra files for the first disc should be in +.Pa ${CD_PACKAGE_TREE}/disc1 +and the extra files for the second disc should be in +.Pa ${CD_PACKAGE_TREE}/disc2 . +Typically, this variable will be set to the output directory of an earlier +invocation of the +.Cm package-split +target. +.It Va CVSARGS +Additional arguments for +.Xr cvs 1 +that come before the subcommands such as +.Dq Li "-qR" . +.It Va CVSCMDARGS +Additional arguments for +.Xr cvs 1 +.Ic checkout +and +.Ic update +commands. +For example, setting this variable to +.Dq Li "-D '01/01/2002 00:00:00 GMT'" +for +.Dq Li "make release" +or +.Dq Li "make rerelease" +will ask +.Xr cvs 1 +to check out or update sources as of 00:00:00 GMT, January 1 2002, respectively. +.It Va DOC_LANG +The list of languages and encodings the SGML-based documentation +should be built for. +If not set, the documentation is built for all available languages. +.It Va DOCRELEASETAG +The CVS tag to use when checking out the documentation tree. +Usually, +the head of the documentation tree is used by default. +If +.Va RELEASETAG +specifies a release tag, +then the associated release version is used as the default instead. +.It Va EXTLOCALDIR +The directory that will be copied to +.Pa ${CHROOTDIR}/usr/local . +.It Va EXTSRCDIR +The directory specified by this variable will be copied into +.Pa ${CHROOTDIR}/usr/src +instead of that directory being populated by a CVS checkout. +For +.Dq Li "rerelease" , +this will NOT be copied; cvs update will be used instead. +.It Va EXTDOCDIR +The directory specified by this variable will be copied into +.Pa ${CHROOTDIR}/usr/doc . +For +.Dq Li "rerelease" , +this will NOT be copied again. +.It Va EXTPORTSDIR +The directory specified by this variable will be copied into +.Pa ${CHROOTDIR}/usr/ports . +For +.Dq Li "rerelease" , +this will do NOTHING. +.It Va KERNEL_FLAGS +The contents of this variable are passed to +.Xr make 1 +when building kernels during the release build. +For example, setting this variable to +.Dq Li "-j 4" +will instruct +.Xr make 1 +to execute up to four processes at a time. +.It Va KERNELS +Specifies a list of additional kernel configurations to compile and +install into the +.Dq base +distribution. +Each kernel is installed into +.Pa /boot/<config> +so that it can be booted from the loader via +.Dq Li "boot <config>" . +.It Va LOCAL_PATCHES +Patch files against +.Pa /usr/src +that will be applied in the +.Xr chroot 8 +environment before the release build begins. +.It Va PATCH_FLAGS +Arguments for the +.Xr patch 1 +command used to apply +.Va LOCAL_PATCHES +patch file. +.It Va LOCAL_SCRIPT +A script that will be run in the +.Xr chroot 8 +environment immediately after any local patches are applied. +.It Va MAKE_DVD +If defined, build a bootable ISO DVD image in the CD-ROM +stage directory. +This option may not be available for all architectures. +.It Va MAKE_ISOS +If defined, bootable ISO CD-ROM images will be created from the +contents of the CD-ROM stage directory. +.It Va NOCDROM +If defined, the CD-ROM stage directories will not be created. +.It Va NODOC +If defined, the SGML-based documentation from the +.Fx +Documentation Project will not be built. +However, the +.Dq doc +distribution will still be created with the minimal documentation set +provided in +.Pa src/share/doc . +.It Va NO_FLOPPIES +If defined, no boot and fixit floppy disk images will be created (for those +platforms supporting them). +.It Va NOPORTS +If defined, the Ports Collection will be omitted from the release. +.It Va PORTSRELEASETAG +The CVS tag to use when checking out the ports tree. +Usually, +the head of the ports tree is used by default. +If +.Va RELEASETAG +specifies a release tag, +then the associated release version is used as the default instead. +.It Va NO_PREFETCHDISTFILES +If this variable is defined, +then distfiles needed during the release build will not be downloaded prior to +entering the +.Xr chroot 8 +environment. +Note that if +.Va NO_PREFETCHDISTFILES +is not set, +the fetching is done after any distfiles are obtained via +.Va RELEASEDISTFILES . +.It Va RELEASEDISTFILES +The directory where the distribution files for ports required by the +release build can be found. +This may save a significant amount of time over downloading the +distfiles through a slow link. +.It Va RELEASENOUPDATE +If this variable is defined for +.Dq Li "make rerelease" , +the source code will not be updated with +.Dq Li "cvs update" . +.It Va RELEASETAG +The CVS tag corresponding to the release that is to be built. +If undefined, the release will be built from the +.Dv HEAD +of the CVS tree +(a +.Dq "-CURRENT snapshot" ) . +.It Va SEPARATE_LIVEFS +Store the live file system on its own CD-ROM image rather than placing it on +the first disc. +.It Va SVNCMDARGS +Additional arguments for svn +.Ic checkout +and +.Ic switch +commands. +.It Va SVNROOT +The location of the FreeBSD SVN source repository. +If this variable is set, +then the source tree will be extracted using Subversion rather than +CVS. +.It Va SVNBRANCH +The branch to check out from a SVN source repository. +It is specified as a path such as +.Pa head +or +.Pa stable/7 . +If this variable is not set, +then the branch that corresponds to the current value of +.Va RELEASETAG +will be used. +If neither +.Va SVNBRANCH +nor +.Va RELEASETAG +are set, +then the +.Pa head +branch will be used. +.It Va 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. +.It Va 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 PC98 machines requires +.Va TARGET_ARCH Ns = Ns Li i386 +and +.Va TARGET Ns = Ns Li pc98 . +.It Va WORLDDIR +The directory where +.Dq Li "make buildworld" +was run; defaults to +.Pa ${.CURDIR}/.. +which usually points to +.Pa /usr/src . +.It Va WORLD_FLAGS +The contents of this variable are passed to +.Xr make 1 +when building world during the release build. +For example, setting this variable to +.Dq Li "-j 4" +will instruct +.Xr make 1 +to execute up to four processes at a time. +.El +.Sh FILES +.Bl -tag -compact +.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/${arch}/boot_crunch.conf +.It Pa /usr/src/release/${arch}/fixit_crunch.conf +.El +.Sh EXAMPLES +The following sequence of commands was used to build the +.Fx 4.9 +release: +.Bd -literal -offset indent +cd /usr +cvs co -rRELENG_4_9_0_RELEASE src +cd src +make buildworld +cd release +make release CHROOTDIR=/local3/release BUILDNAME=4.9-RELEASE \\ + CVSROOT=/host/cvs/usr/home/ncvs RELEASETAG=RELENG_4_9_0_RELEASE +.Ed +.Pp +After running these commands, a complete system suitable for FTP or +CD-ROM distribution is available in the +.Pa /local3/release/R +directory. +.Pp +The following sequence of commands can be used to build a +.Dq "-CURRENT snapshot" +of a +locally modified source tree: +.Bd -literal -offset indent +cd /usr/src +cvs diff -u > /path/to/local.patch +make buildworld +cd release +make release CHROOTDIR=/local3/release BUILDNAME=6.0-CURRENT \\ + CVSROOT=/host/cvs/usr/home/ncvs LOCAL_PATCHES=/path/to/local.patch +.Ed +.Sh SEE ALSO +.Xr cc 1 , +.Xr crunchgen 1 , +.Xr cvs 1 , +.Xr install 1 , +.Xr make 1 , +.Xr patch 1 , +.Xr svn 1 Pq Pa ports/devel/subversion-freebsd , +.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 http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/releng/ +.Re +.Rs +.%T "FreeBSD Release Engineering of Third Party Packages" +.%U http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/releng-packages/ +.Re +.Rs +.%T "FreeBSD Developers' Handbook" +.%U http://www.FreeBSD.org/doc/en_US.ISO8859-1/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 +At near 1000 revisions spread over multiple branches, the +.Xr cvs 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 . +This manual page was written by +.An Murray Stokely Aq murray@FreeBSD.org . +.Sh BUGS +Infrastructure changes are occasionally made to the +.Fx +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 +.Fx . +For example: +.Pp +.Dl "make release RELEASETAG=RELENG_4_9 DOCRELEASETAG=RELEASE_4_9_0 ..." |