Change v3 to v4 yumgroups.xml
[myplc.git] / guest.init
index 619db33..4545694 100755 (executable)
@@ -6,7 +6,7 @@
 #
 # description: Manages all PLC services on this machine
 #
-# $Id: guest.init,v 1.15 2006/04/10 21:09:02 mlhuang Exp $
+# $Id: guest.init,v 1.21 2007/02/06 23:36:04 mlhuang Exp $
 #
 
 # Source function library and configuration
@@ -33,116 +33,38 @@ nsteps=${#steps[@]}
 # Regenerate configuration files
 reload ()
 {
+    force=$1
+
     # Regenerate the main configuration file from default values
     # overlaid with site-specific and current values.
-    tmp=$(mktemp /tmp/plc_config.xml.XXXXXX)
-    plc-config --xml \
-       /etc/planetlab/default_config.xml \
-       /etc/planetlab/configs/* \
-       /etc/planetlab/plc_config.xml \
-       >$tmp
-    if [ $? -eq 0 ] ; then
-       mv $tmp /etc/planetlab/plc_config.xml
-       chmod 644 /etc/planetlab/plc_config.xml
-    else
-       echo "PLC: Warning: Invalid configuration file(s) detected"
-       rm -f $tmp
-    fi
-
-    # Shell constants
-    plc-config --shell >/etc/planetlab/plc_config
-    . /etc/planetlab/plc_config
+    files=(
+       /etc/planetlab/default_config.xml 
+       /etc/planetlab/configs/*.xml
+       /etc/planetlab/plc_config.xml
+    )
+    for file in "${files[@]}" ; do
+       if [ -n "$force" -o $file -nt /etc/planetlab/plc_config.xml ] ; then
+           tmp=$(mktemp /tmp/plc_config.xml.XXXXXX)
+           plc-config --xml "${files[@]}" >$tmp
+           if [ $? -eq 0 ] ; then
+               mv $tmp /etc/planetlab/plc_config.xml
+               chmod 644 /etc/planetlab/plc_config.xml
+           else
+               echo "PLC: Warning: Invalid configuration file(s) detected"
+               rm -f $tmp
+           fi
+           break
+       fi
+    done
 
-    # Generate various defaults
-    if [ -z "$PLC_DB_PASSWORD" ] ; then
-       PLC_DB_PASSWORD=$(uuidgen)
-       plc-config --category=plc_db --variable=password --value="$PLC_DB_PASSWORD" --save
+    # Convert configuration to various formats
+    if [ -n "$force" -o /etc/planetlab/plc_config.xml -nt /etc/planetlab/plc_config ] ; then
+       plc-config --shell >/etc/planetlab/plc_config
     fi
-
-    if [ -z "$PLC_API_MAINTENANCE_PASSWORD" ] ; then
-       PLC_API_MAINTENANCE_PASSWORD=$(uuidgen)
-       plc-config --category=plc_api --variable=maintenance_password --value="$PLC_API_MAINTENANCE_PASSWORD" --save
+    if [ -n "$force" -o /etc/planetlab/plc_config.xml -nt /etc/planetlab/php/plc_config.php ] ; then
+       mkdir -p /etc/planetlab/php
+       plc-config --php >/etc/planetlab/php/plc_config.php
     fi
-
-    # Need to configure network before resolving hostnames
-    /etc/plc.d/network start 3>/dev/null 4>/dev/null
-
-    PLC_API_MAINTENANCE_SOURCES=$(
-       for server in API BOOT WWW ; do
-           hostname=PLC_${server}_HOST
-           gethostbyname ${!hostname}
-       done | sort -u
-    )
-    plc-config --category=plc_api --variable=maintenance_sources --value="$PLC_API_MAINTENANCE_SOURCES" --save
-
-    # Save configuration
-    mkdir -p /etc/planetlab/php
-    plc-config --php >/etc/planetlab/php/plc_config.php
-    plc-config --shell >/etc/planetlab/plc_config
-
-    # For backward compatibility, until we can convert all code to use
-    # the now standardized variable names.
-
-    # DB constants are all named the same
-    ln -sf plc_config /etc/planetlab/plc_db
-
-    # API constants
-    cat >/etc/planetlab/plc_api <<EOF
-PL_API_SERVER='$PLC_API_HOST'
-PL_API_PATH='$PLC_API_PATH'
-PL_API_PORT=$PLC_API_PORT
-PL_API_CAPABILITY_AUTH_METHOD='capability'
-PL_API_CAPABILITY_PASS='$PLC_API_MAINTENANCE_PASSWORD'
-PL_API_CAPABILITY_USERNAME='$PLC_API_MAINTENANCE_USER'
-PL_API_TICKET_KEY_FILE='$PLC_API_SSL_KEY'
-PLANETLAB_SUPPORT_EMAIL='$PLC_MAIL_SUPPORT_ADDRESS'
-BOOT_MESSAGES_EMAIL='$PLC_MAIL_BOOT_ADDRESS'
-WWW_BASE='$PLC_WWW_HOST'
-BOOT_BASE='$PLC_BOOT_HOST'
-EOF
-
-    # API expects root SSH public key to be at /etc/planetlab/node_root_key
-    ln -sf "$PLC_ROOT_SSH_KEY_PUB" /etc/planetlab/node_root_key
-
-    # The format is
-    #
-    # ip:max_role_id:organization_id:password
-    #
-    # It is unlikely that we will let federated sites use the
-    # maintenance account to access each others' APIs, so we always
-    # set organization_id to -1.
-    (
-       echo -n "PL_API_CAPABILITY_SOURCES='"
-       first=1
-       for ip in $PLC_API_MAINTENANCE_SOURCES ; do
-           if [ $first -ne 1 ] ; then
-               echo -n " "
-           fi
-           first=0
-           echo -n "$ip:-1:-1:$PLC_API_MAINTENANCE_PASSWORD"
-       done
-       echo "'"
-    ) >>/etc/planetlab/plc_api
-
-    cat >/etc/planetlab/php/site_constants.php <<"EOF"
-<?php
-include('plc_config.php');
-
-define('PL_API_SERVER', PLC_API_HOST);
-define('PL_API_PATH', PLC_API_PATH);
-define('PL_API_PORT', PLC_API_PORT);
-define('PL_API_CAPABILITY_AUTH_METHOD', 'capability');
-define('PL_API_CAPABILITY_PASS', PLC_API_MAINTENANCE_PASSWORD);
-define('PL_API_CAPABILITY_USERNAME', PLC_API_MAINTENANCE_USER);
-define('WWW_BASE', PLC_WWW_HOST);
-define('BOOT_BASE', PLC_BOOT_HOST);
-define('DEBUG', PLC_WWW_DEBUG);
-define('API_CALL_DEBUG', PLC_API_DEBUG);
-define('SENDMAIL', PLC_MAIL_ENABLED);
-define('PLANETLAB_SUPPORT_EMAIL', PLC_NAME . 'Support <' . PLC_MAIL_SUPPORT_ADDRESS . '>');
-define('PLANETLAB_SUPPORT_EMAIL_ONLY', PLC_MAIL_SUPPORT_ADDRESS);
-?>
-EOF
 }
 
 usage()
@@ -180,6 +102,8 @@ done
 
 # Redirect stdout and stderr of each step to /var/log/boot.log
 if [ $verbose -eq 0 ] ; then
+    touch /var/log/boot.log
+    chmod 600 /var/log/boot.log
     exec 1>>/var/log/boot.log
     exec 2>>/var/log/boot.log
 fi
@@ -195,7 +119,7 @@ command=$1
 shift 1
 if [ -z "$1" ] ; then
     # Start or stop everything. Regenerate configuration first.
-    reload
+    reload force
 else
     # Start or stop a particular step
     steps=("$@")
@@ -209,6 +133,8 @@ start ()
     for step in "${steps[@]}" ; do
        if [ -x /etc/plc.d/$step ] ; then
            /etc/plc.d/$step start
+           # Steps may alter the configuration, may need to regenerate
+           reload
        else
            echo "PLC: $step: unrecognized step" >&4
            exit 1
@@ -222,6 +148,8 @@ stop ()
        step=${steps[$(($nsteps - $i))]}
        if [ -x /etc/plc.d/$step ] ; then
            /etc/plc.d/$step stop
+           # Steps may alter the configuration, may need to regenerate
+           reload
        else
            echo "PLC: $step: unrecognized step" >&4
            exit 1
@@ -240,6 +168,7 @@ case "$command" in
        ;;
 
     reload)
+       reload force
        ;;
 
     *)