generate-release.sh revision 230107
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 [-r revision] svn-branch scratch-dir 7# 8# Environment variables: 9# CVSUP_HOST: Host of a cvsup server to obtain the ports and documentation 10# trees. This or CVSROOT must be set to include ports and documentation. 11# CVSROOT: CVS root to obtain the ports and documentation trees. This or 12# CVSUP_HOST must be set to include ports and documentation. 13# CVS_TAG: CVS tag for ports and documentation (HEAD by default) 14# SVNROOT: SVN URL to FreeBSD source repository (by default, 15# svn://svn.freebsd.org/base) 16# MAKE_FLAGS: optional flags to pass to make (e.g. -j) 17# RELSTRING: optional base name for media images (e.g. FreeBSD-9.0-RC2-amd64) 18# 19# Note: Since this requires a chroot, release cross-builds will not work! 20# 21# $FreeBSD: head/release/generate-release.sh 230107 2012-01-14 14:43:22Z glebius $ 22# 23 24usage() 25{ 26 echo "Usage: $0 [-r revision] svn-branch scratch-dir" 27 exit 1 28} 29 30args=`getopt r: $*` 31if [ $? -ne 0 ]; then 32 usage 33fi 34set -- $args 35REVISION= 36while true; do 37 case "$1" in 38 -r) 39 REVISION="-r $2" 40 shift; shift 41 ;; 42 --) 43 shift; break 44 ;; 45 esac 46done 47 48if [ $# -lt 2 ]; then 49 usage 50fi 51 52set -e # Everything must succeed 53 54case $MAKE_FLAGS in 55 *-j*) 56 ;; 57 *) 58 MAKE_FLAGS="$MAKE_FLAGS -j "$(sysctl -n hw.ncpu) 59 ;; 60esac 61 62mkdir -p $2/usr/src 63 64svn co ${SVNROOT:-svn://svn.freebsd.org/base}/$1 $2/usr/src $REVISION 65if [ ! -z $CVSUP_HOST ]; then 66 cat > $2/docports-supfile << EOF 67 *default host=$CVSUP_HOST 68 *default base=/var/db 69 *default prefix=/usr 70 *default release=cvs tag=${CVS_TAG:-.} 71 *default delete use-rel-suffix 72 *default compress 73 ports-all 74 doc-all 75EOF 76elif [ ! -z $CVSROOT ]; then 77 cd $2/usr 78 cvs -R ${CVSARGS} -d ${CVSROOT} co -P -r ${CVS_TAG:-HEAD} ports 79 cvs -R ${CVSARGS} -d ${CVSROOT} co -P -r ${CVS_TAG:-HEAD} doc 80fi 81 82cd $2/usr/src 83make $MAKE_FLAGS buildworld 84make installworld distribution DESTDIR=$2 85mount -t devfs devfs $2/dev 86trap "umount $2/dev" EXIT # Clean up devfs mount on exit 87 88if [ ! -z $CVSUP_HOST ]; then 89 cp /etc/resolv.conf $2/etc/resolv.conf 90 91 # Checkout ports and doc trees 92 chroot $2 /usr/bin/csup /docports-supfile 93fi 94 95if [ -d $2/usr/doc ]; then 96 cp /etc/resolv.conf $2/etc/resolv.conf 97 98 # Build ports to build release documentation 99 chroot $2 /bin/sh -c 'pkg_add -r docproj || (cd /usr/ports/textproc/docproj && make install clean BATCH=yes WITHOUT_X11=yes JADETEX=no WITHOUT_PYTHON=yes)' 100fi 101 102chroot $2 make -C /usr/src $MAKE_FLAGS buildworld buildkernel 103chroot $2 make -C /usr/src/release release 104chroot $2 make -C /usr/src/release install DESTDIR=/R 105 106: ${RELSTRING=`chroot $2 uname -s`-`chroot $2 uname -r`-`chroot $2 uname -p`} 107 108cd $2/R 109for i in release.iso bootonly.iso memstick; do 110 mv $i $RELSTRING-$i 111done 112sha256 $RELSTRING-* > CHECKSUM.SHA256 113md5 $RELSTRING-* > CHECKSUM.MD5 114 115