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