diff options
author | gjb <gjb@FreeBSD.org> | 2013-06-12 13:15:28 +0000 |
---|---|---|
committer | gjb <gjb@FreeBSD.org> | 2013-06-12 13:15:28 +0000 |
commit | ceed11ef6c834cd21b2984cc4c55fe7917b0a083 (patch) | |
tree | 0d9ef4f8969a984f68c446d9761267cbacc2819a /release | |
parent | fe855c3b46ff660d64da383e281859d4d21bc434 (diff) | |
download | FreeBSD-src-ceed11ef6c834cd21b2984cc4c55fe7917b0a083.zip FreeBSD-src-ceed11ef6c834cd21b2984cc4c55fe7917b0a083.tar.gz |
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
Diffstat (limited to 'release')
-rw-r--r-- | release/release.conf.sample | 41 | ||||
-rwxr-xr-x | release/release.sh | 193 |
2 files changed, 234 insertions, 0 deletions
diff --git a/release/release.conf.sample b/release/release.conf.sample new file mode 100644 index 0000000..918e024 --- /dev/null +++ b/release/release.conf.sample @@ -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= diff --git a/release/release.sh b/release/release.sh new file mode 100755 index 0000000..a21a3d1 --- /dev/null +++ b/release/release.sh @@ -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 |