PK!íç±Vªªalt-php-panel-configuration.pynuȯÝí#!/usr/bin/env python # -*- mode:python; coding:utf-8; -*- import sys import getopt import os import logging import glob import subprocess from shutil import copy2 try: import db.clcommon.cpapi as cpapi except ImportError: import detectcp as cpapi MODES = ("check", "install", "uninstall") def configure_logging(verbose): """ Logging configuration function :type verbose: bool :param verbose: Enable additional debug output if True, display only errors othervise :return: configured logger object """ if verbose: level = logging.DEBUG else: level = logging.ERROR handler = logging.StreamHandler() handler.setLevel(level) log_format = "%(levelname)-8s: %(message)s" formatter = logging.Formatter(log_format, "%H:%M:%S %d.%m.%y") handler.setFormatter(formatter) logger = logging.getLogger() logger.addHandler(handler) logger.setLevel(level) return logger def find_alt_php_versions(): """ Returns list of installed alt-php versions and their base directories :rtype: list :return: List of version (e.g. 44, 55) and base directory tuples """ php_versions = [] for php_dir in glob.glob("/opt/alt/php[0-9][0-9]"): php_versions.append((php_dir[-2:], php_dir)) php_versions.sort() return php_versions def plesk_check_php_handler(cgi_type, php_ver): """ :param php_ver: alt-php version (e.g. 44, 55, 70) :return: If handler exist returns True, otherwise False """ proc = subprocess.Popen(["/usr/local/psa/bin/php_handler", "--list"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) out, _ = proc.communicate() for line in out.split("\n"): if 'alt-php%s-%s' % (php_ver, cgi_type) in line.strip().split(" ")[0]: logging.info("Handler for alt-php%s-%s exist." % (php_ver, cgi_type)) return True logging.info("Handler for alt-php%s-%s not exist." % (php_ver, cgi_type)) return False def plesk_add_php_handler(cgi_type, php_ver, php_path): if plesk_check_php_handler(cgi_type, php_ver): logging.info("Handler for alt-php%s-%s exist." % (php_ver, cgi_type)) return False logging.info("Plesk: Installing alt-php%s-%s handler." % (php_ver, cgi_type)) print >> sys.stdout, "Plesk: Installing alt-php%s-%s handler." % (php_ver, cgi_type) # run /usr/local/psa/bin/php_handler --add -displayname alt-php-7.0.0 -path /opt/alt/php70/usr/bin/php-cgi # -phpini /opt/alt/php70/etc/php.ini -type fastcgi -id 666 -clipath /opt/alt/php70/usr/bin/php command = "/usr/local/psa/bin/php_handler" add_command = [ command, '--add', '-displayname', 'alt-php%s-%s' % (php_ver, cgi_type), '-clipath', os.path.join(php_path, 'usr/bin/php'), '-phpini', os.path.join(php_path, 'etc/php.ini'), '-type', cgi_type, '-id', 'alt-php%s-%s' % (php_ver, cgi_type), ] if cgi_type == "fpm": add_command.extend([ '-service', 'alt-php%s-fpm' % php_ver, '-path', os.path.join(php_path, 'usr/sbin/php-fpm'), '-poold', os.path.join(php_path, 'etc/php-fpm.d'),]) if not os.path.exists("/opt/alt/php%s/etc/php-fpm.conf" % php_ver): copy2(os.path.join(php_path, 'etc/php-fpm.conf.plesk'), os.path.join(php_path, 'etc/php-fpm.conf')) else: add_command.extend([ '-path', os.path.join(php_path, 'usr/bin/php-cgi'),]) proc = subprocess.Popen(add_command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) out, _ = proc.communicate() if proc.returncode != 0: raise Exception(u"cannot execute \"%s\": %s" % (' '.join(add_command), out)) proc = subprocess.Popen([command, "--reread"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) out, _ = proc.communicate() if proc.returncode != 0: raise Exception(u"cannot execute \"" + command + " --reread\": %s" % out) logging.info("Handler for alt-php%s was successfully added." % php_ver) return True def plesk_remove_php_handler(cgi_type, php_ver): if plesk_check_php_handler(cgi_type, php_ver): logging.info("Plesk: Removing alt-php%s-%s handler." % (php_ver, cgi_type)) print >> sys.stdout, "Plesk: Removing alt-php%s-%s handler." % (php_ver, cgi_type) command = ["/usr/local/psa/bin/php_handler", "--remove", "-id", "alt-php%s-%s" % (php_ver, cgi_type)] proc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) out, _ = proc.communicate() if proc.returncode != 0: raise Exception(u"cannot execute \"%s\": %s" % (' '.join(command), out)) logging.info("Handler for alt-php%s-%s was successfully removed." % (php_ver, cgi_type)) return True else: logging.info("Handler for alt-php%s-%s not exist." % (php_ver, cgi_type)) return False def configure_alt_php(mode, php_ver, php_path): """ :rtype: bool :return: If success returns True, otherwise False """ try: cp_name = cpapi.getCPName() if cp_name == "Plesk": if not os.path.exists("/usr/local/psa/bin/php_handler"): raise Exception("/usr/local/psa/bin/php_handler not exist.") if mode == "install": plesk_add_php_handler('fastcgi', php_ver, php_path) plesk_add_php_handler('cgi', php_ver, php_path) if os.path.exists("/etc/init.d/alt-php%s-fpm" % php_ver) or os.path.exists("/usr/lib/systemd/system/alt-php%s-fpm.service" % php_ver): plesk_add_php_handler('fpm', php_ver, php_path) elif mode == "uninstall": plesk_remove_php_handler('fastcgi', php_ver) plesk_remove_php_handler('cgi', php_ver) if os.path.exists("/etc/init.d/alt-php%s-fpm" % php_ver) or os.path.exists("/usr/lib/systemd/system/alt-php%s-fpm.service" % php_ver): plesk_remove_php_handler('fpm', php_ver) else: return plesk_check_php_handler('fastcgi', php_ver) and plesk_check_php_handler('cgi', php_ver) and plesk_check_php_handler('fpm', php_ver) except Exception as e: logging.info(e) return False def main(sys_args): try: opts, args = getopt.getopt(sys_args, "m:p:v", ["mode=", "php=", "verbose"]) except getopt.GetoptError, e: print >> sys.stderr, \ u"cannot parse command line arguments: %s" % unicode(e) return 1 verbose = False mode = "check" php_versions = [] for opt, arg in opts: if opt in ("-m", "--mode"): if arg not in MODES: # use check mode mode = "check" else: mode = arg if opt in ("-p", "--php"): if not os.path.isdir("/opt/alt/php%s" % arg): print sys.stderr, \ u"unknown PHP version %s" % arg return 1 php_versions.append((arg, "/opt/alt/php%s" % arg)) if opt in ("-v", "--verbose"): verbose = True log = configure_logging(verbose) if not php_versions: php_versions = find_alt_php_versions() log.info(u"installed alt-php versions are\n%s" % "\n".join(["\t alt-php%s: %s" % i for i in php_versions])) for ver, path in php_versions: configure_alt_php(mode, ver, path) if __name__ == "__main__": sys.exit(main(sys.argv[1:])) PK!!€¡†úúmultiphp_reconfigure.pynuȯÝí#!/usr/bin/env python # -*- mode:python; coding:utf-8; -*- # author: Dmitriy Kasyanov import getopt import glob import logging import os import sys import traceback import ConfigParser try: import rpm except: class rpm: @staticmethod def labelCompare(version1, version2): for i in range(0, len(version1)): if version1[i] < version2[i]: return -1 return 0 # Minimal version with MultiPHP support for alt-php MIN_CPANEL_VERSION = '11.66.0.11' SCL_PREFIX_PATH = '/etc/scl/prefixes' CONFIG_PATH = '/opt/alt/alt-php-config/alt-php.cfg' def configure_logging(verbose): """ Logging configuration function. @type verbose: bool @param verbose: Enable additional debug output if True, display only errors otherwise. """ if verbose: level = logging.DEBUG else: level = logging.ERROR handler = logging.StreamHandler() handler.setLevel(level) log_format = "%(levelname)-8s: %(message)s" formatter = logging.Formatter(log_format, "%H:%M:%S %d.%m.%y") handler.setFormatter(formatter) logger = logging.getLogger() logger.addHandler(handler) logger.setLevel(level) return logger def get_cpanel_version(): """ Returns cPanel version if cPanel installed or None othervise. @rtype: str or None @return: String with cPanel version or None if cPanel not installed. """ if os.path.exists('/usr/local/cpanel/version'): with open('/usr/local/cpanel/version', 'r') as fd: version = fd.read() return version return None def find_interpreter_versions(): """ Returns list of installed alt-php versions and their base directories. @rtype: list @return: List of version (e.g. 44, 55) and base directory tuples. """ int_versions = [] base_path_regex = "/opt/alt/php[0-9][0-9]" for int_dir in glob.glob(base_path_regex): int_versions.append((int_dir[-2:], int_dir)) int_versions.sort() return int_versions def delete_prefix(prefix_path): """ Remove prefix file @type prefix_path: str @param prefix_path: Path to the prefix file, e.g. /etc/scl/prefix/alt-php70 @rtype: bool @return: True if file was removed sucessfully, False otherwise """ try: if os.path.exists(prefix_path): os.unlink(prefix_path) return True except OSError, e: logging.error(u"Couldn't remove prefix %s:\n%s" % (prefix_path, e)) return False def create_prefix(prefix_path, prefix_content): """ Creates prefix with path to alt-php @type prefix_path: str @param prefix_path: Path to the prefix file, e.g. /etc/scl/prefix/alt-php70 @type prefix_content: str @param prefix_content: SCL path, e.g. /opt/cloudlinux @rtype: bool @return: True if file was created sucessfully, False otherwise """ try: with open(prefix_path, 'w') as fd: fd.write(prefix_content) except IOError, e: logging.error(u"Couldn't open file %s:\n%s" % (prefix_path, e)) return False return True def reconfigure(config, int_version): """ @type config: @param config: @type int_version: str @param int_version: Interpreter version (44, 55, 72, etc.) @type int_path: str @param int_path: Interpreter directory on the disk (/opt/alt/php51, etc.) @rtype: bool @return: True if reconfiguration was successful, False otherwise """ cp_version = get_cpanel_version() prefix_name = "alt-php%s" % int_version prefix_path = os.path.join(SCL_PREFIX_PATH, prefix_name) prefix_content = "/opt/cloudlinux\n" alt_php_enable_file = "/opt/cloudlinux/alt-php%s/enable" % int_version if cp_version and rpm.labelCompare( ('1', cp_version, '0'), ('1', MIN_CPANEL_VERSION, '0')) == -1: status = delete_prefix(prefix_path) else: try: int_enabled = config.getboolean("MultiPHP Manager", prefix_name) except (ConfigParser.NoOptionError, ConfigParser.NoSectionError), e: int_enabled = True logging.error("Could not parse alt-php.cfg:\n %s" % e) if int_enabled and os.path.exists(alt_php_enable_file): status = create_prefix(prefix_path, prefix_content) else: status = delete_prefix(prefix_path) return status def check_alt_path_exists(int_path, int_name, int_ver): """ Check if alt-php path exist ---------- @type int_path: str or unicode @param int_path: Interpreter directory on the disk (/opt/alt/php51, etc.) @type int_name: str or unicode @param int_name: Interpreter name (php, python) @type int_ver: str or unicode @apram int_ver: Interpreter version (44, 55, 72, etc.) @rtype: bool @return: True if interpreter path exists, False otherwise """ if not os.path.isdir(int_path): print >> sys.stderr, u"unknown %s version %s" % (int_name, int_ver) return False return True def main(sys_args): try: opts, args = getopt.getopt(sys_args, "p:v", ["php=", "verbose"]) except getopt.GetoptError, e: print >> sys.stderr, \ u"cannot parse command line arguments: %s" % unicode(e) return 1 verbose = False int_versions = [] int_name = "php" for opt, arg in opts: if opt in ("-p", "--php"): int_name = "php" int_path = "/opt/alt/php%s" % arg if check_alt_path_exists(int_path, int_name, arg): int_versions.append((arg, int_path)) else: return 1 if opt in ("-v", "--verbose"): verbose = True log = configure_logging(verbose) config = ConfigParser.SafeConfigParser() config.read(CONFIG_PATH) try: if not int_versions: int_versions = find_interpreter_versions() for int_ver, int_dir in int_versions: reconfigure(config, int_ver) return 0 except Exception, e: log.error(u"cannot reconfigure alt-%s for SCL: %s. " u"Traceback:\n%s" % (int_name, unicode(e), traceback.format_exc())) return 1 if __name__ == "__main__": sys.exit(main(sys.argv[1:])) PK!I® ý install_odbcnuȯÝí#!/bin/sh #dist_ver=$(cat /etc/redhat-release | sed -e 's#[^0-9]*##g' | cut -b1) # add repo conf #curl https://packages.microsoft.com/config/rhel/${dist_ver}/prod.repo > /etc/yum.repos.d/mssql-release.repo cat << EOF > /etc/yum.repos.d/mssql-release.repo [packages-microsoft-com-prod] name=packages-microsoft-com-prod baseurl=https://packages.microsoft.com/rhel/\$releasever/prod/ enabled=1 gpgcheck=1 gpgkey=https://packages.microsoft.com/keys/microsoft.asc EOF # install packages ACCEPT_EULA=Y yum -y install msodbcsql17 PK!qfèÄÓÓ alt-php.cfgnuȯÝí[MultiPHP Manager] alt-php44 = yes alt-php51 = yes alt-php52 = yes alt-php53 = yes alt-php54 = yes alt-php55 = yes alt-php56 = yes alt-php70 = yes alt-php71 = yes alt-php72 = yes alt-php73 = yes alt-php74 = yes PK!ΉOU²² detectcp.pynuȯÝí#!/usr/bin/env python # -*- mode:python; coding:utf-8; -*- import os def getCPName(): # cPanel if os.path.isfile('/usr/local/cpanel/cpanel'): return "cPanel" # DirectAdmin if os.path.isfile('/usr/local/directadmin/directadmin') or \ os.path.isfile('/usr/local/directadmin/custombuild/build'): return "DirectAdmin" # InterWorx if os.path.isfile('/usr/local/interworx/iworx.ini'): return "InterWorx" # ISPManager if os.path.isfile('/usr/local/ispmgr/bin/ispmgr'): return "ISPManager" # Plesk if os.path.isfile('/usr/local/psa/version'): return "Plesk" # Unknown panel / No panel return "Unknown"PK!ÅÂYiää detectcp.pycnu„[µü¤ó ›­Â^c@sddlZd„ZdS(iÿÿÿÿNcCs„tjjdƒrdStjjdƒs:tjjdƒr>dStjjdƒrTdStjjdƒrjd Stjjd ƒr€d Sd S( Ns/usr/local/cpanel/cpaneltcPanels"/usr/local/directadmin/directadmins(/usr/local/directadmin/custombuild/buildt DirectAdmins/usr/local/interworx/iworx.init InterWorxs/usr/local/ispmgr/bin/ispmgrt ISPManagers/usr/local/psa/versiontPlesktUnknown(tostpathtisfile(((s#/opt/alt/alt-php-config/detectcp.pyt getCPNames(RR (((s#/opt/alt/alt-php-config/detectcp.pyts PK!íç±Vªªalt-php-panel-configuration.pynuȯÝíPK!!€¡†úúømultiphp_reconfigure.pynuȯÝíPK!I® ý 97install_odbcnuȯÝíPK!qfèÄÓÓ ƒ9alt-php.cfgnuȯÝíPK!ΉOU²² ‘:detectcp.pynuȯÝíPK!ÅÂYiää ~=detectcp.pycnu„[µü¤PKãž@