3 # Builds bootmanager.sh[.sgn], which is the PlanetLab Boot Manager script.
5 # The bootmanager.sh script contains in it a uuencoded tarball of the
6 # Boot Manager, customized for this PLC installation.
8 # Aaron Klingaman <alk@absarokasoft.com>
9 # Mark Huang <mlhuang@cs.princeton.edu>
10 # Marc E. Fiuczynski <mef@cs.princeton.edu>
11 # Copyright (C) 2004-2007 The Trustees of Princeton University
16 # Source PLC configuration
17 if [ -f /etc/planetlab/plc_config ] ; then
18 . /etc/planetlab/plc_config
20 PLC_BOOT_HOST=boot.planet-lab.org
21 PLC_API_HOST=www.planet-lab.org
25 # Do not tolerate errors
28 # Change to our source directory
29 srcdir=$(cd $(dirname $0) && pwd -P)
31 # Source bootmanager configuration
32 . $srcdir/source/configuration
34 # Write boot script. plc_www/boot/index.php writes this script out
35 # after a nonce check.
37 DEST_SCRIPT=bootmanager.sh
39 cat > $DEST_SCRIPT <<EOF
42 # PlanetLab Boot Manager $VERSION
44 # DO NOT EDIT. Generated by $USER@$HOSTNAME at
48 # Do not tolerate errors
51 UUDECODE=/usr/bin/uudecode
53 # once we get the beta cds out of use, this can be removed
54 if [ ! -x \$UUDECODE ]; then
55 UUDECODE=/tmp/uudecode
56 curl -s http://$PLC_BOOT_HOST/boot/uudecode.gz | gzip -d -c > \$UUDECODE
62 echo '($UUDECODE | /bin/tar -C /tmp -xj) << _EOF_' >> $DEST_SCRIPT
64 # XXX Currently, the value of PLC_API_PORT is set to 80 by default, so
65 # that the portions of the web site that still use oldapi can continue
66 # to work. However, the Boot Manager supports HTTPS access, which we
67 # want to remain the default, so hard code 443 here.
68 sed -i -e "s@^BOOT_API_SERVER.*@BOOT_API_SERVER=https://$PLC_API_HOST:443/$PLC_API_PATH/@" \
69 $srcdir/source/configuration
71 # Replace the default debug SSH key
72 if [ -f "$PLC_DEBUG_SSH_KEY_PUB" ] ; then
73 install -D -m 644 "$PLC_DEBUG_SSH_KEY_PUB" $srcdir/source/debug_files/debug_root_ssh_key
76 # Add pypcilib and pyplnet
77 extra_libs=`mktemp -d "/tmp/.bootmanager.XXXXXX"`
78 mkdir $extra_libs/source
79 cp -p $(rpm -ql pypcilib pyplnet | grep -v '\.py[co]$') $extra_libs/source
81 # Embed the uuencoded tarball in the script
82 tar -cj -C $srcdir source/ -C $extra_libs source/ | uuencode -m - >> $DEST_SCRIPT
84 # Remove temp directory
87 echo '_EOF_' >> $DEST_SCRIPT
88 echo 'cd /tmp/source' >> $DEST_SCRIPT
89 echo 'chmod +x BootManager.py && ./BootManager.py' >> $DEST_SCRIPT
91 # Sign the whole script, if the keyring is on this machine.
92 if [ -f "$PLC_ROOT_GPG_KEY" -a -f "$PLC_ROOT_GPG_KEY_PUB" ] ; then
94 --no-default-keyring \
95 --keyring "$PLC_ROOT_GPG_KEY_PUB" \
96 --secret-keyring "$PLC_ROOT_GPG_KEY" \
97 --yes --sign --output $DEST_SCRIPT.sgn \
100 echo "Warning: Remember to sign $PWD/$DEST_SCRIPT!" >&2