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>