X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plc.d%2Fhttpd;h=f614f51072e69eb72415ae6a76411c03b9647927;hb=d31e1228d9497995a37deb60a6b22edfc89f59c9;hp=5dba112149363169ee74796ad4d40ea18a2cbe86;hpb=309572ab8b4843bb6507b0b3f6dc5e5240af257b;p=myplc.git diff --git a/plc.d/httpd b/plc.d/httpd index 5dba112..f614f51 100755 --- a/plc.d/httpd +++ b/plc.d/httpd @@ -7,13 +7,16 @@ # Mark Huang # Copyright (C) 2006 The Trustees of Princeton University # -# $Id: httpd,v 1.1 2006/04/06 21:51:59 mlhuang Exp $ +# $Id: httpd,v 1.11 2007/02/06 16:24:13 mlhuang Exp $ # # Source function library and configuration . /etc/plc.d/functions . /etc/planetlab/plc_config +# Be verbose +set -x + # Default locations DocumentRoot=/var/www/html php_ini=/etc/php.ini @@ -32,9 +35,20 @@ case "$1" in MESSAGE=$"Starting web server" dialog "$MESSAGE" + # Set the document root to /data/var/www/html (static files + # and PlanetLabConf only, no Drupal or admin pages) if the web + # server should not run on this machine. + if [ "$PLC_WWW_ENABLED" != "1" ] ; then + sed -i -e "s@^DocumentRoot.*@DocumentRoot \"/data$DocumentRoot\"@" $httpd_conf + ln -nsf $DocumentRoot/PlanetLabConf /data$DocumentRoot/PlanetLabConf + else + sed -i -e "s@^DocumentRoot.*@DocumentRoot \"$DocumentRoot\"@" $httpd_conf + rm -f /data$DocumentRoot/PlanetLabConf + fi + # Set the default include path - include_path=".:$DocumentRoot/includes:$DocumentRoot/generated:/etc/planetlab/php" - sed -i -e "s@;include_path = \"\.:.*\"@include_path = \"$include_path\"@" $php_ini + include_path=".:$DocumentRoot/planetlab/includes:$DocumentRoot/generated:/etc/planetlab/php:/usr/share/plc_api/php" + sed -i -e "s@[;]*include_path = \"\.:.*\"@include_path = \"$include_path\"@" $php_ini # Disable default Listen directive sed -i -e '/^Listen/d' $httpd_conf @@ -62,7 +76,10 @@ case "$1" in if [ "$server" = "$previous_server" ] ; then break fi - previous_hostname=PLC_${previous_server}_HOST + previous_enabled=PLC_${previous_server}_ENABLED + if [ "${!previous_enabled}" != "1" ] ; then + continue + fi previous_http_port=PLC_${previous_server}_PORT previous_https_port=PLC_${previous_server}_SSL_PORT @@ -74,17 +91,20 @@ case "$1" in fi done - # Listen on these ports + # HTTP configuration if [ $skip_http -eq 0 -a -n "${!http_port}" ] ; then cat < Redirect /db https://$PLC_WWW_HOST:$PLC_WWW_SSL_PORT/db - # XXX Not yet until we can get rid of oldapi - # Redirect /$PLC_API_PATH https://$PLC_API_HOST:$PLC_API_PORT/$PLC_API_PATH + Redirect /planetlab https://$PLC_WWW_HOST:$PLC_WWW_SSL_PORT/planetlab + Redirect /$PLC_API_PATH https://$PLC_API_HOST:$PLC_API_PORT/$PLC_API_PATH EOF fi + + # HTTPS configuration if [ $skip_https -eq 0 -a -n "${!https_port}" ] ; then # XXX Cannot support NameVirtualHost over SSL. If # the API, boot, and web servers are all running @@ -102,9 +122,9 @@ EOF if [ "$PLC_API_ENABLED" = "1" ] ; then cat < - SetHandler python-program + SetHandler mod_python PythonPath "sys.path + ['/usr/share/plc_api']" - PythonHandler mod_pythonXMLRPC + PythonHandler ModPython EOF else @@ -117,9 +137,7 @@ EOF if [ "$PLC_WWW_ENABLED" != "1" ] ; then cat < - Deny from all - +Redirect /index.html http://$PLC_WWW_HOST:$PLC_WWW_PORT/ EOF fi ) >>$plc_conf @@ -127,6 +145,52 @@ EOF # Make alpina-logs directory writable for bootmanager log upload chown apache:apache $DocumentRoot/alpina-logs/nodes + # Make the Drupal files upload directory owned by Apache + mkdir -p $DocumentRoot/files + chown apache:apache $DocumentRoot/files + + # Symlink any (real) files or directories in + # /data/var/www/html/* to /var/www/html/. We could descend + # into subdirectories, but the code to do so properly would be + # madness. + for file in /data/$DocumentRoot/* ; do + if [ -e "$file" -a ! -h "$file" ] ; then + base=$(basename "$file") + if [ ! -e "$DocumentRoot/$base" ] ; then + ln -nsf "$file" "$DocumentRoot/$base" + fi + fi + done + + # Cleanup broken symlinks + for file in $DocumentRoot/* ; do + if [ -h "$file" -a ! -e "$file" ] ; then + rm -f "$file" + fi + done + + # Old style PHP constants + mkdir -p /etc/planetlab/php + cat >/etc/planetlab/php/site_constants.php <<"EOF" +'); +define('PLANETLAB_SUPPORT_EMAIL_ONLY', PLC_MAIL_SUPPORT_ADDRESS); +?> +EOF + plc_daemon httpd check