Deleted Added
full compact
generate-release.sh (240587) generate-release.sh (240967)
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#
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 $
17# $FreeBSD: head/release/generate-release.sh 240967 2012-09-26 18:04:16Z gjb $
18#
19
18#
19
20unset B_ARCH
21unset ARCH
22unset MACHINE_ARCH
23
24HOST_ARCH=`uname -p`
25
20usage()
21{
26usage()
27{
22 echo "Usage: $0 [-r revision] [-d docrevision] [-p portsrevision] svn-branch scratch-dir"
28 echo "Usage: $0 [-a arch] [-r revision] [-d docrevision] [-p portsrevision] svn-branch scratch-dir"
23 exit 1
24}
25
29 exit 1
30}
31
32arch_error ()
33{
34 echo "Architecture ${OPTARG} cannot be built on host architecture ${HOST_ARCH}"
35 exit 1
36}
37
26REVISION=
27DOCREVISION=
28PORTSREVISION=
38REVISION=
39DOCREVISION=
40PORTSREVISION=
29while getopts d:r:p: opt; do
41while getopts a:d:r:p: opt; do
30 case $opt in
42 case $opt in
43 a)
44 case "${OPTARG}" in
45 i386|amd64)
46 if [ "${HOST_ARCH}" != "amd64" ]; then
47 arch_error "${OPTARG}"
48 fi
49 ;;
50 powerpc|powerpc64)
51 if [ "${HOST_ARCH}" != "powerpc64" ]; then
52 arch_error "${OPTARG}"
53 fi
54 ;;
55 *)
56 arch_error "${OPTARG}"
57 ;;
58 esac
59 B_ARCH="$OPTARG"
60 ;;
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
61 d)
62 DOCREVISION="-r $OPTARG"
63 ;;
64 r)
65 REVISION="-r $OPTARG"
66 ;;
67 p)
68 PORTSREVISION="-r $OPTARG"
69 ;;
70 \?)
71 usage
72 ;;
73 esac
74done
75shift $(($OPTIND - 1))
76
77# If target architecture is not specified, use hw.machine_arch
78if [ "x${B_ARCH}" == "x" ]; then
79 B_ARCH="${HOST_ARCH}"
80fi
81ARCH_FLAGS="ARCH=${B_ARCH} TARGET_ARCH=${B_ARCH}"
82
47if [ $# -lt 2 ]; then
48 usage
49fi
50
83if [ $# -lt 2 ]; then
84 usage
85fi
86
87if [ $(id -u) -ne 0 ]; then
88 echo "Needs to be run as root."
89 exit 1
90fi
91
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
92set -e # Everything must succeed
93
94case $MAKE_FLAGS in
95 *-j*)
96 ;;
97 *)
98 MAKE_FLAGS="$MAKE_FLAGS -j "$(sysctl -n hw.ncpu)
99 ;;
100esac
101
102mkdir -p $2/usr/src
103
104svn co ${SVNROOT:-svn://svn.freebsd.org/base}/$1 $2/usr/src $REVISION
105svn co ${SVNROOT:-svn://svn.freebsd.org/doc}/head $2/usr/doc $DOCREVISION
106svn co ${SVNROOT:-svn://svn.freebsd.org/ports}/head $2/usr/ports $PORTSREVISION
107
108cd $2/usr/src
68make $MAKE_FLAGS buildworld
69make installworld distribution DESTDIR=$2
109make $MAKE_FLAGS ${ARCH_FLAGS} buildworld
110make $ARCH_FLAGS installworld distribution DESTDIR=$2
70mount -t devfs devfs $2/dev
71trap "umount $2/dev" EXIT # Clean up devfs mount on exit
72
111mount -t devfs devfs $2/dev
112trap "umount $2/dev" EXIT # Clean up devfs mount on exit
113
114# Most commands below are run in chroot, so fake getosreldate(3) right now
115OSVERSION=$(grep '#define __FreeBSD_version' $2/usr/include/sys/param.h | awk '{print $3}')
116export OSVERSION
117BRANCH=$(grep '^BRANCH=' $2/usr/src/sys/conf/newvers.sh | awk -F\= '{print $2}')
118BRANCH=`echo ${BRANCH} | sed -e 's,",,g'`
119REVISION=$(grep '^REVISION=' $2/usr/src/sys/conf/newvers.sh | awk -F\= '{print $2}')
120REVISION=`echo ${REVISION} | sed -e 's,",,g'`
121OSRELEASE="${REVISION}-${BRANCH}"
122
123pkgng_install_docports ()
124{
125 # Attempt to install docproj port from pkgng package.
126 chroot ${CHROOTDIR} /bin/sh -c 'env ASSUME_ALWAYS_YES=1 /usr/sbin/pkg install -y docproj-nojadetex'
127 # Check if docproj was installed, since pkg(8) returns '0' if unable
128 # to install a package from the repository. If it is not installed,
129 # fallback to installing using pkg_add(1).
130 chroot ${CHROOTDIR} /bin/sh -c '/usr/sbin/pkg info -q docproj-nojadetex' || \
131 pkgadd_install_docports
132}
133
134build_compat9_port ()
135{
136 chroot ${CHROOTDIR} /bin/sh -c 'make -C /usr/ports/misc/compat9x BATCH=yes install clean'
137}
138
139pkgadd_install_docports ()
140{
141 # Attempt to install docproj package with pkg_add(1).
142 # If not successful, build the docproj port.
143 if [ "${REVISION}" == "10.0" ]; then
144 # Packages for 10-CURRENT are still located in the 9-CURRENT
145 # directory. Override environment to use correct package
146 # location if building for 10-CURRENT.
147 PACKAGESITE="ftp://ftp.freebsd.org/pub/FreeBSD/ports/${B_ARCH}/packages-9-current/Latest/"
148 export PACKAGESITE
149 PACKAGEROOT="ftp://ftp.freebsd.org/pub/FreeBSD/ports/${B_ARCH}/packages-9-current/"
150 export PACKAGEROOT
151 PKG_PATH="ftp://ftp.freebsd.org/pub/FreeBSD/ports/${B_ARCH}/packages-9-current/All/"
152 export PKG_PATH
153 build_compat9_port
154 fi
155 chroot ${CHROOTDIR} /bin/sh -c '/usr/sbin/pkg_add -r docproj-nojadetex' || \
156 build_docports
157}
158
159build_docports()
160{
161 # Could not install textproc/docproj from pkg(8) or pkg_add(1). Build
162 # the port as final fallback.
163 chroot ${CHROOTDIR} /bin/sh -c 'make -C /usr/ports/textproc/docproj BATCH=yes WITH_JADETEX=no WITHOUT_X11=yes WITHOUT_PYTHON=yes install clean' || \
164 { echo "*** Could not build the textproj/docproj port. Exiting."; exit 2; }
165}
166
73if [ -d $2/usr/doc ]; then
74 cp /etc/resolv.conf $2/etc/resolv.conf
75
76 # Install docproj to build release documentation
167if [ -d $2/usr/doc ]; then
168 cp /etc/resolv.conf $2/etc/resolv.conf
169
170 # 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)'
171 CHROOTDIR="$2"
172 set +e
173 pkgng_install_docports "${CHROOTDIR}"
174 set -e
78fi
79
175fi
176
80chroot $2 make -C /usr/src $MAKE_FLAGS buildworld buildkernel
81chroot $2 make -C /usr/src/release release
177chroot $2 make -C /usr/src $MAKE_FLAGS ${ARCH_FLAGS} buildworld buildkernel
178chroot $2 make -C /usr/src/release ${ARCH_FLAGS} release
82chroot $2 make -C /usr/src/release install DESTDIR=/R
83
179chroot $2 make -C /usr/src/release install DESTDIR=/R
180
84: ${RELSTRING=`chroot $2 uname -s`-`chroot $2 uname -r`-`chroot $2 uname -p`}
181if [ "x${OSVERSION}" == "x" ]; then
182 OSRELEASE=`chroot $2 uname -r`
183fi
85
184
185: ${RELSTRING=`chroot $2 uname -s`-${OSRELEASE}-${B_ARCH}}
186
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
187cd $2/R
188for i in release.iso bootonly.iso memstick; do
189 mv $i $RELSTRING-$i
190done
191sha256 $RELSTRING-* > CHECKSUM.SHA256
192md5 $RELSTRING-* > CHECKSUM.MD5
193