generate-release.sh revision 240587
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] [-d docrevision] \
7#	[-p portsrevision] svn-branch scratch-dir
8#
9# Environment variables:
10#  SVNROOT:    SVN URL to FreeBSD source repository (by default, 
11#   svn://svn.freebsd.org/base)
12#  MAKE_FLAGS: optional flags to pass to make (e.g. -j)
13#  RELSTRING:  optional base name for media images (e.g. FreeBSD-9.0-RC2-amd64)
14# 
15#  Note: Since this requires a chroot, release cross-builds will not work!
16#
17# $FreeBSD: head/release/generate-release.sh 240587 2012-09-17 02:35:00Z gjb $
18#
19
20usage()
21{
22	echo "Usage: $0 [-r revision] [-d docrevision] [-p portsrevision] svn-branch scratch-dir"
23	exit 1
24}
25
26REVISION=
27DOCREVISION=
28PORTSREVISION=
29while getopts d:r:p: opt; do
30	case $opt in
31	d)
32		DOCREVISION="-r $OPTARG"
33		;;
34	r)
35		REVISION="-r $OPTARG"
36		;;
37	p)
38		PORTSREVISION="-r $OPTARG"
39		;;
40	\?)
41		usage
42		;;
43	esac
44done
45shift $(($OPTIND - 1))
46
47if [ $# -lt 2 ]; then
48	usage
49fi
50
51set -e # Everything must succeed
52
53case $MAKE_FLAGS in
54	*-j*)
55		;;
56	*)
57		MAKE_FLAGS="$MAKE_FLAGS -j "$(sysctl -n hw.ncpu)
58		;;
59esac
60
61mkdir -p $2/usr/src
62
63svn co ${SVNROOT:-svn://svn.freebsd.org/base}/$1 $2/usr/src $REVISION
64svn co ${SVNROOT:-svn://svn.freebsd.org/doc}/head $2/usr/doc $DOCREVISION
65svn co ${SVNROOT:-svn://svn.freebsd.org/ports}/head $2/usr/ports $PORTSREVISION
66
67cd $2/usr/src
68make $MAKE_FLAGS buildworld
69make installworld distribution DESTDIR=$2
70mount -t devfs devfs $2/dev
71trap "umount $2/dev" EXIT # Clean up devfs mount on exit
72
73if [ -d $2/usr/doc ]; then 
74	cp /etc/resolv.conf $2/etc/resolv.conf
75
76	# Install docproj to build release documentation
77	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)'
78fi
79
80chroot $2 make -C /usr/src $MAKE_FLAGS buildworld buildkernel
81chroot $2 make -C /usr/src/release release
82chroot $2 make -C /usr/src/release install DESTDIR=/R
83
84: ${RELSTRING=`chroot $2 uname -s`-`chroot $2 uname -r`-`chroot $2 uname -p`}
85
86cd $2/R
87for i in release.iso bootonly.iso memstick; do
88	mv $i $RELSTRING-$i
89done
90sha256 $RELSTRING-* > CHECKSUM.SHA256
91md5 $RELSTRING-* > CHECKSUM.MD5
92
93