generate-release.sh revision 230106
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 230106 2012-01-14 09:57:13Z 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 52mkdir -p $2/usr/src 53set -e # Everything must succeed 54 55svn co ${SVNROOT:-svn://svn.freebsd.org/base}/$1 $2/usr/src $REVISION 56if [ ! -z $CVSUP_HOST ]; then 57 cat > $2/docports-supfile << EOF 58 *default host=$CVSUP_HOST 59 *default base=/var/db 60 *default prefix=/usr 61 *default release=cvs tag=${CVS_TAG:-.} 62 *default delete use-rel-suffix 63 *default compress 64 ports-all 65 doc-all 66EOF 67elif [ ! -z $CVSROOT ]; then 68 cd $2/usr 69 cvs -R ${CVSARGS} -d ${CVSROOT} co -P -r ${CVS_TAG:-HEAD} ports 70 cvs -R ${CVSARGS} -d ${CVSROOT} co -P -r ${CVS_TAG:-HEAD} doc 71fi 72 73cd $2/usr/src 74make $MAKE_FLAGS buildworld 75make installworld distribution DESTDIR=$2 76mount -t devfs devfs $2/dev 77trap "umount $2/dev" EXIT # Clean up devfs mount on exit 78 79if [ ! -z $CVSUP_HOST ]; then 80 cp /etc/resolv.conf $2/etc/resolv.conf 81 82 # Checkout ports and doc trees 83 chroot $2 /usr/bin/csup /docports-supfile 84fi 85 86if [ -d $2/usr/doc ]; then 87 cp /etc/resolv.conf $2/etc/resolv.conf 88 89 # Build ports to build release documentation 90 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)' 91fi 92 93chroot $2 make -C /usr/src $MAKE_FLAGS buildworld buildkernel 94chroot $2 make -C /usr/src/release release 95chroot $2 make -C /usr/src/release install DESTDIR=/R 96 97: ${RELSTRING=`chroot $2 uname -s`-`chroot $2 uname -r`-`chroot $2 uname -p`} 98 99cd $2/R 100for i in release.iso bootonly.iso memstick; do 101 mv $i $RELSTRING-$i 102done 103sha256 $RELSTRING-* > CHECKSUM.SHA256 104md5 $RELSTRING-* > CHECKSUM.MD5 105 106