generate-release.sh revision 240586
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 240586 2012-09-17 02:23:03Z gjb $ 22# 23 24usage() 25{ 26 echo "Usage: $0 [-r revision] [-d docrevision] [-p portsrevision] svn-branch scratch-dir" 27 exit 1 28} 29 30REVISION= 31DOCREVISION= 32PORTSREVISION= 33while getopts d:r:p: opt; do 34 case $opt in 35 d) 36 DOCREVISION="-r $OPTARG" 37 ;; 38 r) 39 REVISION="-r $OPTARG" 40 ;; 41 p) 42 PORTSREVISION="-r $OPTARG" 43 ;; 44 \?) 45 usage 46 ;; 47 esac 48done 49shift $(($OPTIND - 1)) 50 51if [ $# -lt 2 ]; then 52 usage 53fi 54 55set -e # Everything must succeed 56 57case $MAKE_FLAGS in 58 *-j*) 59 ;; 60 *) 61 MAKE_FLAGS="$MAKE_FLAGS -j "$(sysctl -n hw.ncpu) 62 ;; 63esac 64 65mkdir -p $2/usr/src 66 67svn co ${SVNROOT:-svn://svn.freebsd.org/base}/$1 $2/usr/src $REVISION 68svn co ${SVNROOT:-svn://svn.freebsd.org/doc}/head $2/usr/doc $DOCREVISION 69svn co ${SVNROOT:-svn://svn.freebsd.org/ports}/head $2/usr/ports $PORTSREVISION 70 71cd $2/usr/src 72make $MAKE_FLAGS buildworld 73make installworld distribution DESTDIR=$2 74mount -t devfs devfs $2/dev 75trap "umount $2/dev" EXIT # Clean up devfs mount on exit 76 77if [ -d $2/usr/doc ]; then 78 cp /etc/resolv.conf $2/etc/resolv.conf 79 80 # Install docproj to build release documentation 81 chroot $2 /bin/sh -c '(export ASSUME_ALWAYS_YES=1 && /usr/sbin/pkg install -y docproj) || (cd /usr/ports/textproc/docproj && make install clean BATCH=yes WITHOUT_X11=yes JADETEX=no WITHOUT_PYTHON=yes)' 82fi 83 84chroot $2 make -C /usr/src $MAKE_FLAGS buildworld buildkernel 85chroot $2 make -C /usr/src/release release 86chroot $2 make -C /usr/src/release install DESTDIR=/R 87 88: ${RELSTRING=`chroot $2 uname -s`-`chroot $2 uname -r`-`chroot $2 uname -p`} 89 90cd $2/R 91for i in release.iso bootonly.iso memstick; do 92 mv $i $RELSTRING-$i 93done 94sha256 $RELSTRING-* > CHECKSUM.SHA256 95md5 $RELSTRING-* > CHECKSUM.MD5 96 97