# Mark Huang <mlhuang@cs.princeton.edu>
# Copyright (C) 2006 The Trustees of Princeton University
#
-# $Id: build.sh,v 1.3 2006/03/28 21:30:48 mlhuang Exp $
+# $Id$
#
PATH=/sbin:/bin:/usr/sbin:/usr/bin
PATH=$PATH:../build
srcdir=..
else
- echo "Error: Could not find sources in either . or .."
+ echo "Error: Could not find $(cd .. && pwd -P)/build/"
exit 1
fi
config=plc_config.xml
# Release and architecture to install
-releasever=2
+releasever=4
basearch=i386
-# Data directory base
-usr_share=/usr/share
-
# Initial size of the image
size=1000000000
echo " -c file PLC configuration file (default: $config)"
echo " -r release Fedora release number (default: $releasever)"
echo " -a arch Fedora architecture (default: $basearch)"
- echo " -d datadir Data directory base (default: $usr_share)"
echo " -s size Approximate size of the installation (default: $size)"
echo " -h This message"
exit 1
}
# Get options
-while getopts "c:r:a:d:s:h" opt ; do
+while getopts "c:r:a:s:h" opt ; do
case $opt in
c)
config=$OPTARG
a)
basearch=$OPTARG
;;
- d)
- usr_share=$OPTARG
- ;;
s)
size=$OPTARG
;;
esac
done
-root=fc$releasever
-data=data$releasever
+# Do not tolerate errors
+set -e
+
+root=root
+data=data
if [ ! -f $root.img ] ; then
bs=4096
mkdir -p $root $data
mount -o loop $root.img $root
-trap "umount $root; exit 1" ERR
+trap "umount $root" ERR
#
# Build
done < <(./plc-config --packages $config)
# Install base system
-mkfedora -v -r $releasever -a $basearch $packages $root
+mkfedora -v -r $releasever -a $basearch -k $packages $root
+
+# Disable all services in reference image
+chroot $root sh -c "/sbin/chkconfig --list | awk '{ print \$1 }' | xargs -i /sbin/chkconfig {} off"
# FC2 minilogd starts up during shutdown and makes unmounting
# impossible. Just get rid of it.
chroot $root sh -c 'cd /tmp; python plc_config.py build; python plc_config.py install'
install -D -m 755 plc-config $root/usr/bin/plc-config
install -D -m 755 api-config $root/usr/bin/api-config
+install -D -m 755 db-config $root/usr/bin/db-config
+install -D -m 755 dns-config $root/usr/bin/dns-config
+
+# Install OpenSSL configuration
+install -D -m 644 openssl.cnf $root/etc/planetlab/ssl/openssl.cnf
-# Install init script
-echo "* Installing initscript"
+# Install initscripts
+echo "* Installing initscripts"
+find plc.d | cpio -p -d -u $root/etc/
install -D -m 755 guest.init $root/etc/init.d/plc
chroot $root sh -c 'chkconfig --add plc; chkconfig plc on'
--exclude=geni --exclude=PDN --exclude=Talks \
$srcdir/plc_www/ $root/var/www/html/
-# XXX Build imprintable BootCD and BootManager images.
-
# Install configuration file
echo "* Installing configuration file"
-install -D -m 644 $config $data/etc/planetlab/plc_config.xml
+install -D -m 444 $config $data/etc/planetlab/default_config.xml
+install -D -m 444 plc_config.dtd $data/etc/planetlab/plc_config.dtd
# Move "data" directories out of the installation
datadirs=(
# Write sysconfig
cat >plc.sysconfig <<EOF
-PLC_ROOT=$usr_share/plc/$root
-PLC_DATA=$usr_share/plc/$data
+PLC_ROOT=/plc/$root
+PLC_DATA=/plc/$data
#PLC_OPTIONS="-v"
EOF
-# Install node RPMs
+# Initialize node RPMs directory. The PlanetLab-Bootstrap.tar.bz2
+# tarball already contains all of the node RPMs pre-installed. Only
+# updates or optional packages should be placed in this directory.
if [ -n "$RPM_BUILD_DIR" ] ; then
- echo "* Installing node RPMs"
+ echo "* Initializing node RPMs directory"
RPM_RPMS_DIR=$(cd $(dirname $RPM_BUILD_DIR)/RPMS && pwd -P)
mkdir -p $data/var/www/html/install-rpms/planetlab
- # Exclude ourself (e.g., if rebuilding), the bootcd and
- # bootmanager builds, and debuginfo RPMs.
- rsync -a \
- --exclude='myplc-*' \
- --exclude='bootcd-*' --exclude='bootmanager-*' \
- --exclude='*-debuginfo-*' \
- $(find $RPM_RPMS_DIR -type f -and -name '*.rpm') \
- $data/var/www/html/install-rpms/planetlab/
if [ -f $RPM_RPMS_DIR/yumgroups.xml ] ; then
install -D -m 644 $RPM_RPMS_DIR/yumgroups.xml \
$data/var/www/html/install-rpms/planetlab/yumgroups.xml
fi
- yum-arch $data/var/www/html/install-rpms/planetlab || :
- createrepo $data/var/www/html/install-rpms/planetlab || :
+ # yum-2.0.x
+ if [ -x /usr/bin/yum-arch ] ; then
+ yum-arch $data/var/www/html/install-rpms/planetlab
+ fi
+ # yum-2.4.x
+ if [ -x /usr/bin/createrepo ] ; then
+ if [ -f $data/var/www/html/install-rpms/planetlab/yumgroups.xml ] ; then
+ groupfile="-g yumgroups.xml"
+ fi
+ createrepo $groupfile $data/var/www/html/install-rpms/planetlab
+ fi
fi
# Bootstrap the system for quicker startup (and to populate the
# bootstrap the database, then shut it back down again immediately.
echo "* Bootstrapping installation"
-./plc-config --save $data/etc/planetlab/plc_config.xml bootstrap.xml
+install -D -m 644 bootstrap.xml $data/etc/planetlab/configs/bootstrap.xml
# Otherwise, host.init will try to read /etc/sysconfig/plc
export PLC_ROOT=$PWD/$root
./host.init start
RETVAL=$?
-# Restore default configuration before shutting down
-install -D -m 644 $config $data/etc/planetlab/plc_config.xml
+# Remove ISO and USB images, which take up >100MB but only take a
+# couple of seconds to generate at first boot.
+rm -f $data/var/www/html/download/*.{iso,usb}
./host.init stop
RETVAL=$(($RETVAL+$?))
+# Restore default configuration
+rm -f $data/etc/planetlab/configs/bootstrap.xml
+install -D -m 444 $config $data/etc/planetlab/plc_config.xml
+
exit $RETVAL