]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - release/generate-release.sh
Add ahci(4) and siis(4) to the hardware notes.
[FreeBSD/FreeBSD.git] / release / generate-release.sh
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$
22 #
23
24 usage()
25 {
26         echo "Usage: $0 [-r revision] svn-branch scratch-dir"
27         exit 1
28 }
29
30 REVISION=
31 while getopts r: opt; do
32         case $opt in
33         r)
34                 REVISION="-r $OPTARG"
35                 ;;
36         \?)
37                 usage
38                 ;;
39         esac
40 done
41 shift $(($OPTIND - 1))
42
43 if [ $# -lt 2 ]; then
44         usage
45 fi
46
47 set -e # Everything must succeed
48
49 case $MAKE_FLAGS in
50         *-j*)
51                 ;;
52         *)
53                 MAKE_FLAGS="$MAKE_FLAGS -j "$(sysctl -n hw.ncpu)
54                 ;;
55 esac
56
57 mkdir -p $2/usr/src
58
59 svn co ${SVNROOT:-svn://svn.freebsd.org/base}/$1 $2/usr/src $REVISION
60 if [ ! -z $CVSUP_HOST ]; then
61         cat > $2/docports-supfile << EOF
62         *default host=$CVSUP_HOST
63         *default base=/var/db
64         *default prefix=/usr
65         *default release=cvs tag=${CVS_TAG:-.}
66         *default delete use-rel-suffix
67         *default compress
68         ports-all
69         doc-all
70 EOF
71 elif [ ! -z $CVSROOT ]; then
72         cd $2/usr
73         cvs -R ${CVSARGS} -d ${CVSROOT} co -P -r ${CVS_TAG:-HEAD} ports
74         cvs -R ${CVSARGS} -d ${CVSROOT} co -P -r ${CVS_TAG:-HEAD} doc
75 fi
76
77 cd $2/usr/src
78 make $MAKE_FLAGS buildworld
79 make installworld distribution DESTDIR=$2
80 mount -t devfs devfs $2/dev
81 trap "umount $2/dev" EXIT # Clean up devfs mount on exit
82
83 if [ ! -z $CVSUP_HOST ]; then 
84         cp /etc/resolv.conf $2/etc/resolv.conf
85
86         # Checkout ports and doc trees
87         chroot $2 /usr/bin/csup /docports-supfile
88 fi
89
90 if [ -d $2/usr/doc ]; then 
91         cp /etc/resolv.conf $2/etc/resolv.conf
92
93         # Build ports to build release documentation
94         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)'
95 fi
96
97 chroot $2 make -C /usr/src $MAKE_FLAGS buildworld buildkernel
98 chroot $2 make -C /usr/src/release release
99 chroot $2 make -C /usr/src/release install DESTDIR=/R
100
101 : ${RELSTRING=`chroot $2 uname -s`-`chroot $2 uname -r`-`chroot $2 uname -p`}
102
103 cd $2/R
104 for i in release.iso bootonly.iso memstick; do
105         mv $i $RELSTRING-$i
106 done
107 sha256 $RELSTRING-* > CHECKSUM.SHA256
108 md5 $RELSTRING-* > CHECKSUM.MD5
109