- support MyPLC customization
authorMark Huang <mlhuang@cs.princeton.edu>
Mon, 3 Apr 2006 19:40:55 +0000 (19:40 +0000)
committerMark Huang <mlhuang@cs.princeton.edu>
Mon, 3 Apr 2006 19:40:55 +0000 (19:40 +0000)
build.sh

index 36e8ee7..7150ef0 100755 (executable)
--- a/build.sh
+++ b/build.sh
@@ -1,26 +1,96 @@
 #!/bin/bash
+#
+# Builds bootmanager.sh[.sgn], the PlanetLab Boot Manager script, and
+# PlanetLab-Bootstrap.tar.bz2, the initial root filesystem of a new
+# PlanetLab node. For backward compatibility with old version 2.0 Boot
+# CDs, additional utilities are also built and packaged as
+# alpina-BootLVM.tar.gz and alpina-PartDisks.tar.gz.
+#
+# The bootmanager.sh script contains in it a uuencoded tarball of the
+# Boot Manager, customized for this PLC installation.
+#
+# Aaron Klingaman <alk@absarokasoft.com>
+# Mark Huang <mlhuang@cs.princeton.edu>
+# Copyright (C) 2004-2006 The Trustees of Princeton University
+#
+# $Id$
+#
 
-# build a bash script that can be executed by the boot cd,
-# and contains embedded in it the boot manager.
+# Source PLC configuration
+if [ -f /etc/planetlab/plc_config ] ; then
+    . /etc/planetlab/plc_config
+else
+    PLC_BOOT_HOST=boot.planet-lab.org
+    PLC_API_HOST=www.planet-lab.org
+    PLC_API_PATH=PLCAPI
+fi
+
+# Do not tolerate errors
+set -e
+
+# Change to our source directory
+srcdir=$(cd $(dirname $0) && pwd -P)
+
+# Source bootmanager configuration
+. $srcdir/source/configuration
+
+# Write boot script. plc_www/boot/index.php writes this script out
+# after a nonce check.
 
 DEST_SCRIPT=bootmanager.sh
 
-cat > $DEST_SCRIPT << '_EOF_'
+cat > $DEST_SCRIPT <<EOF
 #!/bin/bash
+#
+# PlanetLab Boot Manager $VERSION
+#
+# DO NOT EDIT. Generated by $USER@$HOSTNAME at
+# $(date) 
+#
+
+# Do not tolerate errors
 set -e
 
 UUDECODE=/usr/bin/uudecode
 
 # once we get the beta cds out of use, this can be removed
-if [ ! -x $UUDECODE ]; then
+if [ ! -x \$UUDECODE ]; then
   UUDECODE=/tmp/uudecode
-  curl -s http://boot.planet-lab.org/boot/uudecode.gz | gzip -d -c > $UUDECODE
-  chmod +x $UUDECODE
+  curl -s http://$PLC_BOOT_HOST/boot/uudecode.gz | gzip -d -c > \$UUDECODE
+  chmod +x \$UUDECODE
 fi
 
-_EOF_
+EOF
+
 echo '($UUDECODE | /bin/tar -C /tmp -xj) << _EOF_' >> $DEST_SCRIPT
-tar -cj source/ | uuencode -m - >> $DEST_SCRIPT
+
+# XXX Currently, the value of PLC_API_PORT is set to 80 by default, so
+# that the portions of the web site that still use oldapi can continue
+# to work. However, the Boot Manager supports HTTPS access, which we
+# want to remain the default, so hard code 443 here.
+sed -i -e "s@^BOOT_API_SERVER.*@BOOT_API_SERVER=https://$PLC_API_HOST:443/$PLC_API_PATH/@" \
+    $srcdir/source/configuration
+
+# Replace the default debug SSH key
+if [ -f "$PLC_DEBUG_SSH_KEY" ] ; then
+    install -D -m 644 "$PLC_DEBUG_SSH_KEY" $srcdir/source/debug_files/debug_root_ssh_key
+fi
+
+# Embed the uuencoded tarball in the script
+tar -cj -C $srcdir source/ | uuencode -m - >> $DEST_SCRIPT
+
 echo '_EOF_' >> $DEST_SCRIPT
 echo 'cd /tmp/source' >> $DEST_SCRIPT
 echo 'chmod +x BootManager.py && ./BootManager.py' >> $DEST_SCRIPT
+
+# Sign the whole script, if the keyring is on this machine.
+if [ -f "$PLC_ROOT_GPG_KEY" -a -f "$PLC_ROOT_GPG_KEY_PUB" ] ; then
+    gpg --homedir=/root \
+       --no-default-keyring \
+       --keyring "$PLC_ROOT_GPG_KEY_PUB" \
+       --secret-keyring "$PLC_ROOT_GPG_KEY" \
+       --yes --sign --output $DEST_SCRIPT.sgn \
+       $DEST_SCRIPT
+else
+    echo "Warning: Remember to sign $PWD/$DEST_SCRIPT!" >&2
+fi