generate-release.sh revision 230107
1219508Snwhitehorn#!/bin/sh
2219508Snwhitehorn
3219508Snwhitehorn# generate-release.sh: check out source trees, and build release components with
4219610Snwhitehorn#  totally clean, fresh trees.
5219508Snwhitehorn#
6230106Sglebius#  Usage: generate-release.sh [-r revision] svn-branch scratch-dir
7219508Snwhitehorn#
8219508Snwhitehorn# Environment variables:
9219610Snwhitehorn#  CVSUP_HOST: Host of a cvsup server to obtain the ports and documentation
10219788Snwhitehorn#   trees. This or CVSROOT must be set to include ports and documentation.
11219788Snwhitehorn#  CVSROOT:    CVS root to obtain the ports and documentation trees. This or
12219788Snwhitehorn#   CVSUP_HOST must be set to include ports and documentation.
13219788Snwhitehorn#  CVS_TAG:    CVS tag for ports and documentation (HEAD by default)
14219788Snwhitehorn#  SVNROOT:    SVN URL to FreeBSD source repository (by default, 
15219788Snwhitehorn#   svn://svn.freebsd.org/base)
16219508Snwhitehorn#  MAKE_FLAGS: optional flags to pass to make (e.g. -j)
17227536Snwhitehorn#  RELSTRING:  optional base name for media images (e.g. FreeBSD-9.0-RC2-amd64)
18219508Snwhitehorn# 
19219508Snwhitehorn#  Note: Since this requires a chroot, release cross-builds will not work!
20219508Snwhitehorn#
21219508Snwhitehorn# $FreeBSD: head/release/generate-release.sh 230107 2012-01-14 14:43:22Z glebius $
22219508Snwhitehorn#
23219508Snwhitehorn
24230106Sglebiususage()
25230106Sglebius{
26230106Sglebius	echo "Usage: $0 [-r revision] svn-branch scratch-dir"
27230106Sglebius	exit 1
28230106Sglebius}
29230106Sglebius
30230106Sglebiusargs=`getopt r: $*`
31230106Sglebiusif [ $? -ne 0 ]; then
32230106Sglebius	usage
33230106Sglebiusfi
34230106Sglebiusset -- $args
35230106SglebiusREVISION=
36230106Sglebiuswhile true; do
37230106Sglebius	case "$1" in
38230106Sglebius	-r)
39230106Sglebius		REVISION="-r $2"
40230106Sglebius		shift; shift
41230106Sglebius		;;
42230106Sglebius	--)
43230106Sglebius		shift; break
44230106Sglebius		;;
45230106Sglebius	esac
46230106Sglebiusdone
47230106Sglebius
48230106Sglebiusif [ $# -lt 2 ]; then
49230106Sglebius	usage
50230106Sglebiusfi
51230106Sglebius
52221510Snwhitehornset -e # Everything must succeed
53221510Snwhitehorn
54230107Sglebiuscase $MAKE_FLAGS in
55230107Sglebius	*-j*)
56230107Sglebius		;;
57230107Sglebius	*)
58230107Sglebius		MAKE_FLAGS="$MAKE_FLAGS -j "$(sysctl -n hw.ncpu)
59230107Sglebius		;;
60230107Sglebiusesac
61230107Sglebius
62230107Sglebiusmkdir -p $2/usr/src
63230107Sglebius
64230106Sglebiussvn co ${SVNROOT:-svn://svn.freebsd.org/base}/$1 $2/usr/src $REVISION
65219508Snwhitehornif [ ! -z $CVSUP_HOST ]; then
66219610Snwhitehorn	cat > $2/docports-supfile << EOF
67219508Snwhitehorn	*default host=$CVSUP_HOST
68219508Snwhitehorn	*default base=/var/db
69219508Snwhitehorn	*default prefix=/usr
70219788Snwhitehorn	*default release=cvs tag=${CVS_TAG:-.}
71219508Snwhitehorn	*default delete use-rel-suffix
72219508Snwhitehorn	*default compress
73219508Snwhitehorn	ports-all
74219610Snwhitehorn	doc-all
75219508SnwhitehornEOF
76219788Snwhitehornelif [ ! -z $CVSROOT ]; then
77219788Snwhitehorn	cd $2/usr
78221510Snwhitehorn	cvs -R ${CVSARGS} -d ${CVSROOT} co -P -r ${CVS_TAG:-HEAD} ports
79221510Snwhitehorn	cvs -R ${CVSARGS} -d ${CVSROOT} co -P -r ${CVS_TAG:-HEAD} doc
80219508Snwhitehornfi
81219508Snwhitehorn
82219508Snwhitehorncd $2/usr/src
83221510Snwhitehornmake $MAKE_FLAGS buildworld
84221510Snwhitehornmake installworld distribution DESTDIR=$2
85219508Snwhitehornmount -t devfs devfs $2/dev
86221510Snwhitehorntrap "umount $2/dev" EXIT # Clean up devfs mount on exit
87219508Snwhitehorn
88219508Snwhitehornif [ ! -z $CVSUP_HOST ]; then 
89219508Snwhitehorn	cp /etc/resolv.conf $2/etc/resolv.conf
90219610Snwhitehorn
91219610Snwhitehorn	# Checkout ports and doc trees
92221510Snwhitehorn	chroot $2 /usr/bin/csup /docports-supfile
93219788Snwhitehornfi
94219610Snwhitehorn
95219788Snwhitehornif [ -d $2/usr/doc ]; then 
96219788Snwhitehorn	cp /etc/resolv.conf $2/etc/resolv.conf
97219788Snwhitehorn
98223897Snwhitehorn	# Build ports to build release documentation
99221510Snwhitehorn	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)'
100219508Snwhitehornfi
101219610Snwhitehorn
102221510Snwhitehornchroot $2 make -C /usr/src $MAKE_FLAGS buildworld buildkernel
103221510Snwhitehornchroot $2 make -C /usr/src/release release
104221510Snwhitehornchroot $2 make -C /usr/src/release install DESTDIR=/R
105219508Snwhitehorn
106227536Snwhitehorn: ${RELSTRING=`chroot $2 uname -s`-`chroot $2 uname -r`-`chroot $2 uname -p`}
107227536Snwhitehorn
108227536Snwhitehorncd $2/R
109227536Snwhitehornfor i in release.iso bootonly.iso memstick; do
110227536Snwhitehorn	mv $i $RELSTRING-$i
111227536Snwhitehorndone
112227536Snwhitehornsha256 $RELSTRING-* > CHECKSUM.SHA256
113227536Snwhitehornmd5 $RELSTRING-* > CHECKSUM.MD5
114227536Snwhitehorn
115