generate-release.sh revision 230107
1238612Szeising#!/bin/sh
2158821Sjoel
3158821Sjoel# generate-release.sh: check out source trees, and build release components with
4158821Sjoel#  totally clean, fresh trees.
5158821Sjoel#
6158821Sjoel#  Usage: generate-release.sh [-r revision] svn-branch scratch-dir
7158821Sjoel#
8158821Sjoel# Environment variables:
9158821Sjoel#  CVSUP_HOST: Host of a cvsup server to obtain the ports and documentation
10158821Sjoel#   trees. This or CVSROOT must be set to include ports and documentation.
11158821Sjoel#  CVSROOT:    CVS root to obtain the ports and documentation trees. This or
12158821Sjoel#   CVSUP_HOST must be set to include ports and documentation.
13158821Sjoel#  CVS_TAG:    CVS tag for ports and documentation (HEAD by default)
14158821Sjoel#  SVNROOT:    SVN URL to FreeBSD source repository (by default, 
15158821Sjoel#   svn://svn.freebsd.org/base)
16158821Sjoel#  MAKE_FLAGS: optional flags to pass to make (e.g. -j)
17158821Sjoel#  RELSTRING:  optional base name for media images (e.g. FreeBSD-9.0-RC2-amd64)
18158821Sjoel# 
19158821Sjoel#  Note: Since this requires a chroot, release cross-builds will not work!
20158821Sjoel#
21158821Sjoel# $FreeBSD: head/release/generate-release.sh 230107 2012-01-14 14:43:22Z glebius $
22158821Sjoel#
23158821Sjoel
24158821Sjoelusage()
25158821Sjoel{
26158821Sjoel	echo "Usage: $0 [-r revision] svn-branch scratch-dir"
27158821Sjoel	exit 1
28158821Sjoel}
29158821Sjoel
30158821Sjoelargs=`getopt r: $*`
31158821Sjoelif [ $? -ne 0 ]; then
32158821Sjoel	usage
33158821Sjoelfi
34158821Sjoelset -- $args
35158821SjoelREVISION=
36158821Sjoelwhile true; do
37158821Sjoel	case "$1" in
38158821Sjoel	-r)
39158821Sjoel		REVISION="-r $2"
40158821Sjoel		shift; shift
41158821Sjoel		;;
42158821Sjoel	--)
43158821Sjoel		shift; break
44158821Sjoel		;;
45158821Sjoel	esac
46158821Sjoeldone
47158821Sjoel
48158821Sjoelif [ $# -lt 2 ]; then
49158821Sjoel	usage
50158821Sjoelfi
51158821Sjoel
52158822Sjoelset -e # Everything must succeed
53158821Sjoel
54158821Sjoelcase $MAKE_FLAGS in
55158821Sjoel	*-j*)
56158821Sjoel		;;
57162893Sru	*)
58158821Sjoel		MAKE_FLAGS="$MAKE_FLAGS -j "$(sysctl -n hw.ncpu)
59158821Sjoel		;;
60158821Sjoelesac
61162893Sru
62162893Srumkdir -p $2/usr/src
63162893Sru
64158821Sjoelsvn co ${SVNROOT:-svn://svn.freebsd.org/base}/$1 $2/usr/src $REVISION
65158821Sjoelif [ ! -z $CVSUP_HOST ]; then
66158821Sjoel	cat > $2/docports-supfile << EOF
67158821Sjoel	*default host=$CVSUP_HOST
68158821Sjoel	*default base=/var/db
69158821Sjoel	*default prefix=/usr
70158821Sjoel	*default release=cvs tag=${CVS_TAG:-.}
71162893Sru	*default delete use-rel-suffix
72162893Sru	*default compress
73158821Sjoel	ports-all
74158821Sjoel	doc-all
75158821SjoelEOF
76158821Sjoelelif [ ! -z $CVSROOT ]; then
77158821Sjoel	cd $2/usr
78158821Sjoel	cvs -R ${CVSARGS} -d ${CVSROOT} co -P -r ${CVS_TAG:-HEAD} ports
79158821Sjoel	cvs -R ${CVSARGS} -d ${CVSROOT} co -P -r ${CVS_TAG:-HEAD} doc
80158821Sjoelfi
81158821Sjoel
82158821Sjoelcd $2/usr/src
83158821Sjoelmake $MAKE_FLAGS buildworld
84158821Sjoelmake installworld distribution DESTDIR=$2
85158821Sjoelmount -t devfs devfs $2/dev
86158821Sjoeltrap "umount $2/dev" EXIT # Clean up devfs mount on exit
87158821Sjoel
88158821Sjoelif [ ! -z $CVSUP_HOST ]; then 
89158821Sjoel	cp /etc/resolv.conf $2/etc/resolv.conf
90158821Sjoel
91158821Sjoel	# Checkout ports and doc trees
92158821Sjoel	chroot $2 /usr/bin/csup /docports-supfile
93158821Sjoelfi
94158822Sjoel
95158821Sjoelif [ -d $2/usr/doc ]; then 
96162893Sru	cp /etc/resolv.conf $2/etc/resolv.conf
97158821Sjoel
98158821Sjoel	# Build ports to build release documentation
99158821Sjoel	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)'
100158821Sjoelfi
101162893Sru
102158821Sjoelchroot $2 make -C /usr/src $MAKE_FLAGS buildworld buildkernel
103158821Sjoelchroot $2 make -C /usr/src/release release
104158821Sjoelchroot $2 make -C /usr/src/release install DESTDIR=/R
105158821Sjoel
106158821Sjoel: ${RELSTRING=`chroot $2 uname -s`-`chroot $2 uname -r`-`chroot $2 uname -p`}
107158821Sjoel
108162893Srucd $2/R
109158821Sjoelfor i in release.iso bootonly.iso memstick; do
110158821Sjoel	mv $i $RELSTRING-$i
111158821Sjoeldone
112162893Srusha256 $RELSTRING-* > CHECKSUM.SHA256
113158821Sjoelmd5 $RELSTRING-* > CHECKSUM.MD5
114158821Sjoel
115158821Sjoel