§ À•¿jž.ãóþ—ddlmZddlmZddlmZddlZddlZddlZddlZddlZddl Z ddl m Z m Z ddlmZddlmZmZmZdd lmZdd lmZdd lmZd ZGd „de¦«ZGd„dee e¦«¦«ZdS)é)Úprint_function)Údivision)Úabsolute_importN)ÚABCMetaÚabstractmethod)Útimeé)ÚINSTALLING_STATUSÚREMOVING_STATUSÚAcquireInterpreterLockError)Úwith_metaclass)Úis_testing_enabled_repo)ÚGroupInfoReaderi€Qcó—eZdZdS)ÚPkgManagerErrorN)Ú__name__Ú __module__Ú __qualname__©óúW/opt/cloudlinux/venv/lib64/python3.11/site-packages/clselect/baseclselect/pkgmanager.pyrr"s€€€€€Ø€DrrcóÆ—eZdZdZdZdZdZdZdZddgZ e d„¦«Z e d„¦«Z e d„¦«Zd„Zd „Zed „¦«Ze d „¦«Zd „Ze d „¦«Ze d„¦«Zdd„Zd„Zd„Zed„¦«Zed„¦«Zd„Zd„Zd„Ze j!d„¦«Z"ed„¦«Z#ed„¦«Z$ed„¦«Z%d„Z&ed„¦«Z'd„Z(ed„¦«Z)dS) ÚBasePkgManagerzœ Class responsible for all interactions with Yum, interpreter versions installation/removal and gathering info about already installed versions NÚyumz--disableplugin=fastestmirrorcóL—t|t¦«s4td t |¦«j¦«¦«‚t |d¦«}ttj ¦«}d|d<tj |tj |tj d|¬¦«S)Nz(run_background expects argv list, got {}ÚabÚCÚLANGF)ÚstdinÚstdoutÚstderrÚshellÚenv)Ú isinstanceÚlistÚ TypeErrorÚformatÚtyperÚopenÚdictÚosÚenvironÚ subprocessÚPopenÚDEVNULLÚSTDOUT)ÚclsÚargvÚlogfileÚlog_fpr#s rÚrun_backgroundzBasePkgManager.run_background8sš€õ ˜$¥Ñ%Ô%ð :ÝÐFß#šV¥D¨¡J¤JÔ$7Ñ8Ô8ñ:ô:ð :å�g˜tÑ$Ô$ˆÝ•2”:ÑԈ؈ˆF‰ ÝÔØ ÝÔ$ØÝÔ$ØØð  ñ ô ð rcóL—|j�|jSt¦«}||_|S©N)Ú_testing_repo_enabled_cacher)ÚselfÚress rÚ_testing_enabledzBasePkgManager._testing_enabledLs,€à Ô +Ð 7ØÔ3Ð 3å%Ñ'Ô'ˆØ+.ˆÔ(؈ rcó¤—|jr%tj |jd¦«Stj |jd¦«S)Nzyum_cache.dat.testing_enabledz yum_cache.dat)r;r+ÚpathÚjoinÚ _config_dir©r9s rÚ_yum_cache_filezBasePkgManager._yum_cache_fileUsA€à Ô ð SÝ”7—<’< Ô 0Ð2QÑRÔRÐ RÝŒw�|Š|˜DÔ,¨oÑ>Ô>Ð>rcó—tj|j¦«}t| ¦«¦«}t |jd¦«5}|D]}| |›d�¦«Œ ddd¦«dS#1swxYwYdS)NÚwú )rÚget_group_infoÚ _alt_namesr%Úkeysr)rAÚwrite)r9ÚgroupsÚfÚgroups rÚupdate_yum_cachezBasePkgManager.update_yum_cache[sÌ€Ý Ô/°´Ñ@Ô@ˆÝ�f—k’k‘m”mÑ$Ô$ˆÝ �$Ô&¨Ñ ,Ô ,ð &°Øð &ð &�Ø—’˜5˜ ˜ ˜ Ñ%Ô%Ð%Ð%ð &ð &ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð &ð &sÁA<Á<BÂBcóè— tj|j¦«}n#t$rYdSwxYwt ¦«|jz t krdSt|j¦« ¦«S)z;Return data from file or None if file is absent or outdatedN) r+ÚstatrAÚOSErrorrÚst_mtimeÚMAX_CACHE_AGE_SECr)Úread)r9rNs rÚ_read_yum_cachezBasePkgManager._read_yum_cachebsx€ð Ý”7˜4Ô/Ñ0Ô0ˆDˆDøÝð ð ð Ø�4�4ð øøøõ ‰FŒF�T”]Ñ "Õ&7Ò 7Ð 7Ø�4å�DÔ(Ñ)Ô)×.Ò.Ñ0Ô0Ð0s ‚œ *©*có`— tj|¦«dS#ttf$rYdSwxYw)z* Silently remove file ignoring all errors N)r+ÚremoverOÚIOError)rJs rÚ_remove_silentzBasePkgManager._remove_silentns?€ð Ý ŒI�a‰LŒLˆLˆLˆLøÝ�Ð!ð ð ð Ø ˆDˆDð øøøs ‚˜-¬-cóŽ—|j€| ¦«|_t|j ¦«¦«S)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%rGr@s rÚinstalled_versionsz!BasePkgManager.installed_versionsvs>€ð Ô Ð &Ø"&×"AÒ"AÑ"CÔ"CˆDÔ Ý�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)rYrZÚKeyError)r9Úmajs rÚget_full_versionzBasePkgManager.get_full_version�s]€ð Ô Ð &Ø"&×"AÒ"AÑ"CÔ"CˆDÔ ð ØÔ& sÔ+¨NÔ;Ð ;øÝð ð ð ØˆJˆJˆJð øøøs¢5µ AÁAcóL—tj |jd¦«S)Nz yum.pid.lock©r+r=r>r?r@s rÚ_pid_lock_filezBasePkgManager._pid_lock_file’s€åŒw�|Š|˜DÔ,¨nÑ=Ô=Ð=rcóL—tj |jd¦«S)Nzyum_cache.pid.lockrbr@s rÚ_cache_lock_filezBasePkgManager._cache_lock_file–s€åŒw�|Š|˜DÔ,Ð.BÑCÔCÐCrc ó—tj |j¦«s| ¦«t j|t|¦«|tt¦«¦«dœt|j d¦«¦«dS)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 )ÚpidÚversionÚstatusrrCN) r+r=Úexistsr?Ú_create_config_dirsÚjsonÚdumpÚstrÚfloatrr)rc)r9rgrhris rÚ_write_yum_statusz BasePkgManager._write_yum_statusšs…€õŒw�~Š~˜dÔ.Ñ/Ô/ð 'Ø × $Ò $Ñ &Ô &Ð &Ý Œ ØÝ˜7‘|”|ØÝ�$™&œ&‘M”Mð  ð õ �Ô# SÑ )Ô )ñ  +ô +ð +ð +ð +rcóv—| ¦«}|�"d |d|d¦«SdS)Nz>{} of version '{}' is in progress. Please, wait till it's donerirh)Ú_read_yum_statusr'©r9Ú ongoing_yums rÚ_check_yum_in_progressz%BasePkgManager._check_yum_in_progressªsE€Ø×+Ò+Ñ-Ô-ˆ Ø Ð "ð1ç’˜  HÔ-¨{¸9Ô/EÑFÔFð Gð #Ð "rcó—|j€t¦«‚ tjt |j¦«¦«}n+#t $r| |j¦«YdSwxYwtj|  d¦«¦«s| |j¦«dS tj |dtj ¦«\}}n#t$r|cYSwxYw|dkr|S| |j¦«dS)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 Nrgr)rcÚNotImplementedErrorrlÚloadr)Ú ExceptionrWÚpsutilÚ pid_existsÚgetr+ÚwaitpidÚWNOHANGrO)r9ÚdatargÚ_s rrrzBasePkgManager._read_yum_status±s"€ð Ô Ð &Ý%Ñ'Ô'Ð 'ð Ý”9�T $Ô"5Ñ6Ô6Ñ7Ô7ˆDˆDøÝð ð ð à × Ò  Ô 3Ñ 4Ô 4Ð 4Ø�4�4ð øøøõ Ô  §¢¨%¡¤Ñ1Ô1ð Ø × Ò  Ô 3Ñ 4Ô 4Ð 4Ø�4ð Ý”Z  U¤ ­R¬ZÑ8Ô8‰FˆC��øÝð ð ð ðˆKˆKˆKð øøøð �!Š8ˆ8؈Kà ×Ò˜DÔ/Ñ0Ô0Ð0؈ts!—&>¾$A&Á%A&Â-(Cà C%Ã$C%có—t¦«‚)aƒ Build the yum install argv for a given interpreter version. Returns a list[str] suitable for subprocess.Popen(shell=False). The historical name is kept for caller compatibility; the return type changed from str to list[str] as part of CLOS-4372 hardening. :param version: version of interpreter for installing :rtype: list[str] ©rw©r9rhs rÚ format_cmd_string_for_installingz/BasePkgManager.format_cmd_string_for_installingÖs€õ"Ñ#Ô#Ð#rcó—t¦«‚)zì Build the yum remove argv for a given interpreter version. Returns a list[str] suitable for subprocess.Popen(shell=False). :param version: version of interpreter for removing :rtype: list[str] r‚rƒs rÚformat_cmd_string_for_removingz-BasePkgManager.format_cmd_string_for_removingäs€õ"Ñ#Ô#Ð#rcóx—| |¦«}|r|S||jvrd |¦«S| ¦«}|€dS||vrd |¦«S| |¦«}| ||j¦«}| |j|t¦«dS)ú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_actionr[r'Úcheckout_availabler„r5Ú _log_filerprgr )r9rhÚerrÚ availabler2Úps rÚinstall_versionzBasePkgManager.install_versionðs×€à×!Ò! 'Ñ*Ô*ˆØ ð ØˆJà �dÔ-Ð -Ð -Ø6×=Ò=¸gÑFÔFÐ Fà×+Ò+Ñ-Ô-ˆ Ø Ð ðFðFð ˜)Ð #Ð #ð?ß?EºvÀg¹¼ð Pð×4Ò4°WÑ=Ô=ˆØ × Ò   d¤nÑ 5Ô 5ˆØ ×Ò˜qœu gÕ/@ÑAÔAÐAÐAÐArcór—| |¦«}|r|S||jvrd |¦«S| |¦«rdS| |¦«rdS| |¦«}| ||j¦«}| |j |t¦«dS)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) r‰r[r'Úis_interpreter_lockedÚ_is_version_in_user†r5r‹rprgr )r9rhrŒr2rŽs rÚremove_versionzBasePkgManager.remove_versionsÕ€à×!Ò! 'Ñ*Ô*ˆØ ð ØˆJà ˜$Ô1Ð 1Ð 1Ø2×9Ò9¸'ÑBÔBÐ Bà × %Ò % gÑ .Ô .ð DðDðDð × "Ò " 7Ñ +Ô +ð 6ð6ð6ð×2Ò2°7Ñ;Ô;ˆØ × Ò   d¤nÑ 5Ô 5ˆØ ×Ò˜qœu g­Ñ?Ô?Ð?Ð?Ð?rcó„—| ¦«}|�)|dttfvr|d|dddœiSdS)zr Should return version and it's status for versions that is currently installing|removing NrirhÚ)riÚbase_dir)rrr r rss rÚ in_progresszBasePkgManager.in_progresss_€ð ×+Ò+Ñ-Ô-ˆ Ø Ð "ؘHÔ%Õ*;½_Ð)NÐNÐNà˜IÔ&Ø)¨(Ô3Ø "ð)ð)ðð ð ˆtrc#órK—| |¦«} t|d¦«}n#t$rt|¦«‚wxYw t j|tjtjz¦«n#t$rYnwxYw dV—| ¦«dS#| ¦«wxYw)NrC) Ú_get_lock_file_pathr)rVr ÚfcntlÚflockÚLOCK_EXÚLOCK_NBÚclose©r9Úinterpreter_versionÚ lock_nameÚlfs rÚacquire_interpreter_lockz'BasePkgManager.acquire_interpreter_lock+sÕèè€à×,Ò,Ð-@ÑAÔAˆ ð CÝ�i Ñ%Ô%ˆBˆBøÝð Cð Cð CÝ-Ð.AÑBÔBÐ Bð Cøøøð Ý ŒK˜�EœM­E¬MÑ9Ñ :Ô :Ð :Ð :øÝð ð ð ð ˆDð  øøøð Ø ˆEˆEˆEà �HŠH‰JŒJˆJˆJˆJøˆB�HŠH‰JŒJˆJˆJøøøs'™*ªAÁ,A5Á5 BÂBÂB  B6có—t¦«‚r7r‚r@s rrŠz!BasePkgManager.checkout_availableBó€å!Ñ#Ô#Ð#rcó—t¦«‚r7r‚r@s rrZz)BasePkgManager._scan_interpreter_versionsFr¥rcó—t¦«‚r7r‚r@s rrkz"BasePkgManager._create_config_dirsJr¥rcó–—| |¦«}tj |¦«sdSt |d¦«} t j|t jt jz¦«n%#t$rY|  ¦«dSwxYw |  ¦«n#|  ¦«wxYwdS)NFrCT) r™r+r=Úisfiler)ršr›rœr�rVržrŸs rr‘z$BasePkgManager.is_interpreter_lockedNs¿€Ø×,Ò,Ð-@ÑAÔAˆ ÝŒw�~Š~˜iÑ(Ô(ð Ø�5Ý �)˜SÑ !Ô !ˆð Ý ŒK˜�EœM­E¬MÑ9Ñ :Ô :Ð :Ð :øÝð ð ð Øà �HŠH‰JŒJˆJˆJˆJð øøøð ;ð �HŠH‰JŒJˆJˆJøˆB�HŠH‰JŒJˆJˆJøøøØˆus*Á,A5Á4B0Á5 BÁ?B0ÂBÂB0Â0Ccó—t¦«‚r7r‚rƒs rr‰zBasePkgManager._verify_action[r¥rcó—t¦«‚r7r‚rƒs rr™z"BasePkgManager._get_lock_file_path_s€Ý!Ñ#Ô#Ð#rcó—t¦«‚r7r‚rƒs rr’z!BasePkgManager._is_version_in_usebr¥r)NN)*rrrÚ__doc__r8r?rYrFr‹Ú _yum_argvÚ classmethodr5Úpropertyr;rArLrSÚ staticmethodrWr[r`rcrerprurrrr„r†r�r“r—Ú contextlibÚcontextmanagerr£rŠrZrkr‘r‰r™r’rrrrr&s•€€€€€ððð #'ÐØ€Kà€NØ€JØ€Ið Ð7Ð8€Iàð ð ñ„[ð ð&ððñ„Xððð?ð?ñ„Xð?ð &ð&ð&ð 1ð 1ð 1ðððñ„\ððð0ð0ñ„Xð0ðððð"ð>ð>ñ„Xð>ððDðDñ„XðDð+ð+ð+ð+ð GðGðGð#ð#ð#ðJð $ð $ñ„^ð $ðð $ð $ñ„^ð $ðBðBðBð,@ð@ð@ð*ððð ÔððñÔðð,ð$ð$ñ„^ð$ðð$ð$ñ„^ð$ðð$ð$ñ„^ð$ð ð ð ðð$ð$ñ„^ð$ð$ð$ð$ðð$ð$ñ„^ð$ð$ð$rr)Ú __future__rrrršr+r²rzr-Ú simplejsonrlÚabcrrrr•r r r Ú future.utilsr Úclcommon.utilsrÚclcommon.group_info_readerrrQryrÚobjectrrrrúr»sŒðð&Ð%Ð%Ð%Ð%Ð%ØÐÐÐÐÐØ&Ð&Ð&Ð&Ð&Ð&Ø € € € Ø € € € àÐÐÐØ € € € ØÐÐÐØÐÐÐØ'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ØÐÐÐÐÐððððððððððð (Ð'Ð'Ð'Ð'Ð'à2Ð2Ð2Ð2Ð2Ð2Ø6Ð6Ð6Ð6Ð6Ð6ðÐð ð ð ð ð �iñ ô ð ð~$ð~$ð~$ð~$ð~$�^�^ G¨VÑ4Ô4ñ~$ô~$ð~$ð~$ð~$r