generate-release.sh revision 246283
1#!/bin/sh 2 3# generate-release.sh: check out source trees, and build release components with 4# totally clean, fresh trees. 5# 6# Usage: generate-release.sh svn-branch[@revision] scratch-dir 7# 8# Environment variables: 9# SVNROOTBASE: SVN base URL to FreeBSD repository (svn://svn.freebsd.org) 10# SVNROOTSRC: URL to FreeBSD src tree (${SVNROOTBASE}/base) 11# SVNROOTDOC: URL to FreeBSD doc tree (${SVNROOTBASE}/doc) 12# SVNROOTPORTS:URL to FreeBSD ports tree (${SVNROOTBASE}/ports) 13# BRANCHSRC: branch name of src (svn-branch[@revision]) 14# BRANCHDOC: branch name of doc (head) 15# BRANCHPORTS: branch name of ports (head) 16# WORLD_FLAGS: optional flags to pass to buildworld (e.g. -j) 17# KERNEL_FLAGS: optional flags to pass to buildkernel (e.g. -j) 18# 19# $FreeBSD: head/release/generate-release.sh 246283 2013-02-03 10:26:24Z hrs $ 20# 21 22usage() 23{ 24 echo "Usage: $0 svn-branch[@revision] scratch-dir" 2>&1 25 exit 1 26} 27 28if [ $# -lt 2 ]; then 29 usage 30fi 31 32: ${SVNROOTBASE:=svn://svn.freebsd.org} 33: ${SVNROOTSRC:=${SVNROOTBASE}/base} 34: ${SVNROOTDOC:=${SVNROOTBASE}/doc} 35: ${SVNROOTPORTS:=${SVNROOTBASE}/ports} 36: ${SVNROOT:=${SVNROOTSRC}} # for backward compatibility 37: ${SVN_CMD:=/usr/local/bin/svn} 38BRANCHSRC=$1 39: ${BRANCHDOC:=head} 40: ${BRANCHPORTS:=head} 41: ${WORLD_FLAGS:=${MAKE_FLAGS}} 42: ${KERNEL_FLAGS:=${MAKE_FLAGS}} 43: ${CHROOTDIR:=$2} 44 45if [ ! -r "${CHROOTDIR}" ]; then 46 echo "${CHROOTDIR}: scratch dir not found." 47 exit 1 48fi 49 50CHROOT_CMD="/usr/sbin/chroot ${CHROOTDIR}" 51case ${TARGET} in 52"") ;; 53*) SETENV_TARGET="TARGET=$TARGET" ;; 54esac 55case ${TARGET_ARCH} in 56"") ;; 57*) SETENV_TARGET_ARCH="TARGET_ARCH=$TARGET_ARCH" ;; 58esac 59SETENV="env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin" 60CROSSENV="${SETENV_TARGET} ${SETENV_TARGET_ARCH}" 61WMAKE="make -C /usr/src ${WORLD_FLAGS}" 62NWMAKE="${WMAKE} __MAKE_CONF=/dev/null SRCCONF=/dev/null" 63KMAKE="make -C /usr/src ${KERNEL_FLAGS}" 64RMAKE="make -C /usr/src/release" 65 66if [ $(id -u) -ne 0 ]; then 67 echo "Needs to be run as root." 68 exit 1 69fi 70 71set -e # Everything must succeed 72 73mkdir -p ${CHROOTDIR}/usr/src 74${SVN_CMD} co ${SVNROOT}/${BRANCHSRC} ${CHROOTDIR}/usr/src 75${SVN_CMD} co ${SVNROOTDOC}/${BRANCHDOC} ${CHROOTDIR}/usr/doc 76${SVN_CMD} co ${SVNROOTPORTS}/${BRANCHPORTS} ${CHROOTDIR}/usr/ports 77 78${SETENV} ${NWMAKE} -C ${CHROOTDIR}/usr/src ${WORLD_FLAGS} buildworld 79${SETENV} ${NWMAKE} -C ${CHROOTDIR}/usr/src installworld distribution DESTDIR=${CHROOTDIR} 80mount -t devfs devfs ${CHROOTDIR}/dev 81trap "umount ${CHROOTDIR}/dev" EXIT # Clean up devfs mount on exit 82 83if [ -d ${CHROOTDIR}/usr/doc ]; then 84 cp /etc/resolv.conf ${CHROOTDIR}/etc/resolv.conf 85 86 # Install docproj to build release documentation 87 ${CHROOT_CMD} /bin/sh -c \ 88 'make -C /usr/ports/textproc/docproj \ 89 BATCH=yes \ 90 WITHOUT_SVN=yes \ 91 WITHOUT_JADETEX=yes \ 92 WITHOUT_X11=yes \ 93 WITHOUT_PYTHON=yes \ 94 install' 95fi 96 97${CHROOT_CMD} ${SETENV} ${CROSSENV} ${WMAKE} buildworld 98${CHROOT_CMD} ${SETENV} ${CROSSENV} ${KMAKE} buildkernel 99${CHROOT_CMD} ${SETENV} ${CROSSENV} ${RMAKE} release 100${CHROOT_CMD} ${SETENV} ${CROSSENV} ${RMAKE} install DESTDIR=/R 101