X-Git-Url: http://git.onelab.eu/?p=bootmanager.git;a=blobdiff_plain;f=build.sh;h=2e8c4400a1080322ea527f8c54ac8ec5c299ea0c;hp=411111c8be926f45ce3b304662b3e6f486d14081;hb=HEAD;hpb=373ed1b705da6b5eb52295d4215857ff923f0815 diff --git a/build.sh b/build.sh index 411111c..2e8c440 100755 --- a/build.sh +++ b/build.sh @@ -10,116 +10,98 @@ # Marc E. Fiuczynski # Copyright (C) 2004-2007 The Trustees of Princeton University # -# $Id: build.sh,v 1.5 2006/04/03 19:40:55 mlhuang Exp $ -# # 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 +source /etc/planetlab/plc_config # Do not tolerate errors set -e -NODEGROUP=$1 +# this is set by plc.d/bootmanager +DEPLOYMENT=$1 BOOTSTRAPDIR="/boot" -if [ -n "$NODEGROUP" ] ; then - BOOTSTRAPDIR="/boot/$NODEGROUP" -fi - # Change to our source directory -srcdir=$(cd $(dirname $0) && pwd -P) - -# Translate configuration file -sed -i -e "s|SUPPORT_FILE_DIR=.*|SUPPORT_FILE_DIR=$BOOTSTRAPDIR|" $srcdir/source/configuration +cd $(dirname $0) # Source bootmanager configuration -. $srcdir/source/configuration +source source/configuration -# Write boot script. plc_www/boot/index.php writes this script out -# after a nonce check. +# Write boot script. nodeconfig/boot/index.php retrieves the contents of this script +# after checking the node id -DEST_SCRIPT=bootmanager.sh -if [ -n "$NODEGROUP" ] ; then - DEST_SCRIPT="${NODEGROUP}_bootmanager.sh" - # Remove the old version or any sym links prior to re-writing - rm -f ${DEST_SCRIPT} - rm -f ${DEST_SCRIPT}.sgn -fi +BMDIR=/var/www/html/boot +mkdir -p $BMDIR -cat > $DEST_SCRIPT < \$UUDECODE - chmod +x \$UUDECODE -fi - -EOF +DEST_SCRIPT="$BMDIR/bootmanager_${DEPLOYMENT}.sh" +# Remove the old version or any sym links prior to re-writing +rm -f ${DEST_SCRIPT} +rm -f ${DEST_SCRIPT}.sgn -echo '($UUDECODE | /bin/tar -C /tmp -xj) << _EOF_' >> $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 +# hard code 443 here. +sed -i -e "s@^BOOT_API_SERVER.*@BOOT_API_SERVER=https://$PLC_API_HOST:443/$PLC_API_PATH/@" source/configuration -sed -i -e "s@^BOOT_SERVER.*@BOOT_SERVER=$PLC_BOOT_HOST@" $srcdir/source/configuration +sed -i -e "s@^BOOT_SERVER.*@BOOT_SERVER=$PLC_BOOT_HOST@" source/configuration if [ "$PLC_MONITOR_ENABLED" = "1" ]; then MONITOR_SERVER=$PLC_MONITOR_HOST else MONITOR_SERVER=$PLC_BOOT_HOST fi -sed -i -e "s@^MONITOR_SERVER.*@MONITOR_SERVER=$MONITOR_SERVER@" $srcdir/source/configuration +sed -i -e "s@^MONITOR_SERVER.*@MONITOR_SERVER=$MONITOR_SERVER@" source/configuration -install -D -m 644 $PLC_BOOT_CA_SSL_CRT $srcdir/source/cacert/$PLC_BOOT_HOST/cacert.pem -if [ -f $PLC_MONITOR_CA_SSL_CRT ] ; then - install -D -m 644 $PLC_MONITOR_CA_SSL_CRT $srcdir/source/cacert/$PLC_MONITOR_HOST/cacert.pem +install -D -m 644 $PLC_BOOT_CA_SSL_CRT source/cacert/$PLC_BOOT_HOST/cacert.pem +if [ -f "$PLC_MONITOR_CA_SSL_CRT" ] ; then + install -D -m 644 "$PLC_MONITOR_CA_SSL_CRT" source/cacert/$PLC_MONITOR_HOST/cacert.pem fi # Replace the default debug SSH key if [ -f "$PLC_DEBUG_SSH_KEY_PUB" ] ; then - install -D -m 644 "$PLC_DEBUG_SSH_KEY_PUB" $srcdir/source/debug_files/debug_root_ssh_key + install -D -m 644 "$PLC_DEBUG_SSH_KEY_PUB" source/debug_files/debug_root_ssh_key fi # Add python code from the following packages # make sure they are in the 'Requires' header of the specfile -required_rpms="pypcilib pyplnet monitor-runlevelagent" -extra_libs=`mktemp -d "/tmp/.bootmanager.XXXXXX"` +required_rpms="pypcilib pyplnet" +extra_libs=$(mktemp -d "/tmp/.bootmanager.XXXXXX") mkdir $extra_libs/source -cp -p $(rpm -ql $required_rpms | grep -v '\.py[co]$') $extra_libs/source +for entry in $(rpm -ql $required_rpms | grep -v '\.py[co]$'); do + if [ -d $entry ]; then + continue + fi + cp -p $entry $extra_libs/source +done -# Embed the uuencoded tarball in the script -tar -cj -C $srcdir source/ -C $extra_libs source/ | uuencode -m - >> $DEST_SCRIPT -# Remove temp directory -rm -fr $extra_libs +########## create the bootmanager script +cat < $DEST_SCRIPT +#!/bin/bash +# +# PlanetLab Boot Manager $VERSION +# +# DO NOT EDIT. Generated by $USER@$HOSTNAME at +# $(date) +# + +# Do not tolerate errors +set -e + +(/usr/bin/uudecode | /bin/tar -C /tmp -xj) << _EOF_ +EOF + +# Embed the uuencoded tarball in the script +tar -cj source/ -C $extra_libs source/ | uuencode -m - >> $DEST_SCRIPT + +# wrap up the script echo '_EOF_' >> $DEST_SCRIPT echo 'cd /tmp/source' >> $DEST_SCRIPT echo 'chmod +x BootManager.py && ./BootManager.py' >> $DEST_SCRIPT +# Remove temp directory +rm -fr $extra_libs + # 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 \