#!/bin/sh # generate-release.sh: check out source trees, and build release components with # totally clean, fresh trees. # # Usage: generate-release.sh [-r revision] [-d docrevision] \ # [-p portsrevision] svn-branch scratch-dir # # Environment variables: # SVNROOT: SVN URL to FreeBSD source repository (by default, # svn://svn.freebsd.org/base) # MAKE_FLAGS: optional flags to pass to make (e.g. -j) # # Note: Since this requires a chroot, release cross-builds will not work! # # $FreeBSD$ # usage() { echo "Usage: $0 [-r revision] [-d docrevision] [-p portsrevision] svn-branch scratch-dir" exit 1 } REVISION= DOCREVISION= PORTSREVISION= while getopts d:r:p: opt; do case $opt in d) DOCREVISION="-r $OPTARG" ;; r) REVISION="-r $OPTARG" ;; p) PORTSREVISION="-r $OPTARG" ;; \?) usage ;; esac done shift $(($OPTIND - 1)) if [ $# -lt 2 ]; then usage fi set -e # Everything must succeed svn co ${SVNROOT:-svn://svn.freebsd.org/base}/$1 $2/usr/src svn co ${SVNROOT:-svn://svn.freebsd.org/doc}/head $2/usr/doc $DOCREVISION svn co ${SVNROOT:-svn://svn.freebsd.org/ports}/head $2/usr/ports $PORTSREVISION cd $2/usr/src make $MAKE_FLAGS buildworld make installworld distribution DESTDIR=$2 mount -t devfs devfs $2/dev trap "umount $2/dev" EXIT # Clean up devfs mount on exit if [ -d $2/usr/doc ]; then cp /etc/resolv.conf $2/etc/resolv.conf # Install docproj to build release documentation 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)' fi chroot $2 make -C /usr/src $MAKE_FLAGS buildworld buildkernel chroot $2 make -C /usr/src/release release chroot $2 make -C /usr/src/release install DESTDIR=/R