Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 Oct 2007 21:29:31 GMT
From:      John Birrell <jb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 127721 for review
Message-ID:  <200710182129.l9ILTVqG014446@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=127721

Change 127721 by jb@jb_freebsd1 on 2007/10/18 21:29:13

	A new release process which doesn't use a chroot. This is based on
	the assumption that the current buildworld process is not only
	good enough to update the running system, but good enough to 
	package as a release. The proviso here is that the host make options
	haven't been too drastically customised.
	
	The current release process is not re-entrant. To do the crunches,
	it breaks the buildworld that it does in the chroot.
	
	This process uses stage completion targets that aren't simply
	used to order the process, but to correctly identify that a stage
	has been completed, with dependencies on those things which would
	require the stage to be repeated.
	
	The goal here is two-fold -- firstly to reduce the time taken
	to build a release; and secondly to allow multiple targets for
	the release.
	
	The 'release' target is still there. That produces the installation,
	docs, live CDs and floppies if required. Alternatives to the
	'release' target allow builds like:
	
	make live_iso
	
	which will do all the the things required to build the live ISO on
	the host architecture.
	
	make TARGET=sun4v live_iso
	
	will do all the things to cross-build a live ISO for sun4v on a
	different host architecture.
	
	make universe
	
	will build releases for all architectures (except arm which doesn't
	have a GENERIC kernel).
	
	make UNIVERSE_TARGETS="amd64 i386 sun4v" universe
	
	will build releases for just those targets.
	
	
	If a release build fails, it can be restarted without having to
	start from scratch. It does the buildworld stage with NO_CLEAN
	set by default (unless WORLDCLEAN is defined on the command
	line). At the end of the buildworld, a completion file is touched
	to note the time of the last buildworld.
	
	There is a build tool called 'latest' which is used to touch
	a file in the object tree with the timestamp of the most recently
	modified file in the source tree. This allows the release
	process to decide that a new buildworld isn't required if the
	buildworld completion file is more recent than the one that 'latest'
	sets.
	
	This release process is extensible. Defining RELOPT=foo on the
	make command line will cause foo/Makefile.inc1 to be included
	if it exists and any targets in that file can be built. As an
	example, pcbsd/Makefile.inc1 might contain the release packaging
	for PC-BSD.
	
	make RELOPT=pcbsd pcbsd_iso disc1_iso
	
	will build the PC-BSD and FreeBSD install ISOs. They will share
	the common stages like buildworld, tarballs etc.

Affected files ...

.. //depot/projects/dtrace/src/newrelease/Makefile#1 add
.. //depot/projects/dtrace/src/newrelease/Makefile.distrib#1 add
.. //depot/projects/dtrace/src/newrelease/Makefile.inc1#1 add
.. //depot/projects/dtrace/src/newrelease/Makefile.subr#1 add
.. //depot/projects/dtrace/src/newrelease/bootonly/Makefile.inc1#1 add
.. //depot/projects/dtrace/src/newrelease/disc1/Makefile.inc1#1 add
.. //depot/projects/dtrace/src/newrelease/disc2/Makefile.inc1#1 add
.. //depot/projects/dtrace/src/newrelease/doc/Makefile.inc1#1 add
.. //depot/projects/dtrace/src/newrelease/fixitfd/Makefile.inc1#1 add
.. //depot/projects/dtrace/src/newrelease/floppies/Makefile.inc1#1 add
.. //depot/projects/dtrace/src/newrelease/ftp/Makefile.inc1#1 add
.. //depot/projects/dtrace/src/newrelease/live/Makefile.inc1#1 add

Differences ...



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200710182129.l9ILTVqG014446>