Created
September 2, 2015 23:57
-
-
Save kellegous/3fae3de858c2939516b7 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env python2.7 | |
| import optparse | |
| import os | |
| import subprocess | |
| import sys | |
| import tempfile | |
| import time | |
| HTTPD_PATH = '/usr/sbin/httpd' | |
| INITDB_PATH = '/usr/local/bin/initdb' | |
| POSTGRES_PATH = '/usr/local/bin/postgres' | |
| MEMCACHE_PATH = '/usr/local/bin/memcached' | |
| def start_apache(opts, procs): | |
| def emit_conf(dst): | |
| with open(dst, 'w') as w: | |
| w.write(HTTP_CONF_TEMPLATE % { | |
| 'DATADIR': opts.data_dir, | |
| 'PORT': opts.port, | |
| 'DOCROOT': opts.doc_root | |
| }) | |
| conf = os.path.join(opts.data_dir, 'httpd.conf') | |
| emit_conf(conf) | |
| env = os.environ | |
| env['PHPRC'] = os.path.abspath(opts.data_dir) | |
| env['USE_ZEND_ALLOC'] = '0' | |
| procs.append(subprocess.Popen([ | |
| HTTPD_PATH, '-DFOREGROUND', '-d.', '-f%s' % conf | |
| ], env=env)) | |
| def ensure_kernel_settings(): | |
| out, _ = subprocess.Popen(['sysctl', '-n', 'kern.sysv.shmall'], stdout=subprocess.PIPE).communicate() | |
| shmall = int(out.strip()) | |
| if shmall < 65536: | |
| subprocess.call(['sudo', 'sysctl', '-w', 'kern.sysv.shmall=65536']) | |
| out, _ = subprocess.Popen(['sysctl', '-n', 'kern.sysv.shmmax'], stdout=subprocess.PIPE).communicate() | |
| shmmax = int(out.strip()) | |
| if shmmax < 16777216: | |
| subprocess.call(['sudo', 'sysctl', '-w', 'kern.sysv.shmmax=16777216']) | |
| def start_postgres(opts, procs): | |
| ensure_kernel_settings() | |
| dir = os.path.join(opts.data_dir, 'pg_data') | |
| if not os.path.exists(dir): | |
| if subprocess.call([INITDB_PATH, '-D', dir, '--auth-local=trust']) != 0: | |
| raise RuntimeError() | |
| procs.append(subprocess.Popen([POSTGRES_PATH, '-D', dir])) | |
| def start_memcached(opts, procs): | |
| procs.append(subprocess.Popen([MEMCACHE_PATH])) | |
| def ensure_dir(dir): | |
| if not os.path.exists(dir): | |
| os.makedirs(dir) | |
| def main(): | |
| parser = optparse.OptionParser() | |
| parser.add_option('--doc_root', | |
| dest='doc_root', | |
| default=None, | |
| help='') | |
| parser.add_option('--data_dir', | |
| dest='data_dir', | |
| default='data', | |
| help='') | |
| parser.add_option('--disable_pg', | |
| dest='enable_pg', | |
| action='store_false', | |
| default=True, | |
| help='') | |
| parser.add_option('--disable_memcached', | |
| dest='enable_memcached', | |
| action='store_false', | |
| default=True, | |
| help='') | |
| parser.add_option('--port', | |
| dest='port', | |
| default='8086') | |
| opts, args = parser.parse_args() | |
| if not opts.doc_root: | |
| opts.doc_root = os.getcwd() | |
| else: | |
| opts.doc_root = os.path.abspath(opts.doc_root) | |
| ensure_dir(opts.data_dir) | |
| procs = [] | |
| if opts.enable_pg: | |
| start_postgres(opts, procs) | |
| if opts.enable_memcached: | |
| start_memcached(opts, procs) | |
| try: | |
| while True: | |
| start_apache(opts, procs) | |
| procs[-1].wait() | |
| print 'crashed, restarting...' | |
| procs.pop() | |
| except KeyboardInterrupt: | |
| pass | |
| for p in procs: | |
| try: | |
| p.kill() | |
| except: | |
| pass | |
| HTTP_CONF_TEMPLATE = """ | |
| LoadModule authn_file_module /usr/libexec/apache2/mod_authn_file.so | |
| LoadModule authn_dbm_module /usr/libexec/apache2/mod_authn_dbm.so | |
| LoadModule authn_anon_module /usr/libexec/apache2/mod_authn_anon.so | |
| LoadModule authn_dbd_module /usr/libexec/apache2/mod_authn_dbd.so | |
| LoadModule authn_default_module /usr/libexec/apache2/mod_authn_default.so | |
| LoadModule authz_host_module /usr/libexec/apache2/mod_authz_host.so | |
| LoadModule authz_groupfile_module /usr/libexec/apache2/mod_authz_groupfile.so | |
| LoadModule authz_user_module /usr/libexec/apache2/mod_authz_user.so | |
| LoadModule authz_dbm_module /usr/libexec/apache2/mod_authz_dbm.so | |
| LoadModule authz_owner_module /usr/libexec/apache2/mod_authz_owner.so | |
| LoadModule authz_default_module /usr/libexec/apache2/mod_authz_default.so | |
| LoadModule auth_basic_module /usr/libexec/apache2/mod_auth_basic.so | |
| LoadModule auth_digest_module /usr/libexec/apache2/mod_auth_digest.so | |
| LoadModule cache_module /usr/libexec/apache2/mod_cache.so | |
| LoadModule disk_cache_module /usr/libexec/apache2/mod_disk_cache.so | |
| LoadModule mem_cache_module /usr/libexec/apache2/mod_mem_cache.so | |
| LoadModule dbd_module /usr/libexec/apache2/mod_dbd.so | |
| LoadModule dumpio_module /usr/libexec/apache2/mod_dumpio.so | |
| LoadModule reqtimeout_module /usr/libexec/apache2/mod_reqtimeout.so | |
| LoadModule ext_filter_module /usr/libexec/apache2/mod_ext_filter.so | |
| LoadModule include_module /usr/libexec/apache2/mod_include.so | |
| LoadModule filter_module /usr/libexec/apache2/mod_filter.so | |
| LoadModule substitute_module /usr/libexec/apache2/mod_substitute.so | |
| LoadModule deflate_module /usr/libexec/apache2/mod_deflate.so | |
| LoadModule log_config_module /usr/libexec/apache2/mod_log_config.so | |
| LoadModule log_forensic_module /usr/libexec/apache2/mod_log_forensic.so | |
| LoadModule logio_module /usr/libexec/apache2/mod_logio.so | |
| LoadModule env_module /usr/libexec/apache2/mod_env.so | |
| LoadModule mime_magic_module /usr/libexec/apache2/mod_mime_magic.so | |
| LoadModule cern_meta_module /usr/libexec/apache2/mod_cern_meta.so | |
| LoadModule expires_module /usr/libexec/apache2/mod_expires.so | |
| LoadModule headers_module /usr/libexec/apache2/mod_headers.so | |
| LoadModule ident_module /usr/libexec/apache2/mod_ident.so | |
| LoadModule usertrack_module /usr/libexec/apache2/mod_usertrack.so | |
| LoadModule setenvif_module /usr/libexec/apache2/mod_setenvif.so | |
| LoadModule version_module /usr/libexec/apache2/mod_version.so | |
| LoadModule proxy_module /usr/libexec/apache2/mod_proxy.so | |
| LoadModule proxy_connect_module /usr/libexec/apache2/mod_proxy_connect.so | |
| LoadModule proxy_ftp_module /usr/libexec/apache2/mod_proxy_ftp.so | |
| LoadModule proxy_http_module /usr/libexec/apache2/mod_proxy_http.so | |
| LoadModule proxy_scgi_module /usr/libexec/apache2/mod_proxy_scgi.so | |
| LoadModule proxy_ajp_module /usr/libexec/apache2/mod_proxy_ajp.so | |
| LoadModule proxy_balancer_module /usr/libexec/apache2/mod_proxy_balancer.so | |
| LoadModule ssl_module /usr/libexec/apache2/mod_ssl.so | |
| LoadModule mime_module /usr/libexec/apache2/mod_mime.so | |
| LoadModule dav_module /usr/libexec/apache2/mod_dav.so | |
| LoadModule status_module /usr/libexec/apache2/mod_status.so | |
| LoadModule autoindex_module /usr/libexec/apache2/mod_autoindex.so | |
| LoadModule asis_module /usr/libexec/apache2/mod_asis.so | |
| LoadModule info_module /usr/libexec/apache2/mod_info.so | |
| LoadModule cgi_module /usr/libexec/apache2/mod_cgi.so | |
| LoadModule dav_fs_module /usr/libexec/apache2/mod_dav_fs.so | |
| LoadModule vhost_alias_module /usr/libexec/apache2/mod_vhost_alias.so | |
| LoadModule negotiation_module /usr/libexec/apache2/mod_negotiation.so | |
| LoadModule dir_module /usr/libexec/apache2/mod_dir.so | |
| LoadModule imagemap_module /usr/libexec/apache2/mod_imagemap.so | |
| LoadModule actions_module /usr/libexec/apache2/mod_actions.so | |
| LoadModule speling_module /usr/libexec/apache2/mod_speling.so | |
| LoadModule userdir_module /usr/libexec/apache2/mod_userdir.so | |
| LoadModule alias_module /usr/libexec/apache2/mod_alias.so | |
| LoadModule rewrite_module /usr/libexec/apache2/mod_rewrite.so | |
| LoadModule hfs_apple_module /usr/libexec/apache2/mod_hfs_apple.so | |
| LoadModule php5_module /usr/libexec/apache2/libphp5.so | |
| # These can also be turned into an Include. | |
| PidFile %(DATADIR)s/httpd.pid | |
| LockFile %(DATADIR)s/httpd.lock | |
| # Can be substituted for a variable in an Include. | |
| Listen %(PORT)s | |
| NameVirtualHost *:%(PORT)s | |
| # Just put this here to stop the startup error. Can be replaced with something else. | |
| ServerName test | |
| Include /etc/apache2/extra/httpd-autoindex.conf | |
| Include /etc/apache2/extra/httpd-default.conf | |
| Include /etc/apache2/extra/httpd-info.conf | |
| ErrorLog %(DATADIR)s/error.log | |
| <VirtualHost *:%(PORT)s> | |
| DocumentRoot %(DOCROOT)s | |
| AddType application/x-httpd-php .php | |
| AddType application/x-httpd-php-source .phps | |
| DirectoryIndex index.html index.php | |
| <Directory /> | |
| Options FollowSymLinks | |
| AllowOverride None | |
| </Directory> | |
| # Possible values include: debug, info, notice, warn, error, crit, | |
| # alert, emerg. | |
| LogLevel warn | |
| </VirtualHost> | |
| """ | |
| if __name__ == '__main__': | |
| sys.exit(main()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment