propset - enables svn keywords
[build.git] / mkbuild
1 #!/bin/bash
2 #
3 # Builds a Fedora Core 4 build environment suitable for rebuilding all
4 # PlanetLab software, including MyPLC. Requires access to Fedora Core
5 # 4 base, updates, and extras repositories.
6 #
7 # Mark Huang <mlhuang@cs.princeton.edu>
8 # Copyright (C) 2006 The Trustees of Princeton University
9 #
10 # $Id$
11 #
12
13 export PATH=/sbin:/bin:/usr/sbin:/usr/bin
14
15 . build.common
16
17 # Verbosity
18 verbose=0
19
20 # Default yum repositories to try
21 mirror=
22
23 # Yum groups to install
24 grouplist=(
25 "Development Tools"
26 "Development Libraries"
27 # In particular, compat-gcc-32 for kernel-2.6.12 builds
28 "Legacy Software Development"
29 )
30
31 # Packages to install
32 packagelist=(
33 # kernel
34 gnupg
35 diffutils
36 # util-vserver
37 vconfig
38 iptables
39 wget
40 beecrypt-devel
41 tetex-latex
42 gcc-c++
43 # ulogd
44 libpcap
45 # iptables
46 linuxdoc-tools
47 # vserver-reference
48 sudo
49 yum
50 createrepo
51 # mysql
52 gperf
53 time
54 # bootmanager
55 sharutils
56 # bootcd
57 nasm
58 mkisofs
59 dosfstools
60 # myplc
61 rsync
62 )
63
64 # Tag to export
65 tag=HEAD
66
67 usage()
68 {
69     echo "Usage: mkbuild [OPTION]... [basedir]"
70     echo "      -l url          Fedora mirror location"
71     echo "      -r release      Fedora release number"
72     echo "      -a arch         Fedora architecture"
73     echo "      -g group1 -g group2 ..."
74     echo "                      Yumgroups to install. Defaults:"
75     for group in "${grouplist[@]}" ; do
76         echo "                  $group"
77     done
78     echo "      -p package1 -p package2 ..."
79     echo "                      Additional packages to install. Defaults:"
80     for package in "${packagelist[@]}" ; do
81         echo "                  $package"
82     done
83     echo "      -t tag          CVS tag of PlanetLab sources to export (default: $tag)"
84     echo "      -v              Be verbose"
85     echo "      -h              This message"
86     exit 1
87 }
88
89 # Get options
90 while getopts "kl:g:p:t:vh" opt ; do
91     case $opt in
92         l)
93             mirror=$OPTARG
94             ;;
95         g)
96             grouplist[${#grouplist[*]}]="$OPTARG"
97             ;;
98         p)
99             packagelist[${#packagelist[*]}]="$OPTARG"
100             ;;
101         t)
102             tag=$OPTARG
103             ;;
104         v)
105             verbose=1
106             set -x
107             ;;
108         h|*)
109             usage
110             ;;
111     esac
112 done
113
114 shift $(($OPTIND - 1))
115 if [ -n "$1" ] ; then
116     # Install in chroot
117     mkdir -p "$1"
118     vroot=$(cd "$1" && pwd -P)
119 else
120     # Install for real
121     vroot=
122 fi
123
124 if [ $UID -ne 0 ] ; then
125     echo "Error: You must run this script as root."
126     exit 1
127 fi
128
129 exec 3>&1
130 exec 4>&2
131 if [ -z "$verbose" ] ; then
132     exec 1>/dev/null
133     exec 2>/dev/null
134 fi
135
136 # Do not tolerate errors
137 set -e
138
139 if [ -n "$vroot" ] ; then
140     # Install in chroot
141     if [ $verbose -ne 0 ] ; then
142         options="$options -v"
143     fi
144     if [ -n "$mirror" ] ; then
145         options="$options -l \"$mirror\""
146     fi
147     for group in "${grouplist[@]}" ; do
148         options="$options -g \"$group\""
149     done
150     for package in "${packagelist[@]}" ; do
151         options="$options -p \"$package\""
152     done
153
154     pl_mkfedora $vroot $options
155 else
156     # Install for real
157     echo "* Installing optional packages" >&3
158     yum -y install "${packagelist[@]}"
159
160     echo "* Installing optional groups" >&3
161     yum -y groupinstall "${grouplist[@]}"
162 fi
163
164 # If a preferred mirror was specified, configure mkfedora to use it
165 if [ -n "$mirror" ] ; then
166     mkdir -p $vroot/etc/planetlab
167     echo "PLC_DEVEL_FEDORA_URL=$mirror" >$vroot/etc/planetlab/plc_config
168 fi
169
170 # Install local CVS repository.
171 echo "* Exporting source code to /cvs" >&3
172 mkdir -p $vroot/cvs
173 export CVSROOT=$vroot/cvs
174 cvs -d $CVSROOT init
175
176 tmp=$(mktemp -d /tmp/cvs.XXXXXX)
177 trap "rm -rf $tmp" ERR
178 pushd $tmp
179
180 # Export source code from cvs.planet-lab.org to /tmp
181 if [ "$tag" = "HEAD" ] ; then
182         date=$(date +%Y-%m-%d)
183         cvs_export="cvs -d :pserver:anon@cvs.planet-lab.org:/cvs export -D $date planetlab"
184         tag=planetlab-$date
185 else
186         cvs_export="cvs -d :pserver:anon@cvs.planet-lab.org:/cvs export -r $tag planetlab"
187 fi
188 $cvs_export
189
190 # Import into /cvs/tmp
191 for dir in * ; do
192     pushd $dir
193     cvs -d $CVSROOT import -m "$cvs_export" -ko -I ! $dir planetlab $tag
194     popd
195 done
196
197 popd
198 rm -rf $tmp
199
200 exit 0