jg*ddlmZddlmZddlmZddlZddlZddlZddlZddlZddl Z ddl m Z m Z ddlmZddlmZmZmZdd lmZdd lmZdd lmZd ZGd deZGddee eZdS))print_function)division)absolute_importN)ABCMetaabstractmethod)time)INSTALLING_STATUSREMOVING_STATUSAcquireInterpreterLockError)with_metaclass)is_testing_enabled_repo)GroupInfoReaderiQceZdZdS)PkgManagerErrorN)__name__ __module__ __qualname__W/opt/cloudlinux/venv/lib64/python3.11/site-packages/clselect/baseclselect/pkgmanager.pyrr"sDrrceZdZdZdZdZdZdZdZdZ dZ dZ e dZ edZedZdZdZedZed Zd Zed Zed Zdd ZdZdZdZdZdZdZdZ e!j"dZ#e$dZ%e$dZ&e$dZ'dZ(e$dZ)dZ*e$dZ+dS)BasePkgManagerz Class responsible for all interactions with Yum, interpreter versions installation/removal and gathering info about already installed versions Ncjttjd}tj||||ddS)NwTz /bin/bash)stdinstdoutstderrshell executable)openosdevnull subprocessPopen)clscommandfnulls rrun_backgroundzBasePkgManager.run_background6s?RZ%% "     rcL|j|jSt}||_|SN)_testing_repo_enabled_cacher)selfress r_testing_enabledzBasePkgManager._testing_enabledBs,  + 73 3%''+.( rc|jr%tj|jdStj|jdS)Nzyum_cache.dat.testing_enabledz yum_cache.dat)r/r"pathjoin _config_dirr-s r_yum_cache_filezBasePkgManager._yum_cache_fileKsA   S7<< 02QRR Rw||D,o>>>rctj|j}t|}t |jd5}|D]}||d ddddS#1swxYwYdS)Nr )rget_group_info _alt_nameslistkeysr!r5write)r-groupsfgroups rupdate_yum_cachezBasePkgManager.update_yum_cacheQs /@@fkkmm$$ $& , , & & &5 %%%% & & & & & & & & & & & & & & & & & & &sA<<BBc tj|j}n#t$rYdSwxYwt |jz t krdSt|jS)z;Return data from file or None if file is absent or outdatedN) r"statr5OSErrorrst_mtimeMAX_CACHE_AGE_SECr!read)r-rBs r_read_yum_cachezBasePkgManager._read_yum_cacheXsx 74/00DD   44  FFT] "&7 7 74D())..000s  **c` tj|dS#ttf$rYdSwxYw)z* Silently remove file ignoring all errors N)r"removerCIOError)r>s r_remove_silentzBasePkgManager._remove_silentds?  IaLLLLL!    DD s --c|j||_t|jS)z Returns list of installed interpreter versions by scanning alt_node_dir and cache result. Cache also can be pre-filled at init time for testing/debugging purposes )_versions_info_scan_interpreter_versionsr:r;r4s rinstalled_versionsz!BasePkgManager.installed_versionsls>   &"&"A"A"C"CD D',,..///rc|j||_ |j|dS#t$r|cYSwxYw)a Should return full interpreter version for a particular major version or just fallback to given version if info is not available for any reason. This information is taken from the hash map populated during installed_packages scan. :param maj: Major interpreter version :return: Full interpreter version or Major if info is not available N full_version)rMrNKeyError)r-majs rget_full_versionzBasePkgManager.get_full_versionws]   &"&"A"A"C"CD  &s+N; ;   JJJ s5 AAcLtj|jdS)Nz yum.pid.lockr"r1r2r3r4s r_pid_lock_filezBasePkgManager._pid_lock_filesw||D,n===rcLtj|jdS)Nzyum_cache.pid.lockrVr4s r_cache_lock_filezBasePkgManager._cache_lock_filesw||D,.BCCCrc tj|js|t j|t||ttdt|j ddS)z :param pid: pid of Yum process :param version: interpreter version or None for "cache update" case :param status: what yum is currently doing(few predefined statuses) :return: None )pidversionstatusrrN) r"r1existsr3_create_config_dirsjsondumpstrfloatrr!rW)r-r[r\r]s r_write_yum_statusz BasePkgManager._write_yum_statussw~~d.// '  $ $ & & & 7||$&&MM   #S ) )  + + + + +rcv|}|"d|d|dSdS)Nz>{} of version '{}' is in progress. Please, wait till it's doner]r\)_read_yum_statusformatr- ongoing_yums r_check_yum_in_progressz%BasePkgManager._check_yum_in_progresssE++--  "1 H-{9/EFF G # "rc|jt tjt |j}n+#t $r||jYdSwxYwtj| ds||jdS tj |dtj \}}n#t$r|cYSwxYw|dkr|S||jdS)a Result "None" - means installing/removing of our packages is not currently in progress. However, it doesn't mean that any other yum instance is not running at the same time, but we ok with this because our yum process will start processing automatically once standard /var/run/yum.pid lock is removed by other process :return: None or dict Nr[r)rWNotImplementedErrorr`loadr! ExceptionrKpsutil pid_existsgetr"waitpidWNOHANGrC)r-datar[_s rrfzBasePkgManager._read_yum_statuss"   &%'' ' 9T$"56677DD       3 4 4 444   %11     3 4 4 44 ZU RZ88FC   KKK  !88K D/000ts!&>$A&%A&-(C C%$C%c6|j|S)z Formatting cmd string for installing package :return: formatted cmd string :param version: version of interpreter for installing :rtype: str ) _install_cmdrgr-r\s r format_cmd_string_for_installingz/BasePkgManager.format_cmd_string_for_installings ''000rc6|j|S)z Formatting cmd string for removing package :return: formatted cmd string :param version: version of interpreter for removing :rtype: str ) _remove_cmdrgrxs rformat_cmd_string_for_removingz-BasePkgManager.format_cmd_string_for_removings&&w///rcl||}|r|S||jvrd|S|}|dS||vrd|S||}||}||j|tdS)Return None or Error stringz!Version "{}" is already installedNz^Updating available versions cache is currently in progress. Please, try again in a few minuteszGVersion "{}" is not available. Please, make sure you typed it correctly) _verify_actionrOrgcheckout_availableryr)rdr[r )r-r\err available cmd_stringps rinstall_versionzBasePkgManager.install_versions!!'**  J d- - -6==gFF F++--  FF ) # #??Evg P::7CC    + + qug/@AAAAArcf||}|r|S||jvrd|S||rdS||rdS||}||}||j|tdS)r~zVersion "{}" is not installedzeThis version is currently in use by another operation. Please, wait until it's complete and try againzPIt's not possible to uninstall version which is currently in use by applicationsN) rrOrgis_interpreter_locked_is_version_in_user|r)rdr[r )r-r\rrrs rremove_versionzBasePkgManager.remove_versions!!'**  J $1 1 1299'BB B  % %g . . DDD  " "7 + + 66688AA    + + qug?????rc|}|)|dttfvr|d|dddiSdS)zr Should return version and it's status for versions that is currently installing|removing Nr]r\)r]base_dir)rfr r rhs r in_progresszBasePkgManager.in_progress s_ ++--  "H%*;_)NNNI&)(3 "))  trc#rK||} t|d}n#t$rt|wxYw t j|tjtjzn#t$rYnwxYw dV|dS#|wxYw)Nr) _get_lock_file_pathr!rJr fcntlflockLOCK_EXLOCK_NBcloser-interpreter_version lock_namelfs racquire_interpreter_lockz'BasePkgManager.acquire_interpreter_locks,,-@AA  Ci%%BB C C C-.ABB B C  KEMEM9 : : : :    D    EEE HHJJJJJBHHJJJJs'*A,A55 BBB B6ctr+rlr4s rrz!BasePkgManager.checkout_available2!###rctr+rr4s rrNz)BasePkgManager._scan_interpreter_versions6rrctr+rr4s rr_z"BasePkgManager._create_config_dirs:rrc||}tj|sdSt |d} t j|t jt jzn%#t$rY| dSwxYw | n#| wxYwdS)NFrT) rr"r1isfiler!rrrrrJrrs rrz$BasePkgManager.is_interpreter_locked>s,,-@AA w~~i(( 5 )S ! !  KEMEM9 : : : :    HHJJJJJ  ; HHJJJJBHHJJJJus*,A54B05 B?B0BB00Cctr+rrxs rrzBasePkgManager._verify_actionKrrctr+rrxs rrz"BasePkgManager._get_lock_file_pathOs!###rctr+rrxs rrz!BasePkgManager._is_version_in_useRrr)NN),rrr__doc__r,r3rM_yum_cmdr9 _redirect_logrwr{ classmethodr)propertyr/r5r@rG staticmethodrKrOrTrWrYrdrjrfryr|rrr contextlibcontextmanagerrrrrNr_rrrrrrrrr&s #'KNHJMLK   [  X??X? &&& 1 1 1\00X0">>X>DDXD++++ GGG###J111000BBB,@@@* ,$$^$$$^$$$^$   $$^$$$$$$^$$$rr) __future__rrrrr"rror$ simplejsonr`abcrrrrr r r future.utilsr clcommon.utilsrclcommon.group_info_readerrrErnrobjectrrrrrs&%%%%%&&&&&&  '''''''' ('''''222222666666     i   n$n$n$n$n$^^GV44n$n$n$n$n$r