"""Stack Plugin for WordOps""" from cement.core.controller import CementBaseController, expose from cement.core import handler, hook from wo.cli.plugins.site_functions import * from wo.core.variables import WOVariables from wo.core.aptget import WOAptGet from wo.core.download import WODownload from wo.core.shellexec import WOShellExec, CommandExecutionError from wo.core.fileutils import WOFileUtils from wo.core.apt_repo import WORepo from wo.core.extract import WOExtract from wo.core.mysql import WOMysql from wo.core.addswap import WOSwap from wo.core.git import WOGit from wo.core.checkfqdn import check_fqdn from pynginxconfig import NginxConfig from wo.core.services import WOService from wo.core.variables import WOVariables import random import string import configparser import time import shutil import os import pwd import grp import codecs import platform from wo.cli.plugins.stack_services import WOStackStatusController from wo.cli.plugins.stack_migrate import WOStackMigrateController from wo.cli.plugins.stack_upgrade import WOStackUpgradeController from wo.core.logging import Log from wo.cli.plugins.sitedb import * def wo_stack_hook(app): pass class WOStackController(CementBaseController): class Meta: label = 'stack' stacked_on = 'base' stacked_type = 'nested' description = 'Stack command manages stack operations' arguments = [ (['--all'], dict(help='Install all stacks at once', action='store_true')), (['--web'], dict(help='Install web stack', action='store_true')), (['--admin'], dict(help='Install admin tools stack', action='store_true')), (['--nginx'], dict(help='Install Nginx stack', action='store_true')), # (['--nginxmainline'], # dict(help='Install Nginx mainline stack', action='store_true')), (['--php'], dict(help='Install PHP stack', action='store_true')), (['--php72'], dict(help='Install PHP 7.2 stack', action='store_true')), (['--mysql'], dict(help='Install MySQL stack', action='store_true')), (['--hhvm'], dict(help='Install HHVM stack', action='store_true')), (['--wpcli'], dict(help='Install WPCLI stack', action='store_true')), (['--phpmyadmin'], dict(help='Install PHPMyAdmin stack', action='store_true')), (['--adminer'], dict(help='Install Adminer stack', action='store_true')), (['--utils'], dict(help='Install Utils stack', action='store_true')), (['--redis'], dict(help='Install Redis', action='store_true')), (['--phpredisadmin'], dict(help='Install phpRedisAdmin', action='store_true')), ] usage = "ee stack (command) [options]" @expose(hide=True) def default(self): """default action of wo stack command""" self.app.args.print_help() @expose(hide=True) def pre_pref(self, apt_packages): """Pre settings to do before installation packages""" if set(WOVariables.wo_mysql).issubset(set(apt_packages)): Log.info(self, "Adding repository for MySQL, please wait...") mysql_pref = ("Package: *\nPin: origin sfo1.mirrors.digitalocean.com" "\nPin-Priority: 1000\n") with open('/etc/apt/preferences.d/' 'MariaDB.pref', 'w') as mysql_pref_file: mysql_pref_file.write(mysql_pref) WORepo.add(self, repo_url=WOVariables.wo_mysql_repo) Log.debug(self, 'Adding key for {0}' .format(WOVariables.wo_mysql_repo)) WORepo.add_key(self, '0xcbcb082a1bb943db', keyserver="keyserver.ubuntu.com") WORepo.add_key(self, '0xF1656F24C74CD1D8', keyserver="keyserver.ubuntu.com") chars = ''.join(random.sample(string.ascii_letters, 8)) Log.debug(self, "Pre-seeding MySQL") Log.debug(self, "echo \"mariadb-server-10.1 " "mysql-server/root_password " "password \" | " "debconf-set-selections") try: WOShellExec.cmd_exec(self, "echo \"mariadb-server-10.1 " "mysql-server/root_password " "password {chars}\" | " "debconf-set-selections" .format(chars=chars), log=False) except CommandExecutionError as e: Log.error("Failed to initialize MySQL package") Log.debug(self, "echo \"mariadb-server-10.1 " "mysql-server/root_password_again " "password \" | " "debconf-set-selections") try: WOShellExec.cmd_exec(self, "echo \"mariadb-server-10.1 " "mysql-server/root_password_again " "password {chars}\" | " "debconf-set-selections" .format(chars=chars), log=False) except CommandExecutionError as e: Log.error("Failed to initialize MySQL package") mysql_config = """ [client] user = root password = {chars} """.format(chars=chars) config = configparser.ConfigParser() config.read_string(mysql_config) Log.debug(self, 'Writting configuration into MySQL file') conf_path = "/etc/mysql/conf.d/my.cnf" os.makedirs(os.path.dirname(conf_path), exist_ok=True) with open(conf_path, encoding='utf-8', mode='w') as configfile: config.write(configfile) Log.debug(self, 'Setting my.cnf permission') WOFileUtils.chmod(self, "/etc/mysql/conf.d/my.cnf", 0o600) if set(WOVariables.wo_nginx).issubset(set(apt_packages)): Log.info(self, "Adding repository for NGINX, please wait...") WORepo.add(self, repo_url=WOVariables.wo_nginx_repo) Log.debug(self, 'Adding ppa of Nginx') WORepo.add_key(self, WOVariables.wo_nginx_key) if (WOVariables.wo_platform_codename == 'trusty' or WOVariables.wo_platform_codename == 'xenial' or WOVariables.wo_platform_codename == 'bionic'): if set(WOVariables.wo_php72).issubset(set(apt_packages)): Log.info(self, "Adding repository for PHP, please wait...") Log.debug(self, 'Adding ppa for PHP') WORepo.add(self, ppa=WOVariables.wo_php_repo) else: if set(WOVariables.wo_php).issubset(set(apt_packages)): Log.info(self, "Adding repository for PHP, please wait...") # Add repository for php if WOVariables.wo_platform_distro == 'debian': if WOVariables.wo_platform_codename != 'jessie': Log.debug(self, 'Adding repo_url of php for debian') WORepo.add(self, repo_url=WOVariables.wo_php_repo) Log.debug(self, 'Adding Dotdeb/php GPG key') WORepo.add_key(self, '89DF5277') else: Log.debug(self, 'Adding ppa for PHP') WORepo.add(self, ppa=WOVariables.wo_php_repo) if WOVariables.wo_platform_codename == 'jessie': if set(WOVariables.wo_php72).issubset(set(apt_packages)): Log.debug(self, 'Adding repo_url of php 7.0 for debian') WORepo.add(self, repo_url=WOVariables.wo_php_repo) Log.debug(self, 'Adding Dotdeb/php GPG key') WORepo.add_key(self, '89DF5277') if set(WOVariables.wo_hhvm).issubset(set(apt_packages)): if (WOVariables.wo_platform_codename != 'xenial' or WOVariables.wo_platform_codename != 'bionic'): Log.info(self, "Adding repository for HHVM, please wait...") if WOVariables.wo_platform_codename == 'precise': Log.debug(self, 'Adding PPA for Boost') WORepo.add(self, ppa=WOVariables.wo_boost_repo) Log.debug(self, 'Adding ppa repo for HHVM') WORepo.add(self, repo_url=WOVariables.wo_hhvm_repo) Log.debug(self, 'Adding HHVM GPG Key') WORepo.add_key(self, '0x5a16e7281be7a449') else: Log.info(self, "Using default Ubuntu repository for HHVM") if set(WOVariables.wo_redis).issubset(set(apt_packages)): Log.info(self, "Adding repository for Redis, please wait...") if WOVariables.wo_platform_distro == 'debian': Log.debug(self, 'Adding repo_url of redis for debian') WORepo.add(self, repo_url=WOVariables.wo_redis_repo) Log.debug(self, 'Adding Dotdeb GPG key') WORepo.add_key(self, '89DF5277') else: Log.debug(self, 'Adding ppa for redis') WORepo.add(self, ppa=WOVariables.wo_redis_repo) @expose(hide=True) def post_pref(self, apt_packages, packages): """Post activity after installation of packages""" if len(apt_packages): if set(WOVariables.wo_nginx).issubset(set(apt_packages)): if set(["nginx-plus"]).issubset(set(apt_packages)) or set(["nginx"]).issubset(set(apt_packages)): # Fix for white screen death with NGINX PLUS if not WOFileUtils.grep(self, '/etc/nginx/fastcgi_params', 'SCRIPT_FILENAME'): with open('/etc/nginx/fastcgi_params', encoding='utf-8', mode='a') as wo_nginx: wo_nginx.write('fastcgi_param \tSCRIPT_FILENAME ' '\t$request_filename;\n') if not (os.path.isfile('/etc/nginx/common/wpfc.conf')): # Change WordOpsVersion in nginx.conf file WOFileUtils.searchreplace(self, "/etc/nginx/nginx.conf", "# add_header", "add_header") WOFileUtils.searchreplace(self, "/etc/nginx/nginx.conf", "\"WordOps\"", "\"WordOps{0}\"" .format(WOVariables.wo_version)) data = dict() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/conf.d/blockips.conf') wo_nginx = open('/etc/nginx/conf.d/blockips.conf', encoding='utf-8', mode='w') self.app.render((data), 'blockips.mustache', out=wo_nginx) wo_nginx.close() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/conf.d/fastcgi.conf') wo_nginx = open('/etc/nginx/conf.d/fastcgi.conf', encoding='utf-8', mode='w') self.app.render((data), 'fastcgi.mustache', out=wo_nginx) wo_nginx.close() data = dict(php="9000", debug="9001", hhvm="8000",php72="9072",debug7="9172", hhvmconf=False, php7conf= True if WOAptGet.is_installed(self,'php7.2-fpm') else False ) Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/conf.d/upstream.conf') wo_nginx = open('/etc/nginx/conf.d/upstream.conf', encoding='utf-8', mode='w') self.app.render((data), 'upstream.mustache', out=wo_nginx) wo_nginx.close() # Setup Nginx common directory if not os.path.exists('/etc/nginx/common'): Log.debug(self, 'Creating directory' '/etc/nginx/common') os.makedirs('/etc/nginx/common') # http2 = ("http2" if set(["nginx-mainline"]).issubset(set(apt_packages)) else "spdy") data = dict(webroot=WOVariables.wo_webroot) Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/acl.conf') wo_nginx = open('/etc/nginx/common/acl.conf', encoding='utf-8', mode='w') self.app.render((data), 'acl.mustache', out=wo_nginx) wo_nginx.close() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/locations.conf') wo_nginx = open('/etc/nginx/common/locations.conf', encoding='utf-8', mode='w') self.app.render((data), 'locations.mustache', out=wo_nginx) wo_nginx.close() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/php.conf') wo_nginx = open('/etc/nginx/common/php.conf', encoding='utf-8', mode='w') self.app.render((data), 'php.mustache', out=wo_nginx) wo_nginx.close() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/wpcommon.conf') wo_nginx = open('/etc/nginx/common/wpcommon.conf', encoding='utf-8', mode='w') self.app.render((data), 'wpcommon.mustache', out=wo_nginx) wo_nginx.close() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/wpfc.conf') wo_nginx = open('/etc/nginx/common/wpfc.conf', encoding='utf-8', mode='w') self.app.render((data), 'wpfc.mustache', out=wo_nginx) wo_nginx.close() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/wpsc.conf') wo_nginx = open('/etc/nginx/common/wpsc.conf', encoding='utf-8', mode='w') self.app.render((data), 'wpsc.mustache', out=wo_nginx) wo_nginx.close() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/wpsubdir.conf') wo_nginx = open('/etc/nginx/common/wpsubdir.conf', encoding='utf-8', mode='w') self.app.render((data), 'wpsubdir.mustache', out=wo_nginx) wo_nginx.close() #php7 conf if (WOVariables.wo_platform_codename == 'stretch' or WOVariables.wo_platform_codename == 'jessie' or WOVariables.wo_platform_codename == 'trusty' or WOVariables.wo_platform_codename == 'xenial' or WOVariables.wo_platform_codename == 'bionic') and (not os.path.isfile("/etc/nginx/common/php7.conf")): #data = dict() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/locations-php7.conf') wo_nginx = open('/etc/nginx/common/locations-php7.conf', encoding='utf-8', mode='w') self.app.render((data), 'locations-php7.mustache', out=wo_nginx) wo_nginx.close() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/php7.conf') wo_nginx = open('/etc/nginx/common/php7.conf', encoding='utf-8', mode='w') self.app.render((data), 'php7.mustache', out=wo_nginx) wo_nginx.close() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/wpcommon-php7.conf') wo_nginx = open('/etc/nginx/common/wpcommon-php7.conf', encoding='utf-8', mode='w') self.app.render((data), 'wpcommon-php7.mustache', out=wo_nginx) wo_nginx.close() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/wpfc-php7.conf') wo_nginx = open('/etc/nginx/common/wpfc-php7.conf', encoding='utf-8', mode='w') self.app.render((data), 'wpfc-php7.mustache', out=wo_nginx) wo_nginx.close() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/wpsc-php7.conf') wo_nginx = open('/etc/nginx/common/wpsc-php7.conf', encoding='utf-8', mode='w') self.app.render((data), 'wpsc-php7.mustache', out=wo_nginx) wo_nginx.close() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/redis-php7.conf') wo_nginx = open('/etc/nginx/common/redis-php7.conf', encoding='utf-8', mode='w') self.app.render((data), 'redis-php7.mustache', out=wo_nginx) wo_nginx.close() # Nginx-Plus does not have nginx package structure like this # So creating directories if set(["nginx-plus"]).issubset(set(apt_packages)) or set(["nginx"]).issubset(set(apt_packages)): Log.info(self, "Installing WordOpsConfigurations for" "NGINX") if not os.path.exists('/etc/nginx/sites-available'): Log.debug(self, 'Creating directory' '/etc/nginx/sites-available') os.makedirs('/etc/nginx/sites-available') if not os.path.exists('/etc/nginx/sites-enabled'): Log.debug(self, 'Creating directory' '/etc/nginx/sites-available') os.makedirs('/etc/nginx/sites-enabled') # 22222 port settings Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/sites-available/' '22222') wo_nginx = open('/etc/nginx/sites-available/22222', encoding='utf-8', mode='w') self.app.render((data), '22222.mustache', out=wo_nginx) wo_nginx.close() passwd = ''.join([random.choice (string.ascii_letters + string.digits) for n in range(6)]) try: WOShellExec.cmd_exec(self, "printf \"WordOps:" "$(openssl passwd -crypt " "{password} 2> /dev/null)\n\"" "> /etc/nginx/htpasswd-wo " "2>/dev/null" .format(password=passwd)) except CommandExecutionError as e: Log.error(self, "Failed to save HTTP Auth") # Create Symbolic link for 22222 WOFileUtils.create_symlink(self, ['/etc/nginx/' 'sites-available/' '22222', '/etc/nginx/' 'sites-enabled/' '22222']) # Create log and cert folder and softlinks if not os.path.exists('{0}22222/logs' .format(WOVariables.wo_webroot)): Log.debug(self, "Creating directory " "{0}22222/logs " .format(WOVariables.wo_webroot)) os.makedirs('{0}22222/logs' .format(WOVariables.wo_webroot)) if not os.path.exists('{0}22222/cert' .format(WOVariables.wo_webroot)): Log.debug(self, "Creating directory " "{0}22222/cert" .format(WOVariables.wo_webroot)) os.makedirs('{0}22222/cert' .format(WOVariables.wo_webroot)) WOFileUtils.create_symlink(self, ['/var/log/nginx/' '22222.access.log', '{0}22222/' 'logs/access.log' .format(WOVariables.wo_webroot)] ) WOFileUtils.create_symlink(self, ['/var/log/nginx/' '22222.error.log', '{0}22222/' 'logs/error.log' .format(WOVariables.wo_webroot)] ) try: WOShellExec.cmd_exec(self, "openssl genrsa -out " "{0}22222/cert/22222.key 2048" .format(WOVariables.wo_webroot)) WOShellExec.cmd_exec(self, "openssl req -new -batch " "-subj /commonName=127.0.0.1/ " "-key {0}22222/cert/22222.key " "-out {0}22222/cert/" "22222.csr" .format(WOVariables.wo_webroot)) WOFileUtils.mvfile(self, "{0}22222/cert/22222.key" .format(WOVariables.wo_webroot), "{0}22222/cert/" "22222.key.org" .format(WOVariables.wo_webroot)) WOShellExec.cmd_exec(self, "openssl rsa -in " "{0}22222/cert/" "22222.key.org -out " "{0}22222/cert/22222.key" .format(WOVariables.wo_webroot)) WOShellExec.cmd_exec(self, "openssl x509 -req -days " "3652 -in {0}22222/cert/" "22222.csr -signkey {0}" "22222/cert/22222.key -out " "{0}22222/cert/22222.crt" .format(WOVariables.wo_webroot)) except CommandExecutionError as e: Log.error(self, "Failed to generate HTTPS certificate for 22222") # Nginx Configation into GIT WOGit.add(self, ["/etc/nginx"], msg="Adding Nginx into Git") WOService.reload_service(self, 'nginx') if set(["nginx-plus"]).issubset(set(apt_packages)) or set(["nginx"]).issubset(set(apt_packages)): WOShellExec.cmd_exec(self, "sed -i -e 's/^user/#user/'" " -e '/^#user/a user" "\ www-data\;'" " /etc/nginx/nginx.conf") if not WOShellExec.cmd_exec(self, "cat /etc/nginx/" "nginx.conf | grep -q " "'/etc/nginx/sites-enabled'"): WOShellExec.cmd_exec(self, "sed -i '/\/etc\/" "nginx\/conf\.d\/\*" "\.conf/a \ include" "\ \/etc\/nginx\/sites-enabled" "\/*;' /etc/nginx/nginx.conf") # WordOpsconfig for NGINX plus data['version'] = WOVariables.wo_version Log.debug(self, 'Writting for nginx plus configuration' ' to file /etc/nginx/conf.d/wo-plus.conf') wo_nginx = open('/etc/nginx/conf.d/wo-plus.conf', encoding='utf-8', mode='w') self.app.render((data), 'wo-plus.mustache', out=wo_nginx) wo_nginx.close() print("HTTP Auth User Name: WordOps" + "\nHTTP Auth Password : {0}".format(passwd)) WOService.reload_service(self, 'nginx') else: self.msg = (self.msg + ["HTTP Auth User Name: WordOps"] + ["HTTP Auth Password : {0}".format(passwd)]) else: WOService.restart_service(self, 'nginx') if WOAptGet.is_installed(self,'redis-server'): if os.path.isfile("/etc/nginx/nginx.conf") and (not os.path.isfile("/etc/nginx/common/redis.conf")): data = dict() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/redis.conf') wo_nginx = open('/etc/nginx/common/redis.conf', encoding='utf-8', mode='w') self.app.render((data), 'redis.mustache', out=wo_nginx) wo_nginx.close() if os.path.isfile("/etc/nginx/nginx.conf") and (not os.path.isfile("/etc/nginx/common/redis-hhvm.conf")): data = dict() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/redis-hhvm.conf') wo_nginx = open('/etc/nginx/common/redis-hhvm.conf', encoding='utf-8', mode='w') self.app.render((data), 'redis-hhvm.mustache', out=wo_nginx) wo_nginx.close() if (WOVariables.wo_platform_codename == 'trusty' or WOVariables.wo_platform_codename == 'xenial' or WOVariables.wo_platform_codename == 'bionic'): if os.path.isfile("/etc/nginx/nginx.conf") and (not os.path.isfile("/etc/nginx/common/redis-php7.conf")): data = dict() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/redis-php7.conf') wo_nginx = open('/etc/nginx/common/redis-php7.conf', encoding='utf-8', mode='w') self.app.render((data), 'redis-php7.mustache', out=wo_nginx) wo_nginx.close() if os.path.isfile("/etc/nginx/conf.d/upstream.conf"): if not WOFileUtils.grep(self, "/etc/nginx/conf.d/" "upstream.conf", "redis"): with open("/etc/nginx/conf.d/upstream.conf", "a") as redis_file: redis_file.write("upstream redis {\n" " server 127.0.0.1:6379;\n" " keepalive 10;\n}\n") if os.path.isfile("/etc/nginx/nginx.conf") and (not os.path.isfile("/etc/nginx/conf.d/redis.conf")): with open("/etc/nginx/conf.d/redis.conf", "a") as redis_file: redis_file.write("# Log format Settings\n" "log_format rt_cache_redis '$remote_addr $upstream_response_time $srcache_fetch_status [$time_local] '\n" "'$http_host \"$request\" $status $body_bytes_sent '\n" "'\"$http_referer\" \"$http_user_agent\"';\n") #setup nginx common folder for php7 if self.app.pargs.php72: if os.path.isdir("/etc/nginx/common") and (not os.path.isfile("/etc/nginx/common/php7.conf")): data = dict() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/locations-php7.conf') wo_nginx = open('/etc/nginx/common/locations-php7.conf', encoding='utf-8', mode='w') self.app.render((data), 'locations-php7.mustache', out=wo_nginx) wo_nginx.close() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/php7.conf') wo_nginx = open('/etc/nginx/common/php7.conf', encoding='utf-8', mode='w') self.app.render((data), 'php7.mustache', out=wo_nginx) wo_nginx.close() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/wpcommon-php7.conf') wo_nginx = open('/etc/nginx/common/wpcommon-php7.conf', encoding='utf-8', mode='w') self.app.render((data), 'wpcommon-php7.mustache', out=wo_nginx) wo_nginx.close() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/wpfc-php7.conf') wo_nginx = open('/etc/nginx/common/wpfc-php7.conf', encoding='utf-8', mode='w') self.app.render((data), 'wpfc-php7.mustache', out=wo_nginx) wo_nginx.close() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/wpsc-php7.conf') wo_nginx = open('/etc/nginx/common/wpsc-php7.conf', encoding='utf-8', mode='w') self.app.render((data), 'wpsc-php7.mustache', out=wo_nginx) wo_nginx.close() if os.path.isdir("/etc/nginx/common") and (not os.path.isfile("/etc/nginx/common/redis-php7.conf")): data = dict() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/redis-php7.conf') wo_nginx = open('/etc/nginx/common/redis-php7.conf', encoding='utf-8', mode='w') self.app.render((data), 'redis-php7.mustache', out=wo_nginx) wo_nginx.close() if os.path.isfile("/etc/nginx/conf.d/upstream.conf"): if not WOFileUtils.grep(self, "/etc/nginx/conf.d/upstream.conf", "php72"): with open("/etc/nginx/conf.d/upstream.conf", "a") as php_file: php_file.write("upstream php72 {\nserver 127.0.0.1:9072;\n}\n" "upstream debug72 {\nserver 127.0.0.1:9172;\n}\n") if set(WOVariables.wo_hhvm).issubset(set(apt_packages)): WOShellExec.cmd_exec(self, "update-rc.d hhvm defaults") WOFileUtils.searchreplace(self, "/etc/hhvm/server.ini", "9000", "8000") if (WOVariables.wo_platform_codename != 'xenial' or WOVariables.wo_platform_codename != 'bionic'): WOFileUtils.searchreplace(self, "/etc/nginx/hhvm.conf", "9000", "8000") with open("/etc/hhvm/php.ini", "a") as hhvm_file: hhvm_file.write("hhvm.log.header = true\n" "hhvm.log.natives_stack_trace = true\n" "hhvm.mysql.socket = " "/var/run/mysqld/mysqld.sock\n" "hhvm.pdo_mysql.socket = " "/var/run/mysqld/mysqld.sock\n" "hhvm.mysqli.socket = " "/var/run/mysqld/mysqld.sock\n") with open("/etc/hhvm/server.ini", "a") as hhvm_file: hhvm_file.write("hhvm.server.ip = 127.0.0.1\n") if os.path.isfile("/etc/nginx/conf.d/fastcgi.conf"): if not WOFileUtils.grep(self, "/etc/nginx/conf.d/" "fastcgi.conf", "fastcgi_keep_conn"): with open("/etc/nginx/conf.d/fastcgi.conf", "a") as hhvm_file: hhvm_file.write("fastcgi_keep_conn on;\n") if os.path.isfile("/etc/nginx/conf.d/upstream.conf"): if not WOFileUtils.grep(self, "/etc/nginx/conf.d/" "upstream.conf", "hhvm"): with open("/etc/nginx/conf.d/upstream.conf", "a") as hhvm_file: hhvm_file.write("upstream hhvm {\nserver " "127.0.0.1:8000;\n" "server 127.0.0.1:9000 backup;\n}" "\n") WOGit.add(self, ["/etc/hhvm"], msg="Adding HHVM into Git") WOService.restart_service(self, 'hhvm') if os.path.isfile("/etc/nginx/nginx.conf") and (not os.path.isfile("/etc/nginx/common/php-hhvm.conf")): data = dict() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/php-hhvm.conf') wo_nginx = open('/etc/nginx/common/php-hhvm.conf', encoding='utf-8', mode='w') self.app.render((data), 'php-hhvm.mustache', out=wo_nginx) wo_nginx.close() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/wpfc-hhvm.conf') wo_nginx = open('/etc/nginx/common/wpfc-hhvm.conf', encoding='utf-8', mode='w') self.app.render((data), 'wpfc-hhvm.mustache', out=wo_nginx) wo_nginx.close() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/wpsc-hhvm.conf') wo_nginx = open('/etc/nginx/common/wpsc-hhvm.conf', encoding='utf-8', mode='w') self.app.render((data), 'wpsc-hhvm.mustache', out=wo_nginx) wo_nginx.close() if not WOService.reload_service(self, 'nginx'): Log.error(self, "Failed to reload Nginx, please check " "output of `nginx -t`") if set(WOVariables.wo_redis).issubset(set(apt_packages)): if os.path.isfile("/etc/nginx/nginx.conf") and (not os.path.isfile("/etc/nginx/common/redis.conf")): data = dict() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/redis.conf') wo_nginx = open('/etc/nginx/common/redis.conf', encoding='utf-8', mode='w') self.app.render((data), 'redis.mustache', out=wo_nginx) wo_nginx.close() if os.path.isfile("/etc/nginx/nginx.conf") and (not os.path.isfile("/etc/nginx/common/redis-hhvm.conf")): data = dict() Log.debug(self, 'Writting the nginx configuration to ' 'file /etc/nginx/common/redis-hhvm.conf') wo_nginx = open('/etc/nginx/common/redis-hhvm.conf', encoding='utf-8', mode='w') self.app.render((data), 'redis-hhvm.mustache', out=wo_nginx) wo_nginx.close() if os.path.isfile("/etc/nginx/conf.d/upstream.conf"): if not WOFileUtils.grep(self, "/etc/nginx/conf.d/" "upstream.conf", "redis"): with open("/etc/nginx/conf.d/upstream.conf", "a") as redis_file: redis_file.write("upstream redis {\n" " server 127.0.0.1:6379;\n" " keepalive 10;\n}\n") if os.path.isfile("/etc/nginx/nginx.conf") and (not os.path.isfile("/etc/nginx/conf.d/redis.conf")): with open("/etc/nginx/conf.d/redis.conf", "a") as redis_file: redis_file.write("# Log format Settings\n" "log_format rt_cache_redis '$remote_addr $upstream_response_time $srcache_fetch_status [$time_local] '\n" "'$http_host \"$request\" $status $body_bytes_sent '\n" "'\"$http_referer\" \"$http_user_agent\"';\n") if (WOVariables.wo_platform_distro == 'debian' or WOVariables.wo_platform_codename == 'precise') and set(WOVariables.wo_php).issubset(set(apt_packages)): # Create log directories if not os.path.exists('/var/log/php5/'): Log.debug(self, 'Creating directory /var/log/php5/') os.makedirs('/var/log/php5/') # For debian install xdebug if (WOVariables.wo_platform_distro == "debian" and WOVariables.wo_platform_codename == 'wheezy'): WOShellExec.cmd_exec(self, "pecl install xdebug") with open("/etc/php5/mods-available/xdebug.ini", encoding='utf-8', mode='a') as myfile: myfile.write("zend_extension=/usr/lib/php5/20131226/" "xdebug.so\n") WOFileUtils.create_symlink(self, ["/etc/php5/" "mods-available/xdebug.ini", "/etc/php5/fpm/conf.d" "/20-xedbug.ini"]) # Parse etc/php5/fpm/php.ini config = configparser.ConfigParser() Log.debug(self, "configuring php file /etc/php5/fpm/php.ini") config.read('/etc/php5/fpm/php.ini') config['PHP']['expose_php'] = 'Off' config['PHP']['post_max_size'] = '100M' config['PHP']['upload_max_filesize'] = '100M' config['PHP']['max_execution_time'] = '300' config['PHP']['date.timezone'] = WOVariables.wo_timezone with open('/etc/php5/fpm/php.ini', encoding='utf-8', mode='w') as configfile: Log.debug(self, "Writting php configuration into " "/etc/php5/fpm/php.ini") config.write(configfile) #configure /etc/php5/fpm/php-fpm.conf data = dict(pid="/run/php5-fpm.pid", error_log="/var/log/php5/fpm.log", include="/etc/php5/fpm/pool.d/*.conf") Log.debug(self, "writting php configuration into " "/etc/php5/fpm/php-fpm.conf") wo_php_fpm = open('/etc/php5/fpm/php-fpm.conf', encoding='utf-8', mode='w') self.app.render((data), 'php-fpm.mustache', out=wo_php_fpm) wo_php_fpm.close() # Parse /etc/php5/fpm/pool.d/www.conf config = configparser.ConfigParser() config.read_file(codecs.open('/etc/php5/fpm/pool.d/www.conf', "r", "utf8")) config['www']['ping.path'] = '/ping' config['www']['pm.status_path'] = '/status' config['www']['pm.max_requests'] = '500' config['www']['pm.max_children'] = '100' config['www']['pm.start_servers'] = '20' config['www']['pm.min_spare_servers'] = '10' config['www']['pm.max_spare_servers'] = '30' config['www']['request_terminate_timeout'] = '300' config['www']['pm'] = 'ondemand' config['www']['listen'] = '127.0.0.1:9000' with codecs.open('/etc/php5/fpm/pool.d/www.conf', encoding='utf-8', mode='w') as configfile: Log.debug(self, "writting PHP5 configuration into " "/etc/php5/fpm/pool.d/www.conf") config.write(configfile) # Generate /etc/php5/fpm/pool.d/debug.conf WOFileUtils.copyfile(self, "/etc/php5/fpm/pool.d/www.conf", "/etc/php5/fpm/pool.d/debug.conf") WOFileUtils.searchreplace(self, "/etc/php5/fpm/pool.d/" "debug.conf", "[www]", "[debug]") config = configparser.ConfigParser() config.read('/etc/php5/fpm/pool.d/debug.conf') config['debug']['listen'] = '127.0.0.1:9001' config['debug']['rlimit_core'] = 'unlimited' config['debug']['slowlog'] = '/var/log/php5/slow.log' config['debug']['request_slowlog_timeout'] = '10s' with open('/etc/php5/fpm/pool.d/debug.conf', encoding='utf-8', mode='w') as confifile: Log.debug(self, "writting PHP5 configuration into " "/etc/php5/fpm/pool.d/debug.conf") config.write(confifile) with open("/etc/php5/fpm/pool.d/debug.conf", encoding='utf-8', mode='a') as myfile: myfile.write("php_admin_value[xdebug.profiler_output_dir] " "= /tmp/ \nphp_admin_value[xdebug.profiler_" "output_name] = cachegrind.out.%p-%H-%R " "\nphp_admin_flag[xdebug.profiler_enable" "_trigger] = on \nphp_admin_flag[xdebug." "profiler_enable] = off\n") # Disable xdebug WOFileUtils.searchreplace(self, "/etc/php5/mods-available/" "xdebug.ini", "zend_extension", ";zend_extension") # PHP and Debug pull configuration if not os.path.exists('{0}22222/htdocs/fpm/status/' .format(WOVariables.wo_webroot)): Log.debug(self, 'Creating directory ' '{0}22222/htdocs/fpm/status/ ' .format(WOVariables.wo_webroot)) os.makedirs('{0}22222/htdocs/fpm/status/' .format(WOVariables.wo_webroot)) open('{0}22222/htdocs/fpm/status/debug' .format(WOVariables.wo_webroot), encoding='utf-8', mode='a').close() open('{0}22222/htdocs/fpm/status/php' .format(WOVariables.wo_webroot), encoding='utf-8', mode='a').close() # Write info.php if not os.path.exists('{0}22222/htdocs/php/' .format(WOVariables.wo_webroot)): Log.debug(self, 'Creating directory ' '{0}22222/htdocs/php/ ' .format(WOVariables.wo_webroot)) os.makedirs('{0}22222/htdocs/php' .format(WOVariables.wo_webroot)) with open("{0}22222/htdocs/php/info.php" .format(WOVariables.wo_webroot), encoding='utf-8', mode='w') as myfile: myfile.write("") WOFileUtils.chown(self, "{0}22222" .format(WOVariables.wo_webroot), WOVariables.wo_php_user, WOVariables.wo_php_user, recursive=True) WOGit.add(self, ["/etc/php5"], msg="Adding PHP into Git") WOService.restart_service(self, 'php5-fpm') if (WOVariables.wo_platform_codename == 'trusty' or WOVariables.wo_platform_codename == 'xenial' or WOVariables.wo_platform_codename == 'bionic'): # Create log directories if not os.path.exists('/var/log/php/5.6/'): Log.debug(self, 'Creating directory /var/log/php/5.6/') os.makedirs('/var/log/php/5.6/') # Parse etc/php/5.6/fpm/php.ini config = configparser.ConfigParser() Log.debug(self, "configuring php file /etc/php/5.6/fpm/php.ini") config.read('/etc/php/5.6/fpm/php.ini') config['PHP']['expose_php'] = 'Off' config['PHP']['post_max_size'] = '100M' config['PHP']['upload_max_filesize'] = '100M' config['PHP']['max_execution_time'] = '300' config['PHP']['date.timezone'] = WOVariables.wo_timezone with open('/etc/php/5.6/fpm/php.ini', encoding='utf-8', mode='w') as configfile: Log.debug(self, "Writting php configuration into " "/etc/php/5.6/fpm/php.ini") config.write(configfile) # Parse /etc/php/5.6/fpm/php-fpm.conf data = dict(pid="/run/php/php5.6-fpm.pid", error_log="/var/log/php/5.6/fpm.log", include="/etc/php/5.6/fpm/pool.d/*.conf") Log.debug(self, "writting php5 configuration into " "/etc/php/5.6/fpm/php-fpm.conf") wo_php_fpm = open('/etc/php/5.6/fpm/php-fpm.conf', encoding='utf-8', mode='w') self.app.render((data), 'php-fpm.mustache', out=wo_php_fpm) wo_php_fpm.close() # Parse /etc/php/5.6/fpm/pool.d/www.conf config = configparser.ConfigParser() config.read_file(codecs.open('/etc/php/5.6/fpm/pool.d/www.conf', "r", "utf8")) config['www']['ping.path'] = '/ping' config['www']['pm.status_path'] = '/status' config['www']['pm.max_requests'] = '500' config['www']['pm.max_children'] = '100' config['www']['pm.start_servers'] = '20' config['www']['pm.min_spare_servers'] = '10' config['www']['pm.max_spare_servers'] = '30' config['www']['request_terminate_timeout'] = '300' config['www']['pm'] = 'ondemand' config['www']['listen'] = '127.0.0.1:9000' with codecs.open('/etc/php/5.6/fpm/pool.d/www.conf', encoding='utf-8', mode='w') as configfile: Log.debug(self, "writting PHP5 configuration into " "/etc/php/5.6/fpm/pool.d/www.conf") config.write(configfile) # Generate /etc/php/5.6/fpm/pool.d/debug.conf WOFileUtils.copyfile(self, "/etc/php/5.6/fpm/pool.d/www.conf", "/etc/php/5.6/fpm/pool.d/debug.conf") WOFileUtils.searchreplace(self, "/etc/php/5.6/fpm/pool.d/" "debug.conf", "[www]", "[debug]") config = configparser.ConfigParser() config.read('/etc/php/5.6/fpm/pool.d/debug.conf') config['debug']['listen'] = '127.0.0.1:9001' config['debug']['rlimit_core'] = 'unlimited' config['debug']['slowlog'] = '/var/log/php/5.6/slow.log' config['debug']['request_slowlog_timeout'] = '10s' with open('/etc/php/5.6/fpm/pool.d/debug.conf', encoding='utf-8', mode='w') as confifile: Log.debug(self, "writting PHP5 configuration into " "/etc/php/5.6/fpm/pool.d/debug.conf") config.write(confifile) with open("/etc/php/5.6/fpm/pool.d/debug.conf", encoding='utf-8', mode='a') as myfile: myfile.write("php_admin_value[xdebug.profiler_output_dir] " "= /tmp/ \nphp_admin_value[xdebug.profiler_" "output_name] = cachegrind.out.%p-%H-%R " "\nphp_admin_flag[xdebug.profiler_enable" "_trigger] = on \nphp_admin_flag[xdebug." "profiler_enable] = off\n") # Disable xdebug if not WOShellExec.cmd_exec(self, "grep -q \';zend_extension\' /etc/php/5.6/mods-available/xdebug.ini"): WOFileUtils.searchreplace(self, "/etc/php/5.6/mods-available/" "xdebug.ini", "zend_extension", ";zend_extension") # PHP and Debug pull configuration if not os.path.exists('{0}22222/htdocs/fpm/status/' .format(WOVariables.wo_webroot)): Log.debug(self, 'Creating directory ' '{0}22222/htdocs/fpm/status/ ' .format(WOVariables.wo_webroot)) os.makedirs('{0}22222/htdocs/fpm/status/' .format(WOVariables.wo_webroot)) open('{0}22222/htdocs/fpm/status/debug' .format(WOVariables.wo_webroot), encoding='utf-8', mode='a').close() open('{0}22222/htdocs/fpm/status/php' .format(WOVariables.wo_webroot), encoding='utf-8', mode='a').close() # Write info.php if not os.path.exists('{0}22222/htdocs/php/' .format(WOVariables.wo_webroot)): Log.debug(self, 'Creating directory ' '{0}22222/htdocs/php/ ' .format(WOVariables.wo_webroot)) os.makedirs('{0}22222/htdocs/php' .format(WOVariables.wo_webroot)) with open("{0}22222/htdocs/php/info.php" .format(WOVariables.wo_webroot), encoding='utf-8', mode='w') as myfile: myfile.write("") WOFileUtils.chown(self, "{0}22222" .format(WOVariables.wo_webroot), WOVariables.wo_php_user, WOVariables.wo_php_user, recursive=True) WOGit.add(self, ["/etc/php"], msg="Adding PHP into Git") WOService.restart_service(self, 'php5.6-fpm') #PHP7.0 configuration for debian if (WOVariables.wo_platform_codename == 'jessie' ) and set(WOVariables.wo_php72).issubset(set(apt_packages)): # Create log directories if not os.path.exists('/var/log/php/7.2/'): Log.debug(self, 'Creating directory /var/log/php/7.2/') os.makedirs('/var/log/php/7.2/') # Parse etc/php/7.2/fpm/php.ini config = configparser.ConfigParser() Log.debug(self, "configuring php file /etc/php/7.2/fpm/php.ini") config.read('/etc/php/7.2/fpm/php.ini') config['PHP']['expose_php'] = 'Off' config['PHP']['post_max_size'] = '100M' config['PHP']['upload_max_filesize'] = '100M' config['PHP']['max_execution_time'] = '300' config['PHP']['date.timezone'] = WOVariables.wo_timezone with open('/etc/php/7.2/fpm/php.ini', encoding='utf-8', mode='w') as configfile: Log.debug(self, "Writting php configuration into " "/etc/php/7.2/fpm/php.ini") config.write(configfile) # Parse /etc/php/7.2/fpm/php-fpm.conf data = dict(pid="/run/php/php7.2-fpm.pid", error_log="/var/log/php7.2-fpm.log", include="/etc/php/7.2/fpm/pool.d/*.conf") Log.debug(self, "writting php 7.0 configuration into " "/etc/php/7.2/fpm/php-fpm.conf") wo_php_fpm = open('/etc/php/7.2/fpm/php-fpm.conf', encoding='utf-8', mode='w') self.app.render((data), 'php-fpm.mustache', out=wo_php_fpm) wo_php_fpm.close() # Parse /etc/php/7.2/fpm/pool.d/www.conf config = configparser.ConfigParser() config.read_file(codecs.open('/etc/php/7.2/fpm/pool.d/www.conf', "r", "utf8")) config['www']['ping.path'] = '/ping' config['www']['pm.status_path'] = '/status' config['www']['pm.max_requests'] = '500' config['www']['pm.max_children'] = '100' config['www']['pm.start_servers'] = '20' config['www']['pm.min_spare_servers'] = '10' config['www']['pm.max_spare_servers'] = '30' config['www']['request_terminate_timeout'] = '300' config['www']['pm'] = 'ondemand' config['www']['listen'] = '127.0.0.1:9072' with codecs.open('/etc/php/7.2/fpm/pool.d/www.conf', encoding='utf-8', mode='w') as configfile: Log.debug(self, "writting PHP5 configuration into " "/etc/php/7.2/fpm/pool.d/www.conf") config.write(configfile) # Generate /etc/php/7.2/fpm/pool.d/debug.conf WOFileUtils.copyfile(self, "/etc/php/7.2/fpm/pool.d/www.conf", "/etc/php/7.2/fpm/pool.d/debug.conf") WOFileUtils.searchreplace(self, "/etc/php/7.2/fpm/pool.d/" "debug.conf", "[www]", "[debug]") config = configparser.ConfigParser() config.read('/etc/php/7.2/fpm/pool.d/debug.conf') config['debug']['listen'] = '127.0.0.1:9172' config['debug']['rlimit_core'] = 'unlimited' config['debug']['slowlog'] = '/var/log/php/7.2/slow.log' config['debug']['request_slowlog_timeout'] = '10s' with open('/etc/php/7.2/fpm/pool.d/debug.conf', encoding='utf-8', mode='w') as confifile: Log.debug(self, "writting PHP5 configuration into " "/etc/php/7.2/fpm/pool.d/debug.conf") config.write(confifile) with open("/etc/php/7.2/fpm/pool.d/debug.conf", encoding='utf-8', mode='a') as myfile: myfile.write("php_admin_value[xdebug.profiler_output_dir] " "= /tmp/ \nphp_admin_value[xdebug.profiler_" "output_name] = cachegrind.out.%p-%H-%R " "\nphp_admin_flag[xdebug.profiler_enable" "_trigger] = on \nphp_admin_flag[xdebug." "profiler_enable] = off\n") # Disable xdebug if not WOShellExec.cmd_exec(self, "grep -q \';zend_extension\' /etc/php/7.2/mods-available/xdebug.ini"): WOFileUtils.searchreplace(self, "/etc/php/7.2/mods-available/" "xdebug.ini", "zend_extension", ";zend_extension") # PHP and Debug pull configuration if not os.path.exists('{0}22222/htdocs/fpm/status/' .format(WOVariables.wo_webroot)): Log.debug(self, 'Creating directory ' '{0}22222/htdocs/fpm/status/ ' .format(WOVariables.wo_webroot)) os.makedirs('{0}22222/htdocs/fpm/status/' .format(WOVariables.wo_webroot)) open('{0}22222/htdocs/fpm/status/debug' .format(WOVariables.wo_webroot), encoding='utf-8', mode='a').close() open('{0}22222/htdocs/fpm/status/php' .format(WOVariables.wo_webroot), encoding='utf-8', mode='a').close() # Write info.php if not os.path.exists('{0}22222/htdocs/php/' .format(WOVariables.wo_webroot)): Log.debug(self, 'Creating directory ' '{0}22222/htdocs/php/ ' .format(WOVariables.wo_webroot)) os.makedirs('{0}22222/htdocs/php' .format(WOVariables.wo_webroot)) with open("{0}22222/htdocs/php/info.php" .format(WOVariables.wo_webroot), encoding='utf-8', mode='w') as myfile: myfile.write("") WOFileUtils.chown(self, "{0}22222" .format(WOVariables.wo_webroot), WOVariables.wo_php_user, WOVariables.wo_php_user, recursive=True) WOGit.add(self, ["/etc/php"], msg="Adding PHP into Git") WOService.restart_service(self, 'php7.2-fpm') #preconfiguration for php7.2 if (WOVariables.wo_platform_codename == 'trusty' or WOVariables.wo_platform_codename == 'xenial' or WOVariables.wo_platform_codename == 'bionic') and set(WOVariables.wo_php72).issubset(set(apt_packages)): # Create log directories if not os.path.exists('/var/log/php/7.2/'): Log.debug(self, 'Creating directory /var/log/php/7.2/') os.makedirs('/var/log/php/7.2/') # Parse etc/php/7.2/fpm/php.ini config = configparser.ConfigParser() Log.debug(self, "configuring php file /etc/php/7.2/fpm/php.ini") config.read('/etc/php/7.2/fpm/php.ini') config['PHP']['expose_php'] = 'Off' config['PHP']['post_max_size'] = '100M' config['PHP']['upload_max_filesize'] = '100M' config['PHP']['max_execution_time'] = '300' config['PHP']['date.timezone'] = WOVariables.wo_timezone with open('/etc/php/7.2/fpm/php.ini', encoding='utf-8', mode='w') as configfile: Log.debug(self, "Writting php configuration into " "/etc/php/7.2/fpm/php.ini") config.write(configfile) # Parse /etc/php/7.2/fpm/php-fpm.conf data = dict(pid="/run/php/php7.2-fpm.pid", error_log="/var/log/php/7.2/fpm.log", include="/etc/php/7.2/fpm/pool.d/*.conf") Log.debug(self, "writting php 7.0 configuration into " "/etc/php/7.2/fpm/php-fpm.conf") wo_php_fpm = open('/etc/php/7.2/fpm/php-fpm.conf', encoding='utf-8', mode='w') self.app.render((data), 'php-fpm.mustache', out=wo_php_fpm) wo_php_fpm.close() # Parse /etc/php/7.2/fpm/pool.d/www.conf config = configparser.ConfigParser() config.read_file(codecs.open('/etc/php/7.2/fpm/pool.d/www.conf', "r", "utf8")) config['www']['ping.path'] = '/ping' config['www']['pm.status_path'] = '/status' config['www']['pm.max_requests'] = '500' config['www']['pm.max_children'] = '100' config['www']['pm.start_servers'] = '20' config['www']['pm.min_spare_servers'] = '10' config['www']['pm.max_spare_servers'] = '30' config['www']['request_terminate_timeout'] = '300' config['www']['pm'] = 'ondemand' config['www']['listen'] = '127.0.0.1:9072' with codecs.open('/etc/php/7.2/fpm/pool.d/www.conf', encoding='utf-8', mode='w') as configfile: Log.debug(self, "writting PHP5 configuration into " "/etc/php/7.2/fpm/pool.d/www.conf") config.write(configfile) # Generate /etc/php/7.2/fpm/pool.d/debug.conf WOFileUtils.copyfile(self, "/etc/php/7.2/fpm/pool.d/www.conf", "/etc/php/7.2/fpm/pool.d/debug.conf") WOFileUtils.searchreplace(self, "/etc/php/7.2/fpm/pool.d/" "debug.conf", "[www]", "[debug]") config = configparser.ConfigParser() config.read('/etc/php/7.2/fpm/pool.d/debug.conf') config['debug']['listen'] = '127.0.0.1:9172' config['debug']['rlimit_core'] = 'unlimited' config['debug']['slowlog'] = '/var/log/php/7.2/slow.log' config['debug']['request_slowlog_timeout'] = '10s' with open('/etc/php/7.2/fpm/pool.d/debug.conf', encoding='utf-8', mode='w') as confifile: Log.debug(self, "writting PHP5 configuration into " "/etc/php/7.2/fpm/pool.d/debug.conf") config.write(confifile) with open("/etc/php/7.2/fpm/pool.d/debug.conf", encoding='utf-8', mode='a') as myfile: myfile.write("php_admin_value[xdebug.profiler_output_dir] " "= /tmp/ \nphp_admin_value[xdebug.profiler_" "output_name] = cachegrind.out.%p-%H-%R " "\nphp_admin_flag[xdebug.profiler_enable" "_trigger] = on \nphp_admin_flag[xdebug." "profiler_enable] = off\n") # Disable xdebug if not WOShellExec.cmd_exec(self, "grep -q \';zend_extension\' /etc/php/7.2/mods-available/xdebug.ini"): WOFileUtils.searchreplace(self, "/etc/php/7.2/mods-available/" "xdebug.ini", "zend_extension", ";zend_extension") # PHP and Debug pull configuration if not os.path.exists('{0}22222/htdocs/fpm/status/' .format(WOVariables.wo_webroot)): Log.debug(self, 'Creating directory ' '{0}22222/htdocs/fpm/status/ ' .format(WOVariables.wo_webroot)) os.makedirs('{0}22222/htdocs/fpm/status/' .format(WOVariables.wo_webroot)) open('{0}22222/htdocs/fpm/status/debug' .format(WOVariables.wo_webroot), encoding='utf-8', mode='a').close() open('{0}22222/htdocs/fpm/status/php' .format(WOVariables.wo_webroot), encoding='utf-8', mode='a').close() # Write info.php if not os.path.exists('{0}22222/htdocs/php/' .format(WOVariables.wo_webroot)): Log.debug(self, 'Creating directory ' '{0}22222/htdocs/php/ ' .format(WOVariables.wo_webroot)) os.makedirs('{0}22222/htdocs/php' .format(WOVariables.wo_webroot)) with open("{0}22222/htdocs/php/info.php" .format(WOVariables.wo_webroot), encoding='utf-8', mode='w') as myfile: myfile.write("") WOFileUtils.chown(self, "{0}22222" .format(WOVariables.wo_webroot), WOVariables.wo_php_user, WOVariables.wo_php_user, recursive=True) WOGit.add(self, ["/etc/php"], msg="Adding PHP into Git") WOService.restart_service(self, 'php7.2-fpm') if set(WOVariables.wo_mysql).issubset(set(apt_packages)): # TODO: Currently we are using, we need to remove it in future # config = configparser.ConfigParser() # config.read('/etc/mysql/my.cnf') # config['mysqld']['wait_timeout'] = 30 # config['mysqld']['interactive_timeout'] = 60 # config['mysqld']['performance_schema'] = 0 # with open('/etc/mysql/my.cnf', 'w') as configfile: # config.write(configfile) if not os.path.isfile("/etc/mysql/my.cnf"): config = ("[mysqld]\nwait_timeout = 30\n" "interactive_timeout=60\nperformance_schema = 0" "\nquery_cache_type = 1") config_file = open("/etc/mysql/my.cnf", encoding='utf-8', mode='w') config_file.write(config) config_file.close() else: try: WOShellExec.cmd_exec(self, "sed -i \"/#max_conn" "ections/a wait_timeout = 30 \\n" "interactive_timeout = 60 \\n" "performance_schema = 0\\n" "query_cache_type = 1 \" " "/etc/mysql/my.cnf") except CommandExecutionError as e: Log.error(self, "Unable to update MySQL file") # Set MySQLTuner permission WOFileUtils.chmod(self, "/usr/bin/mysqltuner", 0o775) WOGit.add(self, ["/etc/mysql"], msg="Adding MySQL into Git") WOService.reload_service(self, 'mysql') if len(packages): if any('/usr/bin/wp' == x[1] for x in packages): Log.debug(self, "Setting Privileges to /usr/bin/wp file ") WOFileUtils.chmod(self, "/usr/bin/wp", 0o775) if any('/tmp/pma.tar.gz' == x[1] for x in packages): WOExtract.extract(self, '/tmp/pma.tar.gz', '/tmp/') Log.debug(self, 'Extracting file /tmp/pma.tar.gz to ' 'location /tmp/') if not os.path.exists('{0}22222/htdocs/db' .format(WOVariables.wo_webroot)): Log.debug(self, "Creating new directory " "{0}22222/htdocs/db" .format(WOVariables.wo_webroot)) os.makedirs('{0}22222/htdocs/db' .format(WOVariables.wo_webroot)) shutil.move('/tmp/phpmyadmin-STABLE/', '{0}22222/htdocs/db/pma/' .format(WOVariables.wo_webroot)) shutil.copyfile('{0}22222/htdocs/db/pma/config.sample.inc.php' .format(WOVariables.wo_webroot), '{0}22222/htdocs/db/pma/config.inc.php' .format(WOVariables.wo_webroot)) Log.debug(self, 'Setting Blowfish Secret Key FOR COOKIE AUTH to ' '{0}22222/htdocs/db/pma/config.inc.php file ' .format(WOVariables.wo_webroot)) blowfish_key = ''.join([random.choice (string.ascii_letters + string.digits) for n in range(10)]) WOFileUtils.searchreplace(self, '{0}22222/htdocs/db/pma/config.inc.php' .format(WOVariables.wo_webroot), "$cfg[\'blowfish_secret\'] = \'\';","$cfg[\'blowfish_secret\'] = \'{0}\';" .format(blowfish_key)) Log.debug(self, 'Setting HOST Server For Mysql to ' '{0}22222/htdocs/db/pma/config.inc.php file ' .format(WOVariables.wo_webroot)) WOFileUtils.searchreplace(self, '{0}22222/htdocs/db/pma/config.inc.php' .format(WOVariables.wo_webroot), "$cfg[\'Servers\'][$i][\'host\'] = \'localhost\';","$cfg[\'Servers\'][$i][\'host\'] = \'{0}\';" .format(WOVariables.wo_mysql_host)) Log.debug(self, 'Setting Privileges of webroot permission to ' '{0}22222/htdocs/db/pma file ' .format(WOVariables.wo_webroot)) WOFileUtils.chown(self, '{0}22222' .format(WOVariables.wo_webroot), WOVariables.wo_php_user, WOVariables.wo_php_user, recursive=True) if any('/tmp/memcache.tar.gz' == x[1] for x in packages): Log.debug(self, "Extracting memcache.tar.gz to location" " {0}22222/htdocs/cache/memcache " .format(WOVariables.wo_webroot)) WOExtract.extract(self, '/tmp/memcache.tar.gz', '{0}22222/htdocs/cache/memcache' .format(WOVariables.wo_webroot)) Log.debug(self, "Setting Privileges to " "{0}22222/htdocs/cache/memcache file" .format(WOVariables.wo_webroot)) WOFileUtils.chown(self, '{0}22222' .format(WOVariables.wo_webroot), WOVariables.wo_php_user, WOVariables.wo_php_user, recursive=True) if any('/tmp/webgrind.tar.gz' == x[1] for x in packages): Log.debug(self, "Extracting file webgrind.tar.gz to " "location /tmp/ ") WOExtract.extract(self, '/tmp/webgrind.tar.gz', '/tmp/') if not os.path.exists('{0}22222/htdocs/php' .format(WOVariables.wo_webroot)): Log.debug(self, "Creating directroy " "{0}22222/htdocs/php" .format(WOVariables.wo_webroot)) os.makedirs('{0}22222/htdocs/php' .format(WOVariables.wo_webroot)) shutil.move('/tmp/webgrind-master/', '{0}22222/htdocs/php/webgrind' .format(WOVariables.wo_webroot)) WOFileUtils.searchreplace(self, "{0}22222/htdocs/php/webgrind/" "config.php" .format(WOVariables.wo_webroot), "/usr/local/bin/dot", "/usr/bin/dot") WOFileUtils.searchreplace(self, "{0}22222/htdocs/php/webgrind/" "config.php" .format(WOVariables.wo_webroot), "Europe/Copenhagen", WOVariables.wo_timezone) WOFileUtils.searchreplace(self, "{0}22222/htdocs/php/webgrind/" "config.php" .format(WOVariables.wo_webroot), "90", "100") Log.debug(self, "Setting Privileges of webroot permission to " "{0}22222/htdocs/php/webgrind/ file " .format(WOVariables.wo_webroot)) WOFileUtils.chown(self, '{0}22222' .format(WOVariables.wo_webroot), WOVariables.wo_php_user, WOVariables.wo_php_user, recursive=True) if any('/tmp/anemometer.tar.gz' == x[1] for x in packages): Log.debug(self, "Extracting file anemometer.tar.gz to " "location /tmp/ ") WOExtract.extract(self, '/tmp/anemometer.tar.gz', '/tmp/') if not os.path.exists('{0}22222/htdocs/db/' .format(WOVariables.wo_webroot)): Log.debug(self, "Creating directory") os.makedirs('{0}22222/htdocs/db/' .format(WOVariables.wo_webroot)) shutil.move('/tmp/Anemometer-master', '{0}22222/htdocs/db/anemometer' .format(WOVariables.wo_webroot)) chars = ''.join(random.sample(string.ascii_letters, 8)) try: WOShellExec.cmd_exec(self, 'mysql < {0}22222/htdocs/db' '/anemometer/install.sql' .format(WOVariables.wo_webroot)) except CommandExecutionError as e: raise SiteError("Unable to import Anemometer database") WOMysql.execute(self, 'grant select on *.* to \'anemometer\'' '@\'{0}\' IDENTIFIED' ' BY \'{1}\''.format(self.app.config.get('mysql', 'grant-host'),chars)) Log.debug(self, "grant all on slow-query-log.*" " to anemometer@root_user IDENTIFIED BY password ") WOMysql.execute(self, 'grant all on slow_query_log.* to' '\'anemometer\'@\'{0}\' IDENTIFIED' ' BY \'{1}\''.format(self.app.config.get( 'mysql', 'grant-host'), chars), errormsg="cannot grant priviledges", log=False) # Custom Anemometer configuration Log.debug(self, "configration Anemometer") data = dict(host=WOVariables.wo_mysql_host, port='3306', user='anemometer', password=chars) wo_anemometer = open('{0}22222/htdocs/db/anemometer' '/conf/config.inc.php' .format(WOVariables.wo_webroot), encoding='utf-8', mode='w') self.app.render((data), 'anemometer.mustache', out=wo_anemometer) wo_anemometer.close() if any('/usr/bin/pt-query-advisor' == x[1] for x in packages): WOFileUtils.chmod(self, "/usr/bin/pt-query-advisor", 0o775) if any('/tmp/pra.tar.gz' == x[1] for x in packages): Log.debug(self, 'Extracting file /tmp/pra.tar.gz to ' 'loaction /tmp/') WOExtract.extract(self, '/tmp/pra.tar.gz', '/tmp/') if not os.path.exists('{0}22222/htdocs/cache/redis' .format(WOVariables.wo_webroot)): Log.debug(self, "Creating new directory " "{0}22222/htdocs/cache/redis" .format(WOVariables.wo_webroot)) os.makedirs('{0}22222/htdocs/cache/redis' .format(WOVariables.wo_webroot)) shutil.move('/tmp/phpRedisAdmin-master/', '{0}22222/htdocs/cache/redis/phpRedisAdmin' .format(WOVariables.wo_webroot)) Log.debug(self, 'Extracting file /tmp/predis.tar.gz to ' 'loaction /tmp/') WOExtract.extract(self, '/tmp/predis.tar.gz', '/tmp/') shutil.move('/tmp/predis-1.0.1/', '{0}22222/htdocs/cache/redis/phpRedisAdmin/vendor' .format(WOVariables.wo_webroot)) Log.debug(self, 'Setting Privileges of webroot permission to ' '{0}22222/htdocs/cache/ file ' .format(WOVariables.wo_webroot)) WOFileUtils.chown(self, '{0}22222' .format(WOVariables.wo_webroot), WOVariables.wo_php_user, WOVariables.wo_php_user, recursive=True) @expose(help="Install packages") def install(self, packages=[], apt_packages=[], disp_msg=True): """Start installation of packages""" self.msg = [] try: # Default action for stack installation if ((not self.app.pargs.web) and (not self.app.pargs.admin) and (not self.app.pargs.nginx) and (not self.app.pargs.php) and (not self.app.pargs.mysql) and (not self.app.pargs.wpcli) and (not self.app.pargs.phpmyadmin) and (not self.app.pargs.hhvm) and (not self.app.pargs.adminer) and (not self.app.pargs.utils) and (not self.app.pargs.redis) and (not self.app.pargs.phpredisadmin) and (not self.app.pargs.php72)): self.app.pargs.web = True self.app.pargs.admin = True if self.app.pargs.all: self.app.pargs.web = True self.app.pargs.admin = True if self.app.pargs.web: self.app.pargs.nginx = True self.app.pargs.php = True self.app.pargs.mysql = True self.app.pargs.wpcli = True if self.app.pargs.admin: self.app.pargs.nginx = True self.app.pargs.php = True self.app.pargs.mysql = True self.app.pargs.adminer = True self.app.pargs.phpmyadmin = True self.app.pargs.utils = True if self.app.pargs.redis: if not WOAptGet.is_installed(self, 'redis-server'): apt_packages = apt_packages + WOVariables.wo_redis self.app.pargs.php = True else: Log.info(self, "Redis already installed") if self.app.pargs.nginx: Log.debug(self, "Setting apt_packages variable for Nginx") if not (WOAptGet.is_installed(self, 'nginx-custom')): if not (WOAptGet.is_installed(self, 'nginx-plus') or WOAptGet.is_installed(self, 'nginx')): apt_packages = apt_packages + WOVariables.wo_nginx else: if WOAptGet.is_installed(self, 'nginx-plus'): Log.info(self, "NGINX PLUS Detected ...") apt = ["nginx-plus"] + WOVariables.wo_nginx self.post_pref(apt, packages) elif WOAptGet.is_installed(self, 'nginx'): Log.info(self, "WordOps detected an already installed nginx package." "It may or may not have required modules.\n") apt = ["nginx"] + WOVariables.wo_nginx self.post_pref(apt, packages) else: Log.debug(self, "Nginx Stable already installed") if self.app.pargs.php: Log.debug(self, "Setting apt_packages variable for PHP") if not (WOAptGet.is_installed(self, 'php5-fpm') or WOAptGet.is_installed(self, 'php5.6-fpm')): if (WOVariables.wo_platform_codename == 'trusty' or WOVariables.wo_platform_codename == 'xenial' or WOVariables.wo_platform_codename == 'bionic'): apt_packages = apt_packages + WOVariables.wo_php72 + WOVariables.wo_php_extra else: apt_packages = apt_packages + WOVariables.wo_php else: Log.debug(self, "PHP already installed") Log.info(self, "PHP already installed") #PHP 7.0 for Debian (jessie+) if self.app.pargs.php72 and WOVariables.wo_platform_distro == 'debian': if (WOVariables.wo_platform_codename == 'jessie'): Log.debug(self, "Setting apt_packages variable for PHP 7.2") if not WOAptGet.is_installed(self, 'php7.2-fpm') : apt_packages = apt_packages + WOVariables.wo_php72 if not WOAptGet.is_installed(self, 'php5-fpm'): apt_packages = apt_packages + WOVariables.wo_php else: Log.debug(self, "PHP 7.2 already installed") Log.info(self, "PHP 7.2 already installed") else: Log.debug(self, "PHP 7.2 Not Available for your Distribution") Log.info(self, "PHP 7.2 Not Available for your Distribution") #PHP 7.0 for Ubuntu if self.app.pargs.php72 and not WOVariables.wo_platform_distro == 'debian': if (WOVariables.wo_platform_codename == 'trusty' or WOVariables.wo_platform_codename == 'xenial' or WOVariables.wo_platform_codename == 'bionic'): Log.debug(self, "Setting apt_packages variable for PHP 7.2") if not WOAptGet.is_installed(self, 'php7.2-fpm') : apt_packages = apt_packages + WOVariables.wo_php72 + WOVariables.wo_php_extra else: Log.debug(self, "PHP 7.2 already installed") Log.info(self, "PHP 7.2 already installed") else: Log.debug(self, "Unfortunately PHP 7.2 is not available for your Ubuntu or Debian version.") Log.info(self, "Unfortunately PHP 7.2 is not available for your Ubuntu or Debian version.") if self.app.pargs.hhvm: Log.debug(self, "Setting apt packages variable for HHVM") if platform.architecture()[0] is '32bit': Log.error(self, "HHVM is not supported by 32bit system") if not WOAptGet.is_installed(self, 'hhvm'): apt_packages = apt_packages + WOVariables.wo_hhvm else: Log.debug(self, "HHVM already installed") Log.info(self, "HHVM already installed") if self.app.pargs.mysql: Log.debug(self, "Setting apt_packages variable for MySQL") if not WOShellExec.cmd_exec(self, "mysqladmin ping"): apt_packages = apt_packages + WOVariables.wo_mysql packages = packages + [["https://raw." "githubusercontent.com/" "major/MySQLTuner-perl" "/master/mysqltuner.pl", "/usr/bin/mysqltuner", "MySQLTuner"]] else: Log.debug(self, "MySQL connection is already alive") Log.info(self, "MySQL connection is already alive") if self.app.pargs.wpcli: Log.debug(self, "Setting packages variable for WP-CLI") if not WOShellExec.cmd_exec(self, "which wp"): packages = packages + [["https://github.com/wp-cli/wp-cli/" "releases/download/v{0}/" "wp-cli-{0}.phar" "".format(WOVariables.wo_wp_cli), "/usr/bin/wp", "WP-CLI"]] else: Log.debug(self, "WP-CLI is already installed") Log.info(self, "WP-CLI is already installed") if self.app.pargs.phpmyadmin: Log.debug(self, "Setting packages varible for phpMyAdmin ") packages = packages + [["https://github.com/phpmyadmin/" "phpmyadmin/archive/STABLE.tar.gz", "/tmp/pma.tar.gz", "phpMyAdmin"]] if self.app.pargs.phpredisadmin: Log.debug(self, "Setting packages varible for phpRedisAdmin") packages = packages + [["https://github.com/ErikDubbelboer/" "phpRedisAdmin/archive/master.tar.gz", "/tmp/pra.tar.gz","phpRedisAdmin"], ["https://github.com/nrk/predis/" "archive/v1.0.1.tar.gz", "/tmp/predis.tar.gz", "Predis"]] if self.app.pargs.adminer: Log.debug(self, "Setting packages variable for Adminer ") packages = packages + [["https://www.adminer.org/static/download/" "{0}/adminer-{0}.php" "".format(WOVariables.wo_adminer), "{0}22222/" "htdocs/db/adminer/index.php" .format(WOVariables.wo_webroot), "Adminer"]] if self.app.pargs.utils: Log.debug(self, "Setting packages variable for utils") packages = packages + [["https://storage.googleapis.com/google-code-archive-downloads/" "v2/code.google.com/phpmemcacheadmin/" "phpMemcachedAdmin-1.2.2-r262.tar.gz", '/tmp/memcache.tar.gz', 'phpMemcachedAdmin'], ["https://raw.githubusercontent.com" "/rtCamp/eeadmin/master/cache/nginx/" "clean.php", "{0}22222/htdocs/cache/" "nginx/clean.php" .format(WOVariables.wo_webroot), "clean.php"], ["https://raw.github.com/rlerdorf/" "opcache-status/master/opcache.php", "{0}22222/htdocs/cache/" "opcache/opcache.php" .format(WOVariables.wo_webroot), "opcache.php"], ["https://raw.github.com/amnuts/" "opcache-gui/master/index.php", "{0}22222/htdocs/" "cache/opcache/opgui.php" .format(WOVariables.wo_webroot), "Opgui"], ["https://gist.github.com/ck-on/4959032" "/raw/0b871b345fd6cfcd6d2be030c1f33d1" "ad6a475cb/ocp.php", "{0}22222/htdocs/cache/" "opcache/ocp.php" .format(WOVariables.wo_webroot), "OCP.php"], ["https://github.com/jokkedk/webgrind/" "archive/master.tar.gz", '/tmp/webgrind.tar.gz', 'Webgrind'], ["http://bazaar.launchpad.net/~" "percona-toolkit-dev/percona-toolkit/" "2.1/download/head:/ptquerydigest-" "20110624220137-or26tn4" "expb9ul2a-16/pt-query-digest", "/usr/bin/pt-query-advisor", "pt-query-advisor"], ["https://github.com/box/Anemometer/" "archive/master.tar.gz", '/tmp/anemometer.tar.gz', 'Anemometer'] ] except Exception as e: pass if len(apt_packages) or len(packages): Log.debug(self, "Calling pre_pref") self.pre_pref(apt_packages) if len(apt_packages): WOSwap.add(self) Log.info(self, "Updating apt-cache, please wait...") WOAptGet.update(self) Log.info(self, "Installing packages, please wait...") WOAptGet.install(self, apt_packages) if len(packages): Log.debug(self, "Downloading following: {0}".format(packages)) WODownload.download(self, packages) Log.debug(self, "Calling post_pref") self.post_pref(apt_packages, packages) if 'redis-server' in apt_packages: # set redis.conf parameter # set maxmemory 10% for ram below 512MB and 20% for others # set maxmemory-policy allkeys-lru if os.path.isfile("/etc/redis/redis.conf"): if WOVariables.wo_ram < 512: Log.debug(self, "Setting maxmemory variable to {0} in redis.conf" .format(int(WOVariables.wo_ram*1024*1024*0.1))) WOShellExec.cmd_exec(self, "sed -i 's/# maxmemory /maxmemory {0}/' /etc/redis/redis.conf" .format(int(WOVariables.wo_ram*1024*1024*0.1))) Log.debug(self, "Setting maxmemory-policy variable to allkeys-lru in redis.conf") WOShellExec.cmd_exec(self, "sed -i 's/# maxmemory-policy.*/maxmemory-policy allkeys-lru/' " "/etc/redis/redis.conf") WOService.restart_service(self, 'redis-server') else: Log.debug(self, "Setting maxmemory variable to {0} in redis.conf" .format(int(WOVariables.wo_ram*1024*1024*0.2))) WOShellExec.cmd_exec(self, "sed -i 's/# maxmemory /maxmemory {0}/' /etc/redis/redis.conf" .format(int(WOVariables.wo_ram*1024*1024*0.2))) Log.debug(self, "Setting maxmemory-policy variable to allkeys-lru in redis.conf") WOShellExec.cmd_exec(self, "sed -i 's/# maxmemory-policy.*/maxmemory-policy allkeys-lru/' " "/etc/redis/redis.conf") WOService.restart_service(self, 'redis-server') if disp_msg: if len(self.msg): for msg in self.msg: Log.info(self, Log.ENDC + msg) Log.info(self, "Successfully installed packages") else: return self.msg @expose(help="Remove packages") def remove(self): """Start removal of packages""" apt_packages = [] packages = [] if ((not self.app.pargs.web) and (not self.app.pargs.admin) and (not self.app.pargs.nginx) and (not self.app.pargs.php) and (not self.app.pargs.php72) and (not self.app.pargs.mysql) and (not self.app.pargs.wpcli) and (not self.app.pargs.phpmyadmin) and (not self.app.pargs.hhvm) and (not self.app.pargs.adminer) and (not self.app.pargs.utils) and (not self.app.pargs.all) and (not self.app.pargs.redis) and (not self.app.pargs.phpredisadmin)): self.app.pargs.web = True self.app.pargs.admin = True if self.app.pargs.all: self.app.pargs.web = True self.app.pargs.admin = True if (WOVariables.wo_platform_codename == 'trusty' or WOVariables.wo_platform_codename == 'xenial' or WOVariables.wo_platform_codename == 'bionic'): self.app.pargs.php72 = True if self.app.pargs.web: self.app.pargs.nginx = True self.app.pargs.php = True self.app.pargs.mysql = True self.app.pargs.wpcli = True if self.app.pargs.admin: self.app.pargs.adminer = True self.app.pargs.phpmyadmin = True self.app.pargs.utils = True if self.app.pargs.nginx: if WOAptGet.is_installed(self, 'nginx-custom'): Log.debug(self, "Removing apt_packages variable of Nginx") apt_packages = apt_packages + WOVariables.wo_nginx else: Log.error(self,"Cannot Remove! Nginx Stable version not found.") if self.app.pargs.php: Log.debug(self, "Removing apt_packages variable of PHP") if (WOVariables.wo_platform_codename == 'trusty' or WOVariables.wo_platform_codename == 'xenial' or WOVariables.wo_platform_codename == 'bionic'): apt_packages = apt_packages + WOVariables.wo_php72 if not WOAptGet.is_installed(self, 'php7.2-fpm'): apt_packages = apt_packages + WOVariables.wo_php_extra else: apt_packages = apt_packages + WOVariables.wo_php #PHP7.0 for debian(jessie+) if self.app.pargs.php72: if (WOVariables.wo_platform_codename == 'jessie'): Log.debug(self, "Removing apt_packages variable of PHP 7.0") apt_packages = apt_packages + WOVariables.wo_php72 if not WOAptGet.is_installed(self, 'php5-fpm'): apt_packages = apt_packages + WOVariables.wo_php_extra else: Log.info(self,"PHP 7.0 not supported.") if self.app.pargs.php72: if (WOVariables.wo_platform_codename == 'trusty' or WOVariables.wo_platform_codename == 'xenial' or WOVariables.wo_platform_codename == 'bionic'): Log.debug(self, "Removing apt_packages variable of PHP 7.0") apt_packages = apt_packages + WOVariables.wo_php72 if not WOAptGet.is_installed(self, 'php5.6-fpm'): apt_packages = apt_packages + WOVariables.wo_php_extra else: Log.info(self,"PHP 7.0 not supported.") if self.app.pargs.hhvm: if WOAptGet.is_installed(self, 'hhvm'): Log.debug(self, "Removing apt_packages variable of HHVM") apt_packages = apt_packages + WOVariables.wo_hhvm if self.app.pargs.redis: Log.debug(self, "Remove apt_packages variable of Redis") apt_packages = apt_packages + WOVariables.wo_redis if self.app.pargs.mysql: Log.debug(self, "Removing apt_packages variable of MySQL") apt_packages = apt_packages + WOVariables.wo_mysql packages = packages + ['/usr/bin/mysqltuner'] if self.app.pargs.wpcli: Log.debug(self, "Removing package variable of WPCLI ") if os.path.isfile('/usr/bin/wp'): packages = packages + ['/usr/bin/wp'] else: Log.warn(self, "WP-CLI is not installed with WordOps") if self.app.pargs.phpmyadmin: Log.debug(self, "Removing package variable of phpMyAdmin ") packages = packages + ['{0}22222/htdocs/db/pma' .format(WOVariables.wo_webroot)] if self.app.pargs.phpredisadmin: Log.debug(self, "Removing package variable of phpRedisAdmin ") packages = packages + ['{0}22222/htdocs/cache/redis/phpRedisAdmin' .format(WOVariables.wo_webroot)] if self.app.pargs.adminer: Log.debug(self, "Removing package variable of Adminer ") packages = packages + ['{0}22222/htdocs/db/adminer' .format(WOVariables.wo_webroot)] if self.app.pargs.utils: Log.debug(self, "Removing package variable of utils ") packages = packages + ['{0}22222/htdocs/php/webgrind/' .format(WOVariables.wo_webroot), '{0}22222/htdocs/cache/opcache' .format(WOVariables.wo_webroot), '{0}22222/htdocs/cache/nginx/' 'clean.php'.format(WOVariables.wo_webroot), '{0}22222/htdocs/cache/memcache' .format(WOVariables.wo_webroot), '/usr/bin/pt-query-advisor', '{0}22222/htdocs/db/anemometer' .format(WOVariables.wo_webroot)] if len(packages) or len(apt_packages): wo_prompt = input('Are you sure you to want to' ' remove from server.' '\nPackage configuration will remain' ' on server after this operation.\n' 'Any answer other than ' '"yes" will be stop this' ' operation : ') if wo_prompt == 'YES' or wo_prompt == 'yes': if (set(["nginx-custom"]).issubset(set(apt_packages))) : WOService.stop_service(self, 'nginx') if len(packages): WOFileUtils.remove(self, packages) WOAptGet.auto_remove(self) if len(apt_packages): Log.debug(self, "Removing apt_packages") Log.info(self, "Removing packages, please wait...") WOAptGet.remove(self, apt_packages) WOAptGet.auto_remove(self) Log.info(self, "Successfully removed packages") #Added for Ondrej Repo missing package Fix if self.app.pargs.php72: if WOAptGet.is_installed(self, 'php5.6-fpm'): Log.info(self, "PHP5.6-fpm found on system.") Log.info(self, "Verifying and installing missing packages,") WOShellExec.cmd_exec(self, "apt-get install -y php-memcached php-igbinary") @expose(help="Purge packages") def purge(self): """Start purging of packages""" apt_packages = [] packages = [] # Default action for stack purge if ((not self.app.pargs.web) and (not self.app.pargs.admin) and (not self.app.pargs.nginx) and (not self.app.pargs.php) and (not self.app.pargs.php7) and (not self.app.pargs.mysql) and (not self.app.pargs.wpcli) and (not self.app.pargs.phpmyadmin) and (not self.app.pargs.hhvm) and (not self.app.pargs.adminer) and (not self.app.pargs.utils) and (not self.app.pargs.all) and (not self.app.pargs.redis) and (not self.app.pargs.phpredisadmin)): self.app.pargs.web = True self.app.pargs.admin = True if self.app.pargs.all: self.app.pargs.web = True self.app.pargs.admin = True if (WOVariables.wo_platform_codename == 'trusty' or WOVariables.wo_platform_codename == 'xenial' or WOVariables.wo_platform_codename == 'bionic'): self.app.pargs.php7 = True if self.app.pargs.web: self.app.pargs.nginx = True self.app.pargs.php = True self.app.pargs.mysql = True self.app.pargs.wpcli = True if self.app.pargs.admin: self.app.pargs.adminer = True self.app.pargs.phpmyadmin = True self.app.pargs.utils = True if self.app.pargs.nginx: if WOAptGet.is_installed(self, 'nginx-custom'): Log.debug(self, "Purge apt_packages variable of Nginx") apt_packages = apt_packages + WOVariables.wo_nginx else: Log.error(self,"Cannot Purge! Nginx Stable version not found.") if self.app.pargs.php: Log.debug(self, "Purge apt_packages variable PHP") if (WOVariables.wo_platform_codename == 'trusty' or WOVariables.wo_platform_codename == 'xenial' or WOVariables.wo_platform_codename == 'bionic'): apt_packages = apt_packages + WOVariables.wo_php_extra else: apt_packages = apt_packages + WOVariables.wo_php72 #For debian --php7 if self.app.pargs.php72: if (WOVariables.wo_platform_codename == 'jessie'): Log.debug(self, "Removing apt_packages variable of PHP 7.0") apt_packages = apt_packages + WOVariables.wo_php72 if not WOAptGet.is_installed(self, 'php5-fpm'): apt_packages = apt_packages + WOVariables.wo_php_extra else: Log.info(self,"PHP 7.2 not supported.") if self.app.pargs.php72: if (WOVariables.wo_platform_codename == 'trusty' or WOVariables.wo_platform_codename == 'xenial' or WOVariables.wo_platform_codename == 'bionic'): Log.debug(self, "Removing apt_packages variable of PHP 7.0") apt_packages = apt_packages + WOVariables.wo_php72 if not WOAptGet.is_installed(self, 'php5.6-fpm'): apt_packages = apt_packages + WOVariables.wo_php_extra else: Log.info(self,"PHP 7.2 not supported.") if self.app.pargs.hhvm: if WOAptGet.is_installed(self, 'hhvm'): Log.debug(self, "Purge apt_packages varible of HHVM") apt_packages = apt_packages + WOVariables.wo_hhvm if self.app.pargs.redis: Log.debug(self, "Purge apt_packages variable of Redis") apt_packages = apt_packages + WOVariables.wo_redis if self.app.pargs.mysql: Log.debug(self, "Purge apt_packages variable MySQL") apt_packages = apt_packages + WOVariables.wo_mysql packages = packages + ['/usr/bin/mysqltuner'] if self.app.pargs.wpcli: Log.debug(self, "Purge package variable WPCLI") if os.path.isfile('/usr/bin/wp'): packages = packages + ['/usr/bin/wp'] else: Log.warn(self, "WP-CLI is not installed with WordOps") if self.app.pargs.phpmyadmin: packages = packages + ['{0}22222/htdocs/db/pma'. format(WOVariables.wo_webroot)] Log.debug(self, "Purge package variable phpMyAdmin") if self.app.pargs.phpredisadmin: Log.debug(self, "Removing package variable of phpRedisAdmin ") packages = packages + ['{0}22222/htdocs/cache/redis/phpRedisAdmin' .format(WOVariables.wo_webroot)] if self.app.pargs.adminer: Log.debug(self, "Purge package variable Adminer") packages = packages + ['{0}22222/htdocs/db/adminer' .format(WOVariables.wo_webroot)] if self.app.pargs.utils: Log.debug(self, "Purge package variable utils") packages = packages + ['{0}22222/htdocs/php/webgrind/' .format(WOVariables.wo_webroot), '{0}22222/htdocs/cache/opcache' .format(WOVariables.wo_webroot), '{0}22222/htdocs/cache/nginx/' 'clean.php'.format(WOVariables.wo_webroot), '{0}22222/htdocs/cache/memcache' .format(WOVariables.wo_webroot), '/usr/bin/pt-query-advisor', '{0}22222/htdocs/db/anemometer' .format(WOVariables.wo_webroot) ] if len(packages) or len(apt_packages): wo_prompt = input('Are you sure you to want to purge ' 'from server ' 'along with their configuration' ' packages,\nAny answer other than ' '"yes" will be stop this ' 'operation :') if wo_prompt == 'YES' or wo_prompt == 'yes': if (set(["nginx-custom"]).issubset(set(apt_packages))) : WOService.stop_service(self, 'nginx') if len(apt_packages): Log.info(self, "Purging packages, please wait...") WOAptGet.remove(self, apt_packages, purge=True) WOAptGet.auto_remove(self) if len(packages): WOFileUtils.remove(self, packages) WOAptGet.auto_remove(self) Log.info(self, "Successfully purged packages") #Added for php Ondrej repo missing package fix if self.app.pargs.php72: if WOAptGet.is_installed(self, 'php5.6-fpm'): Log.info(self, "PHP5.6-fpm found on system.") Log.info(self, "Verifying and installing missing packages,") WOShellExec.cmd_exec(self, "apt-get install -y php-memcached php-igbinary") def load(app): # register the plugin class.. this only happens if the plugin is enabled handler.register(WOStackController) handler.register(WOStackStatusController) handler.register(WOStackMigrateController) handler.register(WOStackUpgradeController) # register a hook (function) to run after arguments are parsed. hook.register('post_argument_parsing', wo_stack_hook)