ó ˜øhc@sddlZddlZddlZddlZddlZddlZddlmZyddlj j Z Wne k rddl Z nXdZ d„Zd„Zd„Zd „Zd „Zd „Zd „Zd „Zd„Zd„ZedkrejeejdƒƒndS(iÿÿÿÿN(tcopy2tchecktinstallt uninstallcCstjjdƒstStS(sk Check is it environment with installed plesk panel @rtype : bool @return True or False s/usr/sbin/plesk(tostpathtexiststFalsetTrue(((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pytis_plesksc Cs\tjjdƒstSttjdƒ(}tjddgd|d|ƒ}WdQX|dkS(sj Check if we're in environment with enabled cagefs @rtype : bool @return True or False s/usr/sbin/cagefsctltwbs--cagefs-statuststdouttstderrNi(RRRRtopentdevnullt subprocesstcall(Rtresult((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pyt has_cagefss cCstƒotƒ S(sŽ Check is it environment with installed plesk panel on clean ELS system without cagefs @rtype : bool @return True or False (R R(((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pyt is_bare_plesk-scCsƒ|rtj}n tj}tjƒ}|j|ƒd}tj|dƒ}|j|ƒtjƒ}|j|ƒ|j|ƒ|S(sÉ Logging configuration function :type verbose: bool :param verbose: Enable additional debug output if True, display only errors othervise :return: configured logger object s%(levelname)-8s: %(message)ss%H:%M:%S %d.%m.%y( tloggingtDEBUGtERRORt StreamHandlertsetLevelt Formattert setFormattert getLoggert addHandler(tverbosetlevelthandlert log_formatt formattertlogger((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pytconfigure_logging6s         cCsEg}x.tjdƒD]}|j|d|fƒqW|jƒ|S(s¨ 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 s/opt/alt/php[0-9][0-9]iþÿÿÿ(tglobtappendtsort(t php_versionstphp_dir((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pytfind_alt_php_versionsNs  cCs¸tjddgdtjdtjdtƒ}|jƒ\}}x[|jdƒD]J}d||f|jƒjdƒd krOtj d ||fƒtSqOWtj d ||fƒt S( sx :param php_ver: alt-php version (e.g. 44, 55, 70) :return: If handler exist returns True, otherwise False s/usr/local/psa/bin/php_handlers--listR R tuniversal_newliness s alt-php%s-%st isHandler for alt-php%s-%s exist.s#Handler for alt-php%s-%s not exist.( RtPopentPIPEtSTDOUTRt communicatetsplittstripRtinfoR(tcgi_typetphp_vertproctoutt_tline((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pytplesk_check_php_handler\s )cCstƒr$tjd||fƒtSt||ƒrNtjd||fƒtStjd||fƒtjjdj ||ƒƒd}|ddd||fd t j j |d ƒd t j j |d ƒd |dd||fg }|dkrw|j dd|dt j j |dƒdt j j |dƒgƒt j jd|ƒs™tt j j |dƒt j j |dƒƒq™n"|j dt j j |dƒgƒtj|dtjdtjdtƒ}|jƒ\}}|jdkrtddj |ƒ|fƒ‚ntj|d gdtjdtjdtƒ}|jƒ\}}|jdkrltd!|d"|ƒ‚ntjd#|ƒtS($Ns<Skipping alt-php%s-%s on Plesk installations without CageFS.sHandler for alt-php%s-%s exist.s'Plesk: Installing alt-php%s-%s handler.s)Plesk: Installing alt-php{0}-{1} handler.s/usr/local/psa/bin/php_handlers--adds -displaynames alt-php%s-%ss-clipaths usr/bin/phps-phpinis etc/php.inis-types-idtfpms-services alt-php%s-fpms-pathsusr/sbin/php-fpms-poolds etc/php-fpm.ds/opt/alt/php%s/etc/php-fpm.confsetc/php-fpm.conf.plesksetc/php-fpm.confsusr/bin/php-cgiR R R*iucannot execute "%s": %sR+s--rereaducannot execute "s --reread": %ss-Handler for alt-php%s was successfully added.(RRR2RR9RtsysR twritetformatRRtjointextendRRRR,R-R.R/t returncodet Exception(R3R4tphp_pathtcommandt add_commandR5R6R7((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pytplesk_add_php_handlernsH   1"cCst||ƒrãtjd||fƒtjjdj||ƒƒdddd||fg}tj|dtj dtj d t ƒ}|j ƒ\}}|j d krÈtd d j|ƒ|fƒ‚ntjd ||fƒt Stjd||fƒtSdS(Ns%Plesk: Removing alt-php%s-%s handler.s'Plesk: Removing alt-php{0}-{1} handler.s/usr/local/psa/bin/php_handlers--removes-ids alt-php%s-%sR R R*iucannot execute "%s": %sR+s2Handler for alt-php%s-%s was successfully removed.s#Handler for alt-php%s-%s not exist.(R9RR2R;R R<R=RR,R-R.RR/R@RAR>R(R3R4RCR5R6R7((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pytplesk_remove_php_handler™s "cCsfy>tjƒ}|dkr=tjjdƒs<tdƒ‚n|dkrªtd||ƒtd||ƒtjjd|ƒs”tjjd|ƒr:td ||ƒq:q=|d krtd|ƒtd|ƒtjjd|ƒsütjjd|ƒr:td |ƒq:q=td|ƒo9td|ƒo9td |ƒSnWn!tk ra}t j |ƒt SXd S( sL :rtype: bool :return: If success returns True, otherwise False tPlesks/usr/local/psa/bin/php_handlers)/usr/local/psa/bin/php_handler not exist.Rtfastcgitcgis/etc/init.d/alt-php%s-fpms-/usr/lib/systemd/system/alt-php%s-fpm.serviceR:RN( tcpapit getCPNameRRRRARERFR9RR2R(tmodeR4RBtcp_namete((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pytconfigure_alt_php«s&   ,   ,2 c Cs–y(tj|ddddgƒ\}}Wn0tjk rZ}tjjdj|ƒƒdSXt}d}g}x¬|D]¤\}}|dkrª|tkr¡d}qª|}n|dkrtj j d |ƒsétjjd j|ƒƒdS|j |d |fƒn|dkrtt }qtqtWt |ƒ} |sktƒ}| jddjg|D]} d| ^qMƒƒnx$|D]\} } t|| | ƒqrWdS(Nsm:p:vsmode=sphp=Rs(cannot parse command line arguments: {0}iRs-ms--modes-ps--phps/opt/alt/php%ssunknown PHP version {0}s-vs --verboseu!installed alt-php versions are %ss s alt-php%s: %s(s-ms--mode(s-ps--php(s-vs --verbose(tgetoptt GetoptErrorR;R R<R=RtMODESRRtisdirR%RR#R)R2R>RO( tsys_argstoptstargsRNRRLR'topttargtlogtitverR((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pytmainÆs6(          +t__main__i(schecksinstalls uninstall(RPR$RRRR;tshutilRtdb.clcommon.cpapitclcommonRJt ImportErrortdetectcpRRR RRR#R)R9RERFROR\t__name__texittargv(((s6/opt/alt/alt-php-config/alt-php-panel-configuration.pyts.            +   !