run_apache2.py revision fe33f987cb61d8a5c22f207df6d47d2346828af7
174b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski#!/usr/bin/python 2073d2c9aa96f6265bacb5c6abc609ca265f60488Maksymilian Osowski# 3073d2c9aa96f6265bacb5c6abc609ca265f60488Maksymilian Osowski# Copyright (C) 2010 The Android Open Source Project 4073d2c9aa96f6265bacb5c6abc609ca265f60488Maksymilian Osowski# 5073d2c9aa96f6265bacb5c6abc609ca265f60488Maksymilian Osowski# Licensed under the Apache License, Version 2.0 (the "License"); 6073d2c9aa96f6265bacb5c6abc609ca265f60488Maksymilian Osowski# you may not use this file except in compliance with the License. 7073d2c9aa96f6265bacb5c6abc609ca265f60488Maksymilian Osowski# You may obtain a copy of the License at 8073d2c9aa96f6265bacb5c6abc609ca265f60488Maksymilian Osowski# 9073d2c9aa96f6265bacb5c6abc609ca265f60488Maksymilian Osowski# http://www.apache.org/licenses/LICENSE-2.0 10073d2c9aa96f6265bacb5c6abc609ca265f60488Maksymilian Osowski# 11073d2c9aa96f6265bacb5c6abc609ca265f60488Maksymilian Osowski# Unless required by applicable law or agreed to in writing, software 12073d2c9aa96f6265bacb5c6abc609ca265f60488Maksymilian Osowski# distributed under the License is distributed on an "AS IS" BASIS, 13073d2c9aa96f6265bacb5c6abc609ca265f60488Maksymilian Osowski# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14073d2c9aa96f6265bacb5c6abc609ca265f60488Maksymilian Osowski# See the License for the specific language governing permissions and 15073d2c9aa96f6265bacb5c6abc609ca265f60488Maksymilian Osowski# limitations under the License. 16073d2c9aa96f6265bacb5c6abc609ca265f60488Maksymilian Osowski# 1774b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski"""Start, stop, or restart apache2 server. 1874b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski 1974b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski Apache2 must be installed with mod_php! 2074b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski 2174b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski Usage: 220e4d86fddf2c9664f2fd44247e5688f077b95d5eSteve Block run_apache2.py start|stop|restart 2374b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski""" 2474b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski 2574b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowskiimport sys 2674b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowskiimport os 2774b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowskiimport subprocess 2874b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowskiimport logging 2974b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski 3074b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowskidef main(): 3174b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski if len(sys.argv) < 2: 3274b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski run_cmd = "" 3374b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski else: 3474b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski run_cmd = sys.argv[1] 3574b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski 3674b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski #Setup logging class 3774b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski logging.basicConfig(level=logging.INFO, format='%(message)s') 3874b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski 3974b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski if not run_cmd in ("start", "stop", "restart"): 4074b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski logging.info("illegal argument: " + run_cmd) 410e4d86fddf2c9664f2fd44247e5688f077b95d5eSteve Block logging.info("Usage: python run_apache2.py start|stop|restart") 4274b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski return 4374b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski 4474b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski #Create /tmp/WebKit if it doesn't exist. This is needed for various files used by apache2 4574b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski tmp_WebKit = os.path.join("/tmp", "WebKit") 4674b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski if not os.path.exists(tmp_WebKit): 4774b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski os.mkdir(tmp_WebKit) 4874b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski 4974b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski #Get the path to android tree root based on the script location. 5074b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski #Basically we go 5 levels up 5174b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski parent = os.pardir 5274b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski script_location = os.path.abspath(os.path.dirname(sys.argv[0])) 5374b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski android_tree_root = os.path.join(script_location, parent, parent, parent, parent, parent) 5474b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski android_tree_root = os.path.normpath(android_tree_root) 5574b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski 5674b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski #Prepare the command to set ${APACHE_RUN_USER} and ${APACHE_RUN_GROUP} 5774b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski envvars_path = os.path.join("/etc", "apache2", "envvars") 5874b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski export_envvars_cmd = "source " + envvars_path 5974b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski 6074b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski error_log_path = os.path.join(tmp_WebKit, "apache2-error.log") 61fe33f987cb61d8a5c22f207df6d47d2346828af7Maksymilian Osowski custom_log_path = os.path.join(tmp_WebKit, "apache2-access.log") 6274b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski 6374b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski #Prepare the command to (re)start/stop the server with specified settings 6474b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski apache2_restart_cmd = "apache2 -k " + run_cmd 6574b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski directives = " -c \"ServerRoot " + android_tree_root + "\"" 6674b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski directives += " -c \"DocumentRoot " + os.path.join("external", "webkit") + "\"" 6774b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski 6874b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski #This directive is commented out in apache2-debian-httpd.conf for some reason 6974b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski #However, it is useful to browse through tests in the browser, so it's added here. 7074b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski #One thing to note is that because of problems with mod_dir and port numbers, mod_dir 7174b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski #is turned off. That means that there _must_ be a trailing slash at the end of URL 7274b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski #for auto indexes to work correctly. 7374b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski directives += " -c \"LoadModule autoindex_module /usr/lib/apache2/modules/mod_autoindex.so\"" 7474b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski 7574b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski directives += " -c \"ErrorLog " + error_log_path +"\"" 76fe33f987cb61d8a5c22f207df6d47d2346828af7Maksymilian Osowski directives += " -c \"CustomLog " + custom_log_path + " combined\"" 7774b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski directives += " -c \"SSLCertificateFile " + os.path.join ("external", "webkit", "LayoutTests", 7874b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski "http", "conf", "webkit-httpd.pem") + "\"" 7974b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski directives += " -c \"User ${APACHE_RUN_USER}\"" 8074b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski directives += " -c \"Group ${APACHE_RUN_GROUP}\"" 8174b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski directives += " -C \"TypesConfig " + os.path.join("/etc", "mime.types") + "\"" 8274b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski conf_file_cmd = " -f " + os.path.join(android_tree_root, "external", "webkit", "LayoutTests", 8374b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski "http", "conf", "apache2-debian-httpd.conf") 8474b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski 8574b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski #Try to execute the commands 8674b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski logging.info("Will " + run_cmd + " apache2 server.") 8774b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski cmd = export_envvars_cmd + " && " + apache2_restart_cmd + directives + conf_file_cmd 8874b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 8974b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski (out, err) = p.communicate() 9074b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski 9174b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski #Output the stdout from the command to console 9274b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski logging.info(out) 9374b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski 9474b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski #Report any errors 9574b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski if p.returncode != 0: 9674b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski logging.info("!! ERRORS:") 9774b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski 9874b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski if err.find(envvars_path) != -1: 9974b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski logging.info(err) 10074b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski elif err.find('command not found') != -1: 10174b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski logging.info("apache2 is probably not installed") 10274b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski else: 10374b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski logging.info(err) 10474b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski logging.info("Try looking in " + error_log_path + " for details") 10574b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski else: 10674b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski logging.info("OK") 10774b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski 10874b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowskiif __name__ == "__main__": 10974b13aecbe4116ce33da8ed99f1b5941ecda6505Maksymilian Osowski main(); 110