regenerate
[myplc.git] / build.sh
index 93d2635..6d3733b 100755 (executable)
--- a/build.sh
+++ b/build.sh
@@ -6,7 +6,7 @@
 # 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
@@ -18,7 +18,7 @@ if [ -d ../build ] ; then
     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
 
@@ -28,12 +28,9 @@ export PATH
 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
 
@@ -43,14 +40,13 @@ usage()
     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
@@ -61,9 +57,6 @@ while getopts "c:r:a:d:s:h" opt ; do
        a)
            basearch=$OPTARG
            ;;
-       d)
-           usr_share=$OPTARG
-           ;;
        s)
            size=$OPTARG
            ;;
@@ -73,8 +66,11 @@ while getopts "c:r:a:d:s:h" opt ; do
     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
@@ -85,7 +81,7 @@ fi
 
 mkdir -p $root $data
 mount -o loop $root.img $root
-trap "umount $root; exit 1" ERR
+trap "umount $root" ERR
 
 #
 # Build
@@ -97,7 +93,10 @@ while read package ; do
 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.
@@ -117,9 +116,15 @@ install -D -m 755 plc_config.py $root/tmp/plc_config.py
 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'
 
@@ -146,11 +151,10 @@ rsync -a \
     --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=(
@@ -219,30 +223,33 @@ fi
 
 # 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
@@ -253,7 +260,7 @@ fi
 # 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
@@ -263,10 +270,15 @@ export PLC_DATA=$PWD/$data
 ./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