generate-release.sh revision 230128
1132718Skan#!/bin/sh 2132718Skan 3132718Skan# generate-release.sh: check out source trees, and build release components with 4132718Skan# totally clean, fresh trees. 5132718Skan# 6132718Skan# Usage: generate-release.sh [-r revision] svn-branch scratch-dir 7132718Skan# 8132718Skan# Environment variables: 9132718Skan# CVSUP_HOST: Host of a cvsup server to obtain the ports and documentation 10132718Skan# trees. This or CVSROOT must be set to include ports and documentation. 11132718Skan# CVSROOT: CVS root to obtain the ports and documentation trees. This or 12132718Skan# CVSUP_HOST must be set to include ports and documentation. 13132718Skan# CVS_TAG: CVS tag for ports and documentation (HEAD by default) 14132718Skan# SVNROOT: SVN URL to FreeBSD source repository (by default, 15132718Skan# svn://svn.freebsd.org/base) 16132718Skan# MAKE_FLAGS: optional flags to pass to make (e.g. -j) 17132718Skan# RELSTRING: optional base name for media images (e.g. FreeBSD-9.0-RC2-amd64) 18132718Skan# 19169689Skan# Note: Since this requires a chroot, release cross-builds will not work! 20169689Skan# 21132718Skan# $FreeBSD: head/release/generate-release.sh 230128 2012-01-15 09:27:00Z glebius $ 22132718Skan# 23132718Skan 24132718Skanusage() 25132718Skan{ 26132718Skan echo "Usage: $0 [-r revision] svn-branch scratch-dir" 27132718Skan exit 1 28169689Skan} 29132718Skan 30132718SkanREVISION= 31132718Skanwhile getopts r: opt; do 32132718Skan case $opt in 33 r) 34 REVISION="-r $OPTARG" 35 ;; 36 \?) 37 usage 38 ;; 39 esac 40done 41shift $(($OPTIND - 1)) 42 43if [ $# -lt 2 ]; then 44 usage 45fi 46 47set -e # Everything must succeed 48 49case $MAKE_FLAGS in 50 *-j*) 51 ;; 52 *) 53 MAKE_FLAGS="$MAKE_FLAGS -j "$(sysctl -n hw.ncpu) 54 ;; 55esac 56 57mkdir -p $2/usr/src 58 59svn co ${SVNROOT:-svn://svn.freebsd.org/base}/$1 $2/usr/src $REVISION 60if [ ! -z $CVSUP_HOST ]; then 61 cat > $2/docports-supfile << EOF 62 *default host=$CVSUP_HOST 63 *default base=/var/db 64 *default prefix=/usr 65 *default release=cvs tag=${CVS_TAG:-.} 66 *default delete use-rel-suffix 67 *default compress 68 ports-all 69 doc-all 70EOF 71elif [ ! -z $CVSROOT ]; then 72 cd $2/usr 73 cvs -R ${CVSARGS} -d ${CVSROOT} co -P -r ${CVS_TAG:-HEAD} ports 74 cvs -R ${CVSARGS} -d ${CVSROOT} co -P -r ${CVS_TAG:-HEAD} doc 75fi 76 77cd $2/usr/src 78make $MAKE_FLAGS buildworld 79make installworld distribution DESTDIR=$2 80mount -t devfs devfs $2/dev 81trap "umount $2/dev" EXIT # Clean up devfs mount on exit 82 83if [ ! -z $CVSUP_HOST ]; then 84 cp /etc/resolv.conf $2/etc/resolv.conf 85 86 # Checkout ports and doc trees 87 chroot $2 /usr/bin/csup /docports-supfile 88fi 89 90if [ -d $2/usr/doc ]; then 91 cp /etc/resolv.conf $2/etc/resolv.conf 92 93 # Build ports to build release documentation 94 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)' 95fi 96 97chroot $2 make -C /usr/src $MAKE_FLAGS buildworld buildkernel 98chroot $2 make -C /usr/src/release release 99chroot $2 make -C /usr/src/release install DESTDIR=/R 100 101: ${RELSTRING=`chroot $2 uname -s`-`chroot $2 uname -r`-`chroot $2 uname -p`} 102 103cd $2/R 104for i in release.iso bootonly.iso memstick; do 105 mv $i $RELSTRING-$i 106done 107sha256 $RELSTRING-* > CHECKSUM.SHA256 108md5 $RELSTRING-* > CHECKSUM.MD5 109 110