Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 12 Jun 2013 13:15:28 +0000 (UTC)
From:      Glen Barber <gjb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r251652 - head/release
Message-ID:  <201306121315.r5CDFS7r001048@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: gjb
Date: Wed Jun 12 13:15:28 2013
New Revision: 251652
URL: http://svnweb.freebsd.org/changeset/base/251652

Log:
  Add new script to run release builds.  The script is heavily based upon
  the release/generate-release.sh script by nwhitehorn.
  
  This script can use optional configuration file to override defaults,
  making running multiple serialzied builds with different specific
  configurations or architecture-specific tunings quite easy.
  
  Sample overrideable options are included in the release.conf.sample
  file.
  
  Approved by:	kib (mentor)
  MFC After:	2 weeks
  X-MFC-To:	stable/9 only

Added:
  head/release/release.conf.sample   (contents, props changed)
  head/release/release.sh   (contents, props changed)

Added: head/release/release.conf.sample
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/release/release.conf.sample	Wed Jun 12 13:15:28 2013	(r251652)
@@ -0,0 +1,41 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+## Set the directory within which the release will be built.
+CHROOTDIR="/scratch"
+
+## Set the svn host.
+SVNROOT="svn://svn.FreeBSD.org"
+
+## Set the src/, ports/, and doc/ branches or tags.
+SRCBRANCH="base/head"
+DOCBRANCH="doc/head"
+PORTBRANCH="ports/head"
+
+## Set the src/, ports/, and doc/ revisions.
+SRCREVISION="-rHEAD"
+DOCREVISION="-rHEAD"
+PORTREVISION="-rHEAD"
+
+## Set to override the default target architecture.
+#TARGET="amd64"
+#TARGET_ARCH="amd64"
+#KERNEL="GENERIC"
+
+## Set to specify a custom make.conf and/or src.conf
+#MAKE_CONF="/etc/local/make.conf"
+#SRC_CONF="/etc/local/src.conf"
+
+## Set to use make(1) flags.
+#MAKE_FLAGS="-s"
+
+## Set to use world- and kernel-specific make(1) flags.
+#WORLD_FLAGS="-j $(sysctl -n hw.ncpu)"
+#KERNEL_FLAGS="-j $(expr $(sysctl -n hw.ncpu) / 2)"
+
+## Set miscellaneous 'make release' settings.
+#NODOC=
+#NOPORTS=
+#RELSTRING=

Added: head/release/release.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/release/release.sh	Wed Jun 12 13:15:28 2013	(r251652)
@@ -0,0 +1,193 @@
+#!/bin/sh
+#-
+# Copyright (c) 2013 Glen Barber
+# Copyright (c) 2011 Nathan Whitehorn
+# 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 AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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.
+#
+# release.sh: check out source trees, and build release components with
+#  totally clean, fresh trees.
+# Based on release/generate-release.sh written by Nathan Whitehorn
+#
+# $FreeBSD$
+#
+
+PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin"
+export PATH
+
+# The directory within which the release will be built.
+CHROOTDIR="/scratch"
+
+# The default svn checkout server, and svn branches for src/, doc/,
+# and ports/.
+SVNROOT="svn://svn.freebsd.org"
+SRCBRANCH="base/head"
+DOCBRANCH="doc/head"
+PORTBRANCH="ports/head"
+
+# The default src/, doc/, and ports/ revisions.
+SRCREVISION="-rHEAD"
+DOCREVISION="-rHEAD"
+PORTREVISION="-rHEAD"
+
+# The default make.conf and src.conf to use.  Set to /dev/null
+# by default to avoid polluting the chroot(8) environment with
+# non-default settings.
+MAKE_CONF="/dev/null"
+SRC_CONF="/dev/null"
+
+# The number of make(1) jobs, defaults to the number of CPUs available for
+# buildworld, and half of number of CPUs available for buildkernel.
+WORLD_FLAGS="-j$(sysctl -n hw.ncpu)"
+KERNEL_FLAGS="-j$(expr $(sysctl -n hw.ncpu) / 2)"
+MAKE_FLAGS="-s"
+
+# The name of the kernel to build, defaults to GENERIC.
+KERNEL="GENERIC"
+
+# The TARGET and TARGET_ARCH to build, defaults to the running system.
+TARGET="$(uname -p)"
+TARGET_ARCH="${TARGET}"
+
+# Set to non-empty value to disable checkout of doc/ and/or ports/.  Disabling
+# ports/ checkout also forces NODOC to be set.
+NODOC=
+NOPORTS=
+MAKE_FLAGS="${MAKE_FLAGS}"
+
+get_rev_branch () {
+	# Set up the OSVERSION, BRANCH, and REVISION based on the src/ tree
+	# checked out.
+	OSVERSION=$(grep '#define __FreeBSD_version' ${CHROOTDIR}/usr/src/sys/sys/param.h | awk '{print $3}')
+	BRANCH=$(grep '^BRANCH=' ${CHROOTDIR}/usr/src/sys/conf/newvers.sh \
+		| awk -F\= '{print $2}' | sed -e 's,",,g')
+	REVISION=$(grep '^REVISION=' ${CHROOTDIR}/usr/src/sys/conf/newvers.sh \
+		| awk -F\= '{print $2}' | sed -e 's,",,g')
+	OSRELEASE="${REVISION}-${BRANCH}"
+}
+
+usage() {
+	echo "Usage: $0 [-c release.conf]"
+	exit 1
+}
+
+while getopts c: opt; do
+	case ${opt} in
+	c)
+		RELEASECONF="${OPTARG}"
+		if [ ! -e "${RELEASECONF}" ]; then
+			echo "ERROR: Configuration file ${RELEASECONF} does not exist."
+			exit 1
+		fi
+		# Source the specified configuration file for overrides
+		. ${RELEASECONF}
+		;;
+	\?)
+		usage
+		;;
+	esac
+done
+shift $(($OPTIND - 1))
+
+# The aggregated build-time flags based upon variables defined within
+# this file, unless overridden by release.conf.  In most cases, these
+# will not need to be changed.
+CONF_FILES="__MAKE_CONF=${MAKE_CONF} SRCCONF=${SRC_CONF}"
+ARCH_FLAGS="TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH}"
+CHROOT_WMAKEFLAGS="${MAKE_FLAGS} ${WORLD_FLAGS} ${CONF_FILES}"
+CHROOT_IMAKEFLAGS="${CONF_FILES}"
+CHROOT_DMAKEFLAGS="${CONF_FILES}"
+RELEASE_WMAKEFLAGS="${MAKE_FLAGS} ${WORLD_FLAGS} ${ARCH_FLAGS} ${CONF_FILES}"
+RELEASE_KMAKEFLAGS="${MAKE_FLAGS} ${KERNEL_FLAGS} KERNCONF=${KERNEL} ${ARCH_FLAGS} ${CONF_FILES}"
+RELEASE_RMAKEFLAGS="${ARCH_FLAGS} KERNCONF=${KERNEL} ${CONF_FILES} \
+	NODOC=${NODOC} NOPORTS=${NOPORTS}"
+
+# If PORTS is set and NODOC is unset, force NODOC=yes because the ports tree
+# is required to build the documentation set.
+if [ "x${NOPORTS}" != "x" ] && [ "x${NODOC}" = "x" ]; then
+	echo "*** NOTICE: Setting NODOC=1 since ports tree is required"
+	echo "            and NOPORTS is set."
+	NODOC=1
+fi
+
+if [ ! ${CHROOTDIR} ]; then
+	echo "Please set CHROOTDIR."
+	exit 1
+fi
+
+if [ $(id -u) -ne 0 ]; then
+	echo "Needs to be run as root."
+	exit 1
+fi
+
+set -e # Everything must succeed
+
+mkdir -p ${CHROOTDIR}/usr
+
+svn co ${SVNROOT}/${SRCBRANCH} ${CHROOTDIR}/usr/src $SRCREVISION
+if [ "x${NODOC}" = "x" ]; then
+	svn co ${SVNROOT}/${DOCBRANCH} ${CHROOTDIR}/usr/doc $DOCREVISION
+fi
+if [ "x${NOPORTS}" = "x" ]; then
+	svn co ${SVNROOT}/${PORTBRANCH} ${CHROOTDIR}/usr/ports $PORTREVISION
+fi
+
+get_rev_branch
+
+cd ${CHROOTDIR}/usr/src
+make ${CHROOT_WMAKEFLAGS} buildworld
+make ${CHROOT_IMAKEFLAGS} installworld DESTDIR=${CHROOTDIR}
+make ${CHROOT_DMAKEFLAGS} distribution DESTDIR=${CHROOTDIR}
+mount -t devfs devfs ${CHROOTDIR}/dev
+trap "umount ${CHROOTDIR}/dev" EXIT # Clean up devfs mount on exit
+
+build_doc_ports() {
+	## Trick the ports 'run-autotools-fixup' target to do the right thing.
+	_OSVERSION=$(sysctl -n kern.osreldate)
+	if [ -d ${CHROOTDIR}/usr/doc ] && [ "x${NODOC}" != "x" ]; then
+		PBUILD_FLAGS="OSVERSION=${OSVERSION} WITHOUT_JADETEX=yes BATCH=yes"
+		chroot ${CHROOTDIR} make -C /usr/ports/textproc/docproj \
+			${PBUILD_FLAGS} install
+	fi
+}
+
+if [ -d ${CHROOTDIR}/usr/ports ]; then
+	cp /etc/resolv.conf ${CHROOTDIR}/etc/resolv.conf
+	build_doc_ports ${CHROOTDIR}
+fi
+
+if [ "x${RELSTRING}" = "x" ]; then
+	RELSTRING="$(chroot ${CHROOTDIR} uname -s)-${OSRELEASE}-${TARGET_ARCH}"
+fi
+
+chroot ${CHROOTDIR} make -C /usr/src ${RELEASE_WMAKEFLAGS} buildworld
+chroot ${CHROOTDIR} make -C /usr/src ${RELEASE_KMAKEFLAGS} buildkernel
+chroot ${CHROOTDIR} make -C /usr/src/release ${RELEASE_RMAKEFLAGS} \
+	release RELSTRING=${RELSTRING}
+chroot ${CHROOTDIR} make -C /usr/src/release ${RELEASE_RMAKEFLAGS} \
+	install DESTDIR=/R RELSTRING=${RELSTRING}
+
+cd ${CHROOTDIR}/R
+
+sha256 FreeBSD-* > CHECKSUM.SHA256
+md5 FreeBSD-* > CHECKSUM.MD5



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