VULN_CHECK_I913V6 jLxdZddlmZddlmZddlmZddlmZddlZddlZddlZ ddl m Z ddl m Z dd lmZmZmZdd lmZdd lmZdd lmZ dd lmZddlZddlZddl ZddlZddlZddl Zddl!Zddl"Zddl#Zddl$Zddl%Zddl&Zddl'Z ddl(ZdZ)ddl*Zddl+Zddl,Zddl-Zddl.Zddl/Zddl0Zddl1Zddl2Zddl3Zddl4Zddl5ZddlZddl6Zddl7Z7ddl8Z8ddl9Z9ddl:Z:ddl;Z;ddlZ>ddl?Z?ddl@Z@ddlAZAddlBZBddlCZCe;jdZEGddeFZGdZHy#e$r dd lmZYwxYw#e$rdZ)YwxYw)z Supplies the Base class. )absolute_import)division)print_function)unicode_literalsN)deepcopy) CompsQuery)_P_ucd) _parse_specs) SwdbInterface)misc)SequenceTFdnfc (eZdZdydZdZdZdZdZdZe dZ d Z dzd Z d Z ed Zed ZedZej$dZeej(j+ddZedZedZedZej4dZdZd{dZdZdZdZdzdZ d|dZ!d}dZ"dZ#dZ$dyd Z%d~d!Z&d"Z'e(jRe(jTe(jVe(jXe(jZe(j\e(j^e(j`d#Z1e2e(d$re(jfe1d%<d&e(jhe(jjziZ6ed'Z7ed(Z8e8j$d)Z8dzd*Z9d+Z:ed,d-d.d/0Z;d1Zd4Z?d5Z@d6ZAdzd7ZBdd8ZCd9ZDd:ZEd;ZFdyd<ZGd}d=ZHdd>ZIdd?ZJd@ZKdAZLdBZM ddCZN dydDZOdEZPdFZQdGZRdHZSddIZTdJZUddKZVddLZWdMZXdNZYdOZZdPZ[dQZ\dRZ]ddSZ^dTZ_dUZ`dVZad}dWZbddXZcddYZddzdZZed}d[Zfd\Zgd]Zhd^Zidyd_Zjdyd`ZkdydaZldydbZmddcZndddZo ddeZpdfZqdzdgZrdhZsddiZtdjZuddkZvddlZwddmZxdnZyddoZzdydpZ{dqZ|drZ}dsZ~dtZduZdvZdwZdxZy)BaseNc<d|_|xs|j|_d|_d|_d|_d|_d|_d|_tjj|_ d|_ t|_t|_tj"j%|_tj(j+|_tj.j1|_tt4j6g|_tj:j=|_d|_ d|_!d|_"g|_#i|_$d|_%t|_&tNjPjR|_*d|_+y)NF),_closed_setup_default_conf_conf_goal_repo_persistor_sack _transaction_priv_ts_compsrcompsTransactionBunch _comps_trans_historyset _tempfiles_trans_tempfilescallbackDepsolve _ds_callbackloggingLogging_loggingrepodictRepoDict_reposrpmRPMPROB_FILTER_OLDPACKAGE_rpm_probfilterpluginPlugins_plugins_trans_success_trans_install_set_tempfile_persistor_update_security_filters_update_security_options_allow_erasing_repo_set_imported_gpg_keyslibdnf transactionTransactionPersistence_UNKNOWN _persistenceoutput)selfconfs -/usr/lib/python3.12/site-packages/dnf/base.py__init__z Base.__init__^s5 7T557  #    II668 % #LL113 ++- ll++- "C$A$A#BC **, #"'#' (*%(*%#+.5("..MM c|SNr?s rA __enter__zBase.__enter__|s rCc$|jyrEclose)r?exc_argss rA__exit__z Base.__exit__  rCc$|jyrErJrGs rA__del__z Base.__del__rNrCc|jr|jj|y|jjry|j j|yrE)rr#updater@destdirr")r?filess rA_add_tempfileszBase._add_tempfilessA     ! ! ( ( / YY    OO " "5 )rCc*|jt|jd}d|jjvrd|d<|j rd|d< |j j|jfddi|y#tj$r~}tjtdj|j|t j"j%tdj|jd}~wwxYw) NT load_prestoload_updateinfo filelistsload_filelists load_other build_cacheloading repo '{}' failure: {}z"Loading repository '{}' has failed)loaddictdeltarpmr@optional_metadata_typesload_metadata_otherr load_repo_repohawkey Exceptionloggerdebugr formatidr exceptions RepoError)r?repo mdload_flagses rA_add_repo_to_sackzBase._add_repo_to_sacks  ,02 $));; ;-1L) *  # #)-L & I DJJ  N N N I LL:;BB477AN O..**67>>twwGI I Is)BDA9D  Dctjj}|j}d|vr@tjj |j \}}}||d<|||d<|||d<|S)N releaseverreleasever_majorreleasever_minor)rr@Conf substitutionsr-detect_releasevers installroot)r@substrsmajorminors rArzBase._setup_default_confsxxx}}"" u $**4+;+;< %Ju",E,  ,1() ,1() rCc |jjDcgc]}|js|j}} |jj |j ||jj|jjd|jj|jj}|r@t$j'tj(j*j-|dyycc}w#tj$r-}tjj!t#|d}~wwxYw)NF) update_only debugsolvermodule_obsoletesr)repos iter_enabledmodule_hotfixesrksackfilter_modules_moduleContainerr@rymodule_platform_id debug_solverrrfrgrrlErrorr rhwarningmodule module_baseformat_modular_solver_errors)r?i hot_fix_repos solver_errorsrps rA_setup_modular_excludeszBase._setup_modular_excludess'+zz'>'>'@V'@!ADUDU'@ V / II44%%}dii6K6K ,,%TYYMcMc!%!;!;5=M  NN &&CCMRSDTU W W  /..&&s1v. . /s#C?C?A|r%|D] \} }|jj/| "|str|j yyy) NallrTemptyF with_nevra with_provideswith_filenamesreponamemain)r!r@disable_excludes WITH_MODULESrrrrklen includepkgsrqueryfiltermrsubjectSubjectunionget_best_queryappendapply excludepkgs add_includesset_use_includes add_excludes)r? only_maindisabled repo_includes repo_excludesr incl_queryinclsubj excl_queryexcl include_query exclude_queryrrepoids rA_setup_excludes_includeszBase._setup_excludes_includesstyy112 H   ( ( *   ZZ,,.448#q}}%)!%!2!:!:!:!FJ #AMM 2"{{2248%/%5%5d6I6I II$e\a7J7c&d !3&&&5!((**:*:*@%>::!''*;*;*=tt%>G@  / / 6 6w ?  % % '  # #  $ $ ) ) + $ @s9C!cV|j|jd|jS)NT) arch_filter)r read_compsrGs rArz Base.compss& ;;  OOO -{{rCc|jSrE)rrGs rAr@z Base.confzzrCc|jSrEr,rGs rArz Base.repos s{{rCcd|_yrErrGs rArz Base.reposs  rC _priv_rpmconnc|tjjj|jj SrE)rr- connection RpmConnectionr@ryrGs rA_rpmconnz Base._rpmconns)ww!!// 0E0EFFrCc|jSrE)rrGs rArz Base.sackrrCc|jtjjd|jjpt j jd|jj|jjd|jj|j_|jjS)NzSack was not initializedFarch) rrrlrrr:rModulePackageContainerr@ryrw persistdirrGs rArzBase._moduleContainers 99 ..&&'AB B 99 % % -)/)M)Mtyy,,dii.E.Ef.MtyyOcOc*eDII &yy)))rCc|jSrE)rrGs rAr;zBase.transaction(s   rCc@|jr td||_y)Nztransaction already set)r ValueErrorr?values rAr;zBase.transaction-s!   67 7!rCcttjj|jj|_yrE)r persistor RepoPersistorr@cachedirrrGs rA_activate_persistorzBase._activate_persistor4s#"}}::499;M;MNrCc|jjr'|jj|j|||jj ||y)z&Load plugins and run their __init__().N)r@pluginsr2_load _run_init)r? disabled_globenable_pluginsclis rA init_pluginszBase.init_plugins7s? 99   MM   =. I c*rCc8|jjy)z#Run plugins pre_configure() method.N)r2_run_pre_configrGs rApre_configure_pluginszBase.pre_configure_plugins>s %%'rCc8|jjy)zRun plugins configure() method.N)r2 _run_configrGs rAconfigure_pluginszBase.configure_pluginsCs !!#rCc8|jjy)zRun plugins unload() method.N)r2_unloadrGs rAunload_pluginszBase.unload_pluginsHs rCcB|jj}|j|j|j}|rtj j r!td}tj|ytj jdur!td}tj|y|dkr!td}tj|y|j}|$||krtjtdy|jjD]}|jjd|jj!sQtjtdj#d j%|jj&y|jj)D]}|j+\}} | *tjtd |j,C|r| dkrDtj/td |j,|jj1|rL| |krGtd }tj/||j,| |jj1tj/td |j,| |rd|_|j5ddtjtdy)NzCMetadata timer caching disabled when running on metered connection.Fz:Metadata timer caching disabled when running on a battery.rz Metadata timer caching disabled.z"Metadata cache refreshed recently.z*There are no enabled repositories in "{}".z", "z4%s: will never be expired and will not be refreshed.z&%s: has expired and will be refreshed.zC%s: metadata will expire after %d seconds and will be refreshed nowz!%s: will expire after %d seconds.T)load_system_repoload_available_reposzMetadata cache created.)r@metadata_timer_syncrrrutilon_metered_connectionr rhinfo on_ac_powersince_last_makecachervaluesresetMaxMirrorTries _any_enabledrjjoinreposdirr_metadata_expire_inrkriexpirereset_last_makecache fill_sack) r?timerperiodrmsgrrnris_cache expires_ins rA update_cachezBase.update_cacheMs`..    '  $ $ &(( xx--/>? C xx##%.56 C {:; C #,#A#A#C #/4H64Q ABCD ))+ ,,Q/,zz&&( KKFGNN DII../1 2((*A%&%:%:%< "Xz! ATUWXW[W[\q QGH!$$O :.]^ S!$$ 3  QBCQTT')+ -1I * DI A/01rCc tjjd}|jddtjj ||_tjj|jj|jj}|5|dur |j jd|rg}d}tj}|jjr(tj j"j%|j&j)D]} |j+||j,j/|kDr|j,j/}|j,j1|kr|j,j1}t2j5t7d|j8tj:j=|j,j?|r.t2jIt7d d jO||j&jQr|dk7r|dk7rt2jSt7d tUjVtY|tj:j=|n(|j&j[jMd d d |j} |j j]| j^| j`| jb|je|tjfji|j |_5| jl|jj_6|jnjq|j S#t$r |dk7rYwxYw#tj@jB$ru} |j,jE|jFdurt2jId | |jK|j8|jMYd } ~ 3d } ~ wwxYw#1swYxYw)z'Prepare the Sack and the Goal objects. sack setupTrgoalFr]autor%s: using metadata from %s.z Error: %sNIgnoring repositories: %s, z-Last metadata expiration check: %s ago on %s.)seconds)9rr'Timerresetr _build_sackrlockbuild_metadata_lockr@r exit_on_lockrIOErrortimegpgkey_dns_verificationdnssecRpmImportedKeyscheck_imported_keys_validityrrrqre getTimestampgetAgerhrir rkrnormalize_timegetMaxTimestamprlrmrskip_if_unavailablerrdisablerrrdatetime timedeltaintr _configureinstallonlypkgsinstallonly_limitallow_vendor_changerr Goalrprotect_running_kernelr2run_sack) r?rrrr error_reposmtsagerrpr@s rArzBase.fill_sacks1 !!,/ 4 (XX))$/ xx++DII,>,> @V@VW u,JJ//E/B$ iik9944JJ..KKM002A$..q177//1C7"#''"6"6"8C77>>+c1"#''.."2C Q'D%Eqtt%(XX%<%<)*)@)@)B&DE3"NN56 +8NP::**,axC1H A&U$V$,$6$6s3x$H$'HH$;$;C$@B  ((*UVyy d22D4J4JDLdLde %%' XX]]4::. ,0,G,G )  zzY'612(>>33$(00E9!{A6#**1440 $5Ts^!Q1'OA6Q1:COCQ1OQ1OQ1Q.9A*Q)#Q1)Q..Q11Q;c tjjd}|jddtjj ||_tjj|jj|jj}|5|dur |j jdg}|jjr(tjj j#|j$j'D]} |j(j+ddt-|j.d}d |jj0vrd|d <|j2rd|d <|j j4|j(fi|t6j9t;d |j<tj>jA|j(jC|r.t6jWt;ddjY|ddd|j}|j j[|j\|j^|j`|jc|tjdjg|j |_4|jj|jh_5|jljo|j S#t$r |dk7rY_wxYw#tDtFjHf$r}|jJdurBtjLjOt;d jQ|j<|t6j9t;d jQ|j<||jS|j<|jUYd}~d}~wwxYw#1swYxYw)a Prepare Sack and Goal objects and also load all enabled repositories from cache only, it doesn't download anything and it doesn't check if metadata are expired. If there is not enough metadata present (repond.xml or both primary.xml and solv file are missing) given repo is either skipped or it throws a RepoError exception depending on skip_if_unavailable configuration. r Tr Fr r) throwExcept ignoreMissingrWrZr[r\rr^Nrr)8rr'rrrrrrrr@rrrrrrrrrrre loadCacher`rarbrcrdrhrir rkrr!r" RuntimeErrorrfrgr#rlrmrjrr$rrr(r)r*r+rr r,rr-r2r.) r?rrrr/rnrorpr@s rAfill_sack_from_repos_in_cachez"Base.fill_sack_from_repos_in_caches  !!,/ 4 (XX))$/ xx++DII,>,> @V@VW u,JJ//E/B Kyy00 **GGI //1#JJ((T(N#'DMM8<$>L"dii&G&GG9= %56//59 \2(DJJ((D|DLL#@!A477!$!8!8%)ZZ%?%?%A"CD2.12DIIk4JLMRyy d22D4J4JDLdLde %%' XX]]4::. ,0,G,G )  zzU'612.%f&6&67#//58!nn66=>EEdggqQSS Q'F%G%N%NtwwXY%Z[&&tww/LLNN#;Ts]!P'LAP!C(L& 2PL#P"L##P&O=?B3O82P8O==PP ctjj|jj|_|jj s|j|j|jru|jj|j j|j j|jrK|j|jn/|j jj|j|j jret j#t%dt j#t%ddj'tj(j*|j,|j.j1|j3|j5d|_ y)NzRThe downloaded packages were saved in cache until the next successful transaction.z1You can remove cached packages by executing '%s'.z{prog} clean packagesprogF)rrTempfilePersistorr@rr5 keepcache_clean_packagesr"r3r#rRget_saved_tempfilesrr4tempfiles_to_addrhrr rjr MAIN_PROGr historyrKr _closeRpmDBrGs rA_finalize_basezBase._finalize_basese#&==#B#B II  $  yy""   1""%%,,,,@@BD((..0**(()>)>?((99@@))+  # # 4 4 KKCD E KK"#$;$B$BHZHZ$B$[ ] == $ LL    ##% #rCc|jrytjtjj dd|_|j |jdddd|_y)ztClose all potential handles and clean cache. Typically the handles are to data sources and sinks. Nz Cleaning up.T)rrr ) rrhlogrr'DDEBUGrCrr2rGs rArKz Base.closesR <<  3;;%%~6   Dt 4 rCc0tjjj|j|}|D]} |jj | y#tj j$r}tj|Yd}~Yd}~wwxYw)z?Read repositories from the main conf file and from .repo files.N) rr@read RepoReaderraddrl ConfigErrorrhr)r?optsreaderrnrps rAread_all_reposzBase.read_all_repos,sl))$))T:D " t$>>-- "q!! "sAB6BBcv|rd|_|r#tjj|_|rd|_|jStj j|j|_|jj|j _ |jr&|jr|jj|j|jjtjj!|_d|_g|_|r|rt)j*yyy)z1Make the Base object forget about various things.N)rrr*r+r,rr r,r@r-rrollbackr rArKrrrrr6gccollect)r?rrr s rArz Base.reset7s DJ ,,//1DK DJzz% XX]]4::6 48II4T4T 1zzd33%%..0}}( ""$ # : : > II ! !#  q!II%%D,,006H"E FM MM # #H ---11$7G" ))'2&yy''  $ $S%A%A B 99    $ $S%B%B C%%hllD4H4H!L  ##J/}}rCcd|jy|jj|`d|_y)z"Releases the RPM transaction set. N)rrKrGs rArTzBase._tss- ==   M rCctjjd}tjj |_t jtjjd|jjD]Q}|js|js|jj}|s;t jtjjd|jt j"j%t j"j'|d}t j"j%|d}d} t j"j)|st!j*|dt-j.||d  |j j=||sB|jET|r=|j jFjI|jJjLd g||j S#t0tj2j4f$r;t7j8}|j:}t-j.||d YwxYw#tj2j>$r7}tAd } t jC| |j|Yd}~d}~wwxYw)z6Create the groups object to access the comps metadata.z loading compszGetting group metadataz%Adding group file from repository: %sgenz groups.xmlNi)modeT)destcheck_timestampsFz1Failed to add groups file for repository: %s - %sbasearch)'rr'rrCompsrrhrErFrr enablegroupsrre getCompsFnrkospathrdirnameexistsmakedirsr decompressPermissionErrorrl MiscErrortempfileNamedTemporaryFilename_add_from_xml_filename CompsErrorr rfrK_irrrw) r?rrrncomps_fngen_dirgen_file temp_filerprs rArzBase.read_compss !!/2iioo'  3;;%%'?@JJ++-D$$==zz,,.H JJs{{))> Iggll277??8# Q$779 $>>x%P Q >>,, 1KLTWWa00 1s,AH2.J2AJJK'0,K""K'c|j<|jj}t|jj||_|jS)zeauto create the history object that to access/append the transaction history information. )rs)r r@rsr r)r?rss rA _getHistoryzBase._getHistorys? == --J)$))*>*>:VDM}}rCc"|jSrE)rrGs rAz Base.s )9)9);rCct|d|SNr setattrrs rArz Base.sU14rCct|ddSrrrGs rArz Base.s z4)HrCzDNF SWDB Interface Object)fgetfsetfdeldocc jj}t|j}j }|j |j j }|jD]f}|j|}|d}jj|djj|d|j|||ddh|jD]}jj|d|j|}t|} g} |D]4} t| | k(r| jd| $| j| 6| d} |j!|| | dd|j#D]}jj|d|j|}|D cgc]"} | |vs| j$|j$k(s!| $}} |j'|}||vr-|j)|j$r|j'|}|D]9}|j'|}t*j,j/||dk(s8|};|j1|||fd }t2j4j7|||j9D]}|j|}d}|D]} | j$|j$k(s| }n||j;d}n|j=||D cgc]"} | |vs| j$|j$k(s!| $}} fd }t2j4j7||||vr|j1||n/|j?|||jj|d jj|d |jA}|r jBjEtFjH j }|jK||j |D]}|j)|j$|jL}|rA|d}|j'|jjO||j'|jj|d|j'|}|jQ|||Scc} wcc} w)Nrdddrrrrc<jj|dSNodr& pkg_addedpkgr?s rArz(Base._goal2transaction..T..88dCrCc<jj|dSrrrs rArz(Base._goal2transaction..0rrCuduflags)pkg__neqrrrp))rAr-r!list_obsoleted_get_installonly_queryr installedlist_downgradesobsoleted_by_packager&r add_downgradelist_reinstallsstrinsertr add_reinstall list_installsr get_reasonfilterr:r;TransactionItemReasonCompare add_installrrmapall list_upgradespopremove add_upgrade list_erasuresrrrfIGNORE_EXCLUDESrr set_reason add_erase)r?r ts all_obsoletedinstallonly_queryinstallonly_query_installedrobs downgraded nevra_pkg obsoletesobs_pkg reinstalledrreasonobsoletereason_obsoletecbupgradederasuresremaining_installed_querytmp_remaining_installed_query remainings` rA_goal2transactionzBase._goal2transactionsv \\  D//12  779!&7&A&A&C&I&I&K#'')C++C0CQJ    ' ' D 9    ' 'S 1   S*c!"g 6 * '')C    ' 'S 1++C0CCIIw<9,$$Q0$$W-  $A,K   S+y} =*%%'C    ' 'S 1++C0C"NcQ-%7166SXX;M1cCN__S)F '',G,N,NTWT\T\,N,]s+ "$--"9%%BB6?[_aa,F NN3V ,CB HHOOB $1(2%%'C++C0CH66SXX% H  771: 8$"NcQ-%7166SXX;M1cCNCB HHOOB $''sC(sHc2!!++Hd;    ' 'S 13(4%%' (, f>T>T(U(_(_(a % % - -x - @ % + + -0I0P0PVYV^V^ehemem0P0n-0 =a @IMM),LL++Ir}}Y7OP!!++C5- S&)  wOFOs"S:3S:("S? S?c|j}|j}|jj}g}g}|D]2}||vr|j||d|j||4||fS)aJ See what packages in the query match packages (also in older versions, but always same architecture) that are already installed. Unlike in case of _sltr_matches_installed(), it is practical here to know even the packages in the original query that can still be installed. r)r_na_dict availabler)r?qinst inst_per_archavail_per_archavail_linst_lnas rA_query_matches_installedzBase._query_matches_installedHs}{{}  //1 B]" mB/23~b12 ! wrCc|jjjj|j }t |S)z See if sltr matches a patches that is (in older version or different architecture perhaps) already installed. r)rrrrmatcheslist)r?sltrrs rA_sltr_matches_installedzBase._sltr_matches_installed\s;yy **,444HDzrCcffdjjjDS)z5Get iterator over the packages installed by the user.c3XK|]!}jj|r|#ywrE)rAuser_installed).0rr?s rA z*Base.iter_userinstalled..es+5<<<..s3._pto_callbacks1D HOOFCH=>KrC)C isinstancerryumrpmtransLoggingTransactionDisplayrr;rrupdateFailSafeDatar groupenvhasattrr$rr&rAlastrTdbCookieend_rpmdb_versionbegr=rr2run_pre_transactionrun_transactionr3rhrr rbuild_rpmdb_lockr@rr_populate_rpm_ts_run_rpm_checkerrorrlTransactionCheckErrorr'rordercleanRPMTransactionrXrmessagesrfrjr _trans_error_summaryr isTsFlagSetr-RPMTRANS_FLAG_TESTrr+r>_run_transactionunload_removed_pluginsr_post_transaction_outputri)r?displayr'old rpmdb_versiontidrr0rrtestcbtserrors errstringdescrsummaryrdisplay_r2s rAdo_transactionzBase.do_transactions'8,iG WW   7 7 9 :T'] J   ! ! & & (  ! ! 4 4 6}}$--"5"59J9J4(TYY!hhtyy1GT6*tyy!hhtyy1Gll'');$(HH$5$5$7M$'$9$9M   BUYUfUf g   / MM - - / MM ) ) +"&D   A123xx(()=)=)-)?)?A     - -dhh 7&&(D?@ S!CLL% nn::3?? KK89 :KK%%&89E KK45 6 HHNN  HHNN WW%%44T4EFxx}}V,H8}q !??,COOAiL$7$7$<=-784? %ECJ!66I&33I>/Inn**955 KK78 9xx##C$:$:;OTP G  ! ! & & (  ! ! 4 4 6KK%%m4E!!000HByy##a' " H&+HO!, MM - - / KK/0 1''2'.Cuv  ,,T-=-=> %%'  8844T4;K;K][C LL \ QTsI!YDYY%c zd}tjd}i}|j|D]}|jddk(rt |jdn/t j t |jddz }|jd|vr|||jd<||jd|ks|||jd<|rD|tdd zz }|D].}|d td d ||j|||zd zz }0|sy td dz|z}|S)zParse the error string for 'interesting' errors which can be grouped, such as disk space issues. :param errstring: the error string :return: a string containing a summary of the errors z9needs (\d+)(K|M)B(?: more space)? on the (\S+) filesystemr,Mrg@zDisk Requirements:r*z z7At least {0}MB more space needed on the {1} filesystem.Nz Error Summaryz ------------- ) recompilefinditerr8r'mathceilr r rj)r?rVrXpdiskm size_in_mbks rArJzBase._trans_error_summary&s@ JJS TI&A,-GGAJ#,=QWWQZ499AGGAJ&(D*Jwwqz%#-QWWQZ AGGAJ*,#-QWWQZ '  q-.5 5G52MMG$$VDGQ/03777 O$'::WDrCc|jjxr*|jjtj  SrE)r@history_recordrTrKr-rLrGs rA_record_historyzBase._record_historyHs4yy''=$$S%;%;< < =rCc d}|jrt|jj}|jj j }|j|j}|jj}|jj}| |j}|||k7rFtjt!dj#t$j&j(d}t+|dr(|j,rdj/|j,}n3t+|dr'|j0rdj/|j0}|jj2r|jj2nd} |jj5||g|| |j6 }|jj8r.t;j<d } | r t;j<| tj?t$j@jBd |jj|jDd} tj?t$j@jBd |jj8r t;j< t$j&jG|j|jH| nktK| d k(r|jD cgc]} | jMs| } } | s0|jOD]/}tjQt!d j#|1t!d}t$jRjU|tjQt!d| D]#}tjQtW|d %|jrD|jjYtZj\s|jj_t!d}t$jRjU|dD]1}t+||sta||} tcjd|3tk|jHjl|_7|jjYtZj\s|jq|S#d } YxYw#YGxYwcc} w#tfthf$r$t!d}tjQ||YwxYw)zh Perform the RPM transaction. :return: history database transaction ID or None Nrz RPMDB altered outside of {prog}.r9r$r%r&r\)r'commentr(rzRPM transaction start.zRPM transaction over.r)zCould not run transaction.zTransaction couldn't start:) ts_all_fn ts_done_fnz$Failed to remove transaction file %s)9rkrr@history_record_packagesrrrrrrTr<rAr;r=rhrir rjrrMAIN_PROG_UPPERr:r$rr&rmr>r= reset_nicernicerEr'rFr$_sync_rpm_trans_with_swdbrrFailedrIrfrlrr rKr-rLrgetattrrunlink_frOSErrorbool install_setr4_verify_transaction)r?rrSusing_pkgs_patsinstalled_query using_pkgsrpmdbvlastdbvr'rmoniceerrorselfailedrrprfns rArMzBase._run_transactionLs    !"499#D#DEO"iioo/99;O(//_/EIIKJXX&&(Fll'')G"!33&G"3 QABII11J34GtV$((499-v&499((499-+/99+<+? 99    **488T5F5FG >  [A $(88;8Rryy{b8F;;;=COOAiL$7$7$<=)45nn**3// OOA;< =AaD *##%dhh.B.B3CYCY.Z   (01C..&&s+ +,Ar1~R^-MM"% -#'t'8'8'D'D"Exx##C$:$:;  $ $ & qE <( )-BCCOOC,-s6:S6)TT(TT 6S=T 0U?Ucb|jDcgc]+}|jtjjk7r|-}}t |fd}t j jd}d}t jj|}|jj}t|D cgc]} | jc} } |jjD][} | j!} | j#D]6} | j%| vs| j'd| j)8]|D]}||j*|}|j,j/}|jj1||d|_ycc}wcc} w)Nc*|dz } |||SNrrF)rcounttotal verify_pkg_cbs rAdisplay_bannerz0Base._verify_transaction..display_banners# QJE(c5%0LrCzverify transactionrT)r;r.r:#TransactionItemAction_REASON_CHANGErrr'rr rpmdb_sackrrr!rrAr8getCompsGroupItem getPackagesgetName setInstalledrrrTr<rr3)r?rr1transaction_itemsrrrrrrnamestigrdrrs ` @rAr{zBase._verify_transactionsk++U+CzzV//SSS + U%&   !!"67XX((.      ( ( *Q'QQVVQ'(,,$$B$$&A]]_99;%'NN4(FFH%%%C"377E2E%""$   "OU$(s 0F';F,c Btjj|jj|jj }|5t j }td|D}t|D cgc])} t| tjjs(| +c} } |jjjdk(r|jt||| n|jt||tjj!|||j#r-tj$j'j#tfd|D} tjj)d|j*} |jj,} | dk(}j*rl|s| dkDrd| dkDr| dz} t/d}t0j3|j*Dcgc]}|}}|Dcgc];}tjj5||tjj6=c}}td |D}|jt||tjj!|||j#r-tj$j'j#| tfd |Dz } tjj)| |i} j*r |r]| dkDrdj*rHtj$j&j9j*}t0j3|ddd| |  \}}||k7rV||krt/d }d ||z d zz }n||kDrt/d }d ||z d zz }t0j3|dz |dz yycc} wcc}wcc}w#1swYxYw)Nc34K|]}|jywrE download_sizerploads rArz1Base._download_remote_payloads..s!L8%%"5"58) total_drpmsc3@K|]}j|ywrE_bandwidth_usedrrrs rArz1Base._download_remote_payloads..s$5+3%%44U;+3)rrrrz,Some packages were not downloaded. Retrying.c34K|]}|jywrErrs rArz1Base._download_remote_payloads..s&=3;%',&9&93;rc3@K|]}j|ywrErrs rArz1Base._download_remote_payloads..sL8%..u58rz?Delta RPMs reduced %.1f MB of updates to %.1f MB (%.1f%% saved)dzIFailed Delta RPMs increased %.1f MB of updates to %.1f MB (%.1f%% wasted)i)rrbuild_download_lockr@rrrsumrr3drpm DeltaPayloadr __code__ co_argcountrn_download_payloads_irrecoverablerl DownloadError_update_saving _recoverableretriesr rhr _pkg2payload RPMPayload errmap2str)r?payloadsrprogresscallback_total fail_fastr beg_downloadest_remote_sizepayload total_drpm remote_sizesavingrforeverrrremaining_pkgsrealfullpercentrs @rA_download_remote_payloadszBase._download_remote_payloadssxx++DII,>,> @V@VW 99;L!!L8!LLO(0_WJwH]H]4^_aJ~~&&22a7s8}o:Vs8}o>XX004KF$$&nn2263H3H3JKK5+355KXX,,VX-3-@-@BFii''GlG%%7gkQ;qLGFG C 171D1D!E1D##1D!E!/0 .XX**3#((:M:MN .0#&&=3;&=#=s8}o>44XtYO((*..66v7L7L7NOOL8LLM 002F+%%7gk.""nn22=='') C ad  % ; 5 t 4<d{)*t c 11*+t c 11 KKTI-ti/? I e`2"F0?TsL 0P<)P &P *E(P P P!AP!CP7P>APPPc 2|j|\}}|r |tjj}tjj |j jj||jj}|j|Dcgc]}|jc}|Dcgc]F}tjj|||jtjj H}}|j#|||||jj$r|D]}|j&rHt(j*j-|j/|j0j3d} nMt(j*j-|jj4|j0j3d} t7j8| |jj$yycc}wcc}w)aDownload the packages specified by the given list of packages. `pkglist` is a list of packages to download, `progress` is an optional DownloadProgress instance, `callback_total` an optional callback to output messages about the download operation. N/)_select_remote_pkgsrr$NullDownloadProgressr DeltaInforrrr@deltarpm_percentagerUlocalPkgrnr delta_factoryrrrSbaseurlrrrget_local_baseurllocationlstrippkgdirshutilcopy) r?pkglistrr remote_pkgs local_pkgsrrrrs rAdownload_packageszBase.download_packagess#'":":7"C Z <<<<>88%%diioo&7&A&A&C&. 0M0MOD   ; G;C; G H$/0#.C--c8T=O=O.1hh.A.AC#. 0  * *8T8^ T 99  !;;!ww||C,A,A,C,/LL,?,?,D FH "ww||CHHOOS\\=P=PQT=UVH Hdii&7&78 "  !H0s "HA Hcg}|s|S|jjr(tjj t dg}|D]}t jj|sAd|vr=tjj||j|}|j|g |j|jj||j'd|r4|r2t!t dj)dj+||S#t $r1}t"j%||j|Yd}~d}~wwxYw)NzACannot add local packages, because transaction job already existsz://T)rzCould not open: {}r%)r req_lengthrrlrr rrrr_urlopen_progressr@rUrradd_cmdline_packagerrhrrrjr)r? path_liststrictrpkgs pkgs_errorrrps rAadd_remote_rpmszBase.add_remote_rpms5s#K :: "..&&UVX X D77>>$'ETMxx11$ 8L##TF+ ( DII99$?@  %%%5 &!0188*9MNO O  (q!!!$'' (s1*D'' E!0&EE!c |jr|jj}d}n3|j|j}|j }|j }|r"|jj}tjjj|}tjjj||j}tj j#|j}~|dk(rd} d} | | fS|dk(r|rd} nd} t%d|z} | | fS|dk(rd} t%d|z} | | fS|dk(r|rd} nd} d} t%d|z} | | fS|d k(rd} t%d |z}   fSd} d} | | fS) aVerify the GPG signature of the given package object. :param po: the package object to verify the signature of :return: (result, error_string) where result is:: 0 = GPG signature verifies ok or verification is not required. 1 = GPG verification failed but installation of the right GPG key might help. 2 = Fatal GPG verification error, give up. rr\rr,z"Public key for %s is not installedzProblem opening package %sr^z Public key for %s is not trustedrzPackage %s is not signed) _from_cmdliner@localpkg_gpgcheckrrgpgcheckgpgkeyryrr-r;initReadOnlyTransaction miscutilscheckSigrrrbasenamer ) r?pocheck hasgpgkeyrnrootr sigresultlocalfnresultrs rA_sig_check_pkgzBase._sig_check_pkgMs   II//EI::bii(DMME $ O+I 99((D$$<>"% 0 b!  3;;--\?B0  q!34b9 sA77(B"!B"c`||jj}||j|||||Stjj |rJt j|j||||}|t|dk(r|dSt||}t jd|S)aRReturn a :class:`misc.GenericHolder` containing lists of package objects. The contents of the lists are specified in various ways by the arguments. :param pkgnarrow: a string specifying which types of packages lists to produces, such as updates, installed, available, etc. :param patterns: a list of names or wildcards specifying packages to list :param showdups: whether to include duplicate packages in the lists :param ignore_case: whether to ignore case when searching by package names :param reponame: limit packages list to the given repository :return: a :class:`misc.GenericHolder` instance with the following lists defined:: available = list of packageObjects installed = list of packageObjects upgrades = tuples of packageObjects (updating, installed) extras = list of packageObjects obsoletes = tuples of packageObjects (obsoleting, installed) recent = list of packageObjects N)showdups ignore_caserrc$|j|SrE) merge_lists)abs rArz(Base._do_package_lists..s Q]]1-=rC) r@showdupesfromrepos _list_patternrris_string_typernpartialrmapro)r? pkgnarrowpatternsrrrlist_fnyghss rA_do_package_listszBase._do_package_listss4  yy33H  %%8X{HF F88**8444##    H#h8  s8}14= 7H% =tDDrCc )fd))fd}fd}tj|}g} g} g} g} g} g}g}g}g}g}|}jj}|>tj j ||}|jjd}|dk(rNi}i}|jD]>}|||j<|r|j|jf}||vs |||kDs:|||<@t||j} ||j}|s|jd }|D]}|r2|j|vr| j!|%| j!|7|j|jf}|j|vr| j!|o||vs|j#||r| j!|| j!|n|d k(r_||jd } j%| d } | jddg| j'j)} nL|dk(r!t||j} n&|dk(r|r||j}|jj+}|D]}|j|jf}|j-|g}|Dcgc]}|j.|j.k(r|}}t1|dkDr| j!|u| j!|n^||jjd j+} |jj'j+}| D]\}!}"| |!|"fd}|j-|!|"fdgd}#|#r|j#|#r| j!|M|j3|#r| j!|p| j!|nw|dk(r=||j5j6j8}$|$j)}n5|dk(r(|j;Dcgc] })|s |}}n|dk(r|j}%|jjj=|%}j%|dd }|jddgg}|D]?}&|&j>}'|jA|%j=|'D(cgc]}(|&|(fc}(AnT|dk(rO|j}|s|jd }||jCjDjF}| |_| |_| |_$| |_%| |_&||_||_'||_#||_||_(|Scc}wcc}wcc}(w)NcFyjj|k(S)z:Test whether given package originates from the repository.T)rArn)packagerr?s rA is_from_repoz(Base._list_pattern..is_from_repos&<<$$W-9 9rCcfd|DS)=Filter out the packages which do not originate from the repo.c34K|]}|s |ywrErF)rr r s rArz=Base._list_pattern..pkgs_from_repo..sM8|G7LG8s rF)rr s rApkgs_from_repoz*Base._list_pattern..pkgs_from_reposM8M MrCc0|S|jS)rr)r)rrs rAquery_for_repoz*Base._list_pattern..query_for_repos <<<2 2rC)iterrF)rrTlatest_per_arch_by_priorityupgrades)upgrades_by_priority)upgradesrcnosrc arch__neqrrr autoremoveextrasr)obsoletes_by_priority)rrprovidesrecent))r GenericHolderrrrrrrrpkgtuprrrrrrrevr_gt_merge_update_filterslatestrrreevrrevr_eq _unneededrAswdbr rrextend_recentr@r$reinstall_available old_availableupdatesobsoletesTuplesr)*r?rpatternrrrrryghrrr0r1r2rr3r$r ricrrdinstndinstrkeyavailrinstalled_dict avail_pkginstalled_pkgssame_veravailable_dictrrinst_pkg autoremove_qrnewobsoleted_reldepsrQr s*` ` @rArzBase._list_patterns :  N 3   i0       IIOO   ;;&&wB&?D##DIIU#CA  EFkkm#%bii ww(f$VC[(8"$F3K $^ELLN;>9>>:C%3%7%7R%@N/= =~#&77imm#;!$~H =8}q(+229=!((3"'"0" y{77t7#LXXZ!"!5!5!7!@!@!B$2LT4 .d| <%(c3Z<>?!( "KKME $ G#E*224993C3CDF! ! "5) ! -  # A =8F>s'"W& W+W+5 W0 cB|xj|z c_t|SrE)rr)r?transs rA_add_comps_transzBase._add_comps_transjs U"5zrCct|j}|sy|j|jjd}|j |Dcgc]4}|jj j |js3|6c}}|j|}|D]6}|jj|tjj8|j|}|j|}|r9|D]3}|jj||j j"5yycc}w)z Mark to remove packages that are not required by any user installed package (reason group or user) :param query: dnf.query.Query() object NFrr clean_deps)r_safe_to_removerAr-rr8is_removable_pkgr differencerr:r; TransactionItemReason_DEPENDENCY intersectionreraser@clean_requirements_on_remove)r?r unneeded_pkgsrunneeded_pkgs_historypkg_with_dependent_pkgsrremove_packagess rA_remove_if_unneededzBase._remove_if_unneededns ! --dll.?.?e-T % !QEqT\\%7%7%H%H%PEQ!-!S"7"B"B="Q+C LL # #C););)\)\ ]+%223HI ,,]; &   1W1W X' Rs 4D5?D5cj}jjd}fd}fd}d}jj j d}|j tj|df|jtj|df|j|f|j|ff}|D]\}} |D]} d | ji} | jr| jd |ijj j di| j} | j d d g | sN| j} | jr| d|zz } t j#t%dj'| | | || }j(j*j-| jj/|y)Nr}ctjjj}|j |j j ||S)Nrselect)rselectorSelectorrr!rr)r remove_query comps_pkgrr?s rA trans_upgradez1Base._finalize_comps_trans..trans_upgradesD<<((3D HHH  JJ  d  + rCcbjjdk(r|jsj|||S|j j }j |tjjj}|jdj|j|jjj|| |Stjjj}|jr7|jdj|j|jnjj r|j r:|j#jj%j'|}nI|j#jj%j'|j)d}|j| jj|| |S) Nrrz ({} if {})r"rZoptionalrTrr)r@multilib_policyrequires_install_multiarchrr_report_already_installedrr[r\rr!rjrrinstallrrrrr)rr]r^rr}rr?s rA trans_installz1Base._finalize_comps_trans..trans_installsyy((E1 ))++E&+A6 1',oo&7&=&=&?O22?C<<00;DHHl&9&9)..)J\J\&]H^JJ&&dZ&H( #||,,TYY7%%HHl&9&9)..)J\J\&]H^yy** !??,$)KK 0A0I0ITY0I0Z$[E$)KK 0A0I0I*/,,SW,*X1J1Z%[EHHH' ""$V"D rCc(|j|}|SrE)r)rr]r^s rA trans_removez0Base._finalize_comps_trans..trans_removes'--e4L rCTrraFrrrrr.zNo match for group package "{}"rF)rr@rwrrrrirnr install_optrrr basearchonlyrRrrhrr rjr group_membersrJrV)r?rEr}r_rjrlr]attr_fnattrrr^ query_argsrpackage_strings` rAr zBase._finalize_comps_transs!!99**:6  @ yy(00t0< MM9#4#4]4#PQ%%y'8'8u'UVMM=1LL,/1 "JT2! $inn5 **%%vx&89-DIIOO%--; ;AAC UG$4 5%.^^N --&#.8NN1%F#G#N#N~#^_!!\9=  ((,,Y^^<""   .rCcxfd}tjjjj|S)Ncjjjj|}|sy jj j |dS#t$rtjjcYSwxYw)Nrr) rrrrrAr-rAttributeErrorr:r;TransactionItemReason_UNKNOWN)pkgnamerr?s rA reason_fnz+Base._build_comps_solver..reason_fnsx !++-5575CA H||''221Q488! H))GGG Hs'A&&#B  B )rrSolverrAr)r?rzs` rArzBase._build_comps_solvers, Hyy dkk9EErCc,tjj|sJ|j}t |t st jj|}|j|||xs t||}|sy|j|S)a&Installs packages of environment group identified by env_id. :param types: Types of packages to install. Either an integer as a logical conjunction of CompsPackageType ids or a list of string package type ids (conditional, default, mandatory, optional). r) rrrrr3r'r:r;listToCompsPackageType_environment_installr!rF)r?env_idtypesexcluderexclude_groupsrrEs rAenvironment_installzBase.environment_installsxx&&v...))+%%&&==eDE++FE7;KceVUcd$$U++rCctjj|sJ|j}|j |}|j |SrE)rrrr_environment_removerFr?rrrEs rAenvironment_removezBase.environment_removesIxx&&v...))+**62$$U++rCcfd}tjj|sJd}|r4|Dcgc] }|| }}tjj |}j } t|tstjj|}| j||||} | sy|r | j} n | j} tj!t#d|| j%| Scc}w)anInstalls packages of selected group :param pkg_types: Types of packages to install. Either an integer as a logical conjunction of CompsPackageType ids or a list of string package type ids (conditional, default, mandatory, optional). :param exclude: list of package name glob patterns that will be excluded from install set :param strict: boolean indicating whether group packages that exist but are non-installable due to e.g. dependency issues should be skipped (False) or cause transaction to fail to resolve (True) ctjj|r7jj j |}t d|S|fS)N name__globc|jSrEr)rds rArzABase.group_install.._pattern_to_pkgname..sQVVrC)rris_glob_patternrrrr)r4rr?s rA_pattern_to_pkgnamez/Base.group_install.._pattern_to_pkgnamesIxx''0IIOO%---A+Q//z!rCNrz#Adding packages from group '%s': %s)rrr itertoolschain from_iterablerr3r'r:r;r}_group_installrirnrhrir rF) r?grp_id pkg_typesrrrexclude_pkgnamesrdnested_excludesrrEinstlogs ` rA group_installzBase.group_installs "xx&&v... ?FGw!215wOG(<<_M ))+)S)**AA)LI%%fi9I6R mmG''G Q<=W &$$U++#HsDc ~t|j|jtjtjztj }d}d}|D]n} |j | } | jD]!} |r| |vs ||j| |||z }#| jD]} ||j!| ||||z }p|s*|r(tjj#t%d|S#tjj$r*} tjt| d}Yd} ~ d} ~ wwxYw)NrTF)rr)rrrzNothing to do.)rrrA ENVIRONMENTSGROUPS AVAILABLErerrlrrhrDr groupsr environmentsrrr )r?rrrrrrcntdoner4reserrgroup_idrs rAenv_group_installzBase.env_group_installs* tzz4<<1H1H:K\K\1\!++ -G eeGn  JJ%)G4--hwW]-^^C'**t//wW]?M0OO+ ..&&q)9':; ; >>,,  SX& sC55D< D77D<ctjj|sJ|j}|j |}|j |SrE)rrrr _group_removerFr?rrrEs rA group_removezBase.group_remove3sIxx&&v...))+$$V,$$U++rCc4t|j|jtjtjztj } |j |}d}|jD]}||j!|z }|j"D]}||j%|z }|S#tjj$rL}tjdt|tjjtdd}~wwxYw)Nz Warning: %szNo groups marked for removal.r)rrrArr INSTALLEDrerrlrrhrDr rr rrrr)r?rrrrrr9grps rAenv_group_removezBase.env_group_remove:s tzz4<<!..1B1BB!++ - K!%%"C##C 4**3/ /C$::C 4$$S) )C ~~(( K LLC 1..&&q)H'IJ J KsB..D ADDcvt|j|jtjtjztj }d}|D]^} |j |}|jD]} |j|d}|jD]} |j!|d}`|s*t#d} tj$j'| y#tjj$r(}tjt|Yd}~d}~wwxYw#tjj$r(}tjt|Yd}~d}~wwxYw#tjj$r)}tjt|Yd}~d}~wwxYw)NFTzNo group marked for upgrade.)rrrArrrrerrlrrhrDr renvironment_upgrader group_upgrader rCliError) r?rrgroup_upgradedr4rrr9rrs rAenv_group_upgradezBase.env_group_upgradeJs_ tzz4<<!((:+B+BB!++ -G eeGn'',,S1%)N(zz&&s+%)N" (23C''""3' '#>>,,  SX& ~~00LLS*~~00LLS*sHC"9D*E2"D'?D""D'*E/E**E/2F8F33F8ctjj|sJ|j}|j |}|j |SrE)rrrr_environment_upgraderFrs rArzBase.environment_upgradegsIxx&&v...))+++F3$$U++rCctjj|sJ|j}|j |}|j |SrE)rrrr_group_upgraderFrs rArzBase.group_upgradensIxx&&v...))+%%f-$$U++rCc|jjdz}tjj |ry|jj }t jjj|}|jtjtjz|jdd}t|}~~|dk(rytjj|}tjj |stj |t#|d}|j%~y)zChecks for the presence of GPG keys in the rpmdb. :return: 0 if there are no GPG keys in the rpmdb, and 1 if there are keys z/.gpgkeyschecked.yumr)rrz gpg-pubkeyrw)r@rrrrryrr-r;rri_RPMVSF_NOSIGNATURES_RPMVSF_NODIGESTSdbMatchrrropenrK)r?gpgkeyscheckedrymytsidxkeysmydirfos rA_gpg_key_checkzBase._gpg_key_checkus ++.DD 77>>. )ii++ ww"":: :L 333c6K6KKLMll6<03x   19GGOON3E77>>%( E"nc*B HHJrCc\|j|\}}|j||D]}tjj |j }|j j j|}|jjrI|j|j j j|jd}|j|}||j|}|jj|| t|S)NrTrrdrrb)rrhrr[r\rrrr@rrrr!rrir) r?rrr already_instrrrrs rArgzBase._install_multiarchs"&"?"?"F i &&|4!H<<((3D !))h)7Ayy""GGDIIOO-55hh4hH6JK888?D#xxx2 JJ  d&j  B"9~rCctj}tj}t||t||||fS)a Categorize :param install and :param exclude list into two groups each (packages and groups) :param install: list of specs, whether packages ('foo') or groups/modules ('@bar') :param exclude: list of specs, whether packages ('foo') or groups/modules ('@bar') :return: categorized install and exclude specs (stored in argparse.Namespace class) To access packages use: specs.pkg_specs, to access groups use: specs.grp_specs )argparse Namespacer )r?rir install_specs exclude_specss rA_categorize_specszBase._categorize_specss?!**,  **, ]G,]G,m++rCc|jDcgc]#}tjj|r|%}}|jDcgc]}||vr| }}|jj j |}|jj j |}|jj||jj|ycc}wcc}w)Nrr) pkg_specsrrrrrrr)r?rr glob_excludesexcludesrglob_exclude_querys rA_exclude_package_specszBase._exclude_package_specss0=0G0G?0GWHH44W=!0G ?+8+B+B5+Bm3+B5 )00h0? !YY__.555O }- 12?5s (C! C&ct}t|j|jtjtj ztj tjz}|D]} |j|}|j|j |j|j"|j"D]M}|jj%|}|j'D]} |j)| j*Ot-|S#tjj$r)}tjdt|Yd}~d}~wwxYw)NzWarning: Module or %s)r!rrrArrrrrerrlrrhrDr rRrr_environment_by_id groups_iterrJrkr) r? group_specsrrr4rrenvironment_id environmentr8s rA_expand_groupszBase._expand_groupss tzz4<<!..1B1BB!++j.B.BB D#G eeGn MM#** % MM#** +"%"2"2"jj;;NK (446EJJuxx(7#3#F|>>,,  4c#h? s1D!!E'>E""E'c^|D]q} |jj}d|vr*|jd}|d}|djd}|j|g|||j|j sy#t jj$r|jd|zYwxYw)Nrrr,@) r@group_package_typessplitrr grp_specsrrlrr)r?rrskippedr group_specrrs rA_install_groupszBase._install_groupss%J 1 55*$&,,S1E!&qJ!!HNN3/E&& |UFHDVDV'/'9'9;&>>'' 1sZ/0 1sA.A881B,+B,c0|g}g}g}g}g} |j||\} } |j| | jD]} |j| |||g}d}trS| jrG tjjj|}|j| j|n | j}|r4|j)| j| _ |j+|| |||s|s|s| s|r$tj j!|||| |y#tj j $r:} tjt| |j| Yd} ~ ;d} ~ wwxYw#tj j $rv} | j"r"| j"D]}|j|| j$r%| j$D]}|jd|z| j&}Yd} ~ Md} ~ wwxYw)N)rrformsrFr)no_match_group_specserror_group_specsno_match_pkg_specserror_pkg_specsmodule_depsolv_errors)rrrrirrl MarkingErrorrhrDrrrrrr ModuleBase MarkingErrorsrrrrr)r?rirrrrrrrrrrspecrpno_match_module_specsrre_specs rArzBase.install_specss ?G!'+'='=gw'O$ } ##M2!++D 0 THV5 Q, !# " M33 @!jj44??E ##M$;$;VD%2$;$; ! &*&9&9-:Q:Q&RM #  !6 G[]c d #48Jo(....DXARBT?NEZ /\ \)5>>.. 0 SV$"))$// 0>>// @))"#"8"8-44V<#9&&"#"5"5)00v>#6()(?(?% @s2D(1AF(E?/E::E?HA+HHc~|dd}|rd|d<d|d<d|d<tjj|}|j|jfi|}|j j dk(s|j|rB|d}||j| |s|j||||j||| S|j j d k(rf|j|||j j|d| } | s|j|||| D] } |jj| | "yy)z@Mark package(s) given by pkg_spec and reponame for installation.F)rwith_srcTrrrrrr)rrr)rrrreportssolutionrbrr)rrrget_best_solutionrr@re_is_arch_specifiedr_raise_package_not_found_errorrg_get_best_selectorsrrri) r?pkg_specrrrkwargsrrrsltrsrs rAriz Base.installsL!e4 #'F< &+F? #',F# ${{""8,)4))$))>v> 99 $ $ -1H1H1R!A# 8 ,33HeXN**1x*O O YY & && 0,,T387;yy7J7J6>596> -@E 33HeXN ""$f*"FrCc|jr d}t||jjj j |j |jdg}|sktd}tj||j tjjtd|jz|j t|d|kDr[tj j#|j}|j%|g|j&j)|| y td }tj||j y) Nz-downgrade_package() for an installed package.noarchrz.Package %s not installed, cannot downgrade it.No match for argument: %srrrbrzCPackage %s of lower version already installed, cannot downgrade it.) _from_systemNotImplementedErrorrrrrrrr rhrrrlrrsortedr[r\r!rri)r?rrrrrs rApackage_downgradezBase.package_downgrade;s   AC%c* * IIOO  ' ' ) 1 1sxxsxxQYFZ 1 [DEC NN3 )..--a0K.Ls||.[]`]e]ef f AYq\C <<((3D HH#H  JJ  d&j  B+,C NN3 )rCcL|jjj|j|j|j }|j |\}}||vr|j|gy|tjj|vr5tjjtd|jztj j#|j}|j%|g|j&j)|| y)Nrrrbr)rr_nevrarr*rrrhrrrrrlPackageNotFoundErrorr rr[r\r!rri)r?rrrrrrs rApackage_installzBase.package_installQs IIOO  $ $SXXsww A"&"?"?"B i ,   * *C5 1  55i@ @..55a8S6TWZWcWc6cd d<<((3D HH#H  JJ  d&j  BrCc|jjjj|j|j |j r|jj|ytd}tj|t|tjjtd|j z|j)N)rr*rrz.Package %s not installed, cannot reinstall it.r)rrrrrr*rrrir rhrrrrlrr)r?rrs rApackage_reinstallzBase.package_reinstall_s 99??  & & ( 0 0chhCGGRURZRZ 0 [ JJ  s #@AsCH%nn))!,G*H3<<*WY\YaYabbrCc:|jj|yr)rrPrs rApackage_removezBase.package_removegs rCc|jr d}t||jdk(r,td}tj ||j y|jjjj}|jjr|jjj|gj|rYtjj!|j}|j#|g|j$j'|y|jd k(r|j)|j* }n)|j)|j*|jd g }|sktd }tj-||j*tj.j1td |j z|j*t3|d|krYtjj!|j}|j#|g|j$j'|ytd}tj-||j*y)Nz+upgrade_package() for an installed package.rzaS`CsxxS`>a8b c++-  )335==)// =>?IKK *E   MM8M ,**58T*R $KK 4 4 6 = =X]C^X]QTCHHX]C^ = _`E<<((3D HHH  JJ  d  +A?b8D_s F; G ctjj|}|j|j}|d}|rtj j |}|s|dr|djr|dj}|jjjj}|jjr|j|n)|jjjd} | s|j|j} | sMtd} t j#| |tj$j'td|z||dj(rtj j |dj(s]| j|dj( s>td } t j#| d j+||dj(|jjxr|dxr|dj-} |j/|| ||Stj$j1td|z|) NrnevrardTrrz(Package %s available, but not installed.r)rz?Package %s available, but installed for different architecture.z{}.{})rrrrrrrrrrrr@rrrr rhrrlPackagesNotInstalledErrorrrj has_just_namer r) r?rrrrrwildcardpkg_namer obsoletersinstalled_namerrs rArz Base.upgrades{{""8,))$))4 W  xx//9H 1hw6G6L6L#G,11 IIOO-779??A yy**XX X:04 0A0I0IPT0I0U!%.%5%58%5%D%J%J%LN) JKsH5!nnFF9:XExQQ!'*//8P8PQYZaQbQgQg8h-558G;L;Q;Q5R"#$e"fC"NN3xRYIZI_I_0`a ++>0A>$W-;;= ))!Y(K Knn))!,G*H8*SU]^^rCc|j|jj|jj|dS)N)r)r rrr@r)r?rs rA upgrade_allzBase.upgrade_alls< %% IIOO tyy22Ht&M MrCc||jjy tjj |}|j |j d}|djtj|j|||jjd}|s tjtd|y|D]}|jj!|  y ) NF)rr reponame__neqT)rrrrrrYr)rdistupgrade_allrrrrrrrfSYSTEM_REPO_NAMErr@rrhrr distupgrade)r?rrrrrs rA distro_synczBase.distro_syncs   JJ & & (kk))(3G00U0KH W  % %F4K4K % L//x:>)):M:MW[0]E A9:HE &&d&3rCc>t|||gr||z }d}|r+|r)|D]#}td}tj||%n|r|j |rd}|D]} |j ||d}|stjtdyy|jjj|jj|j j"} |jjj%j'|j j(} d} | D]*} | | vstd }tj|| d} ,| rT|jjj+|jj| |j j"} | D]} |j-| y#t jj$r)} tjt| Yd} ~ d} ~ wwxYw) zRemoves all 'leaf' packages from the system that were originally installed as dependencies of user-installed packages but which are no longer required by any such package.FzNot a valid form: %sT)rNzNo packages marked for removal.rHrzUnneeded protected package: %s (and its dependencies) cannot be removed, either mark it as user-installed or change protected_packages configuration option.)anyr rhrrrrrlrrrrrr,rAr-r@rrrr_unneeded_extra_userinstalledr)r?rrr filenamesrgrp_specrrrprR protectedprotected_foundrs rArzBase.autoremoves  9i0 1  "IDU )H23CNN31!*((3D% KKK6 D &q!BCD!IIOO-77 8I8I<@II>tyySFS",,.0.C LL  c "h . . 0  3 3HeX NYY;; C JJ  SZ  89~0s!)C&ctjj|}|j|j}|j Dcgc]$}||j j||k(r|&} }|j} || j||| j|tjj| } | s/tjjd|| jd} |jj } |jj"}| D]o} | t%|}tj&j)|j}|j+||j,j/|| | dz } q| dk(r!tjj5d|| | Scc}w#t0$r$|sY|j,j3|| Y`wxYw) Nrrzno package matchedrrrbrIr)rrrrrrrArnrrr_per_nevra_dictrlrrr@rQrr r[r\r!rriKeyErrorrPPackagesNotAvailableError)r?r old_reponame new_reponamenew_reponame_neq remove_narrrr= available_qavailable_nevra2pkgrrJr installed_pkgavailable_pkgsrs rA reinstallzBase.reinstall3 s{{""8,    *;;=4(C# LL  c "l 2 = 4 kkm  #     6  '   .>  ?!ii77 D..::$h 0AC CYY;; !!+M G!4S5G!H ||,,TYY7^, ""$f*"F 1HC, !8..::$h@ @ I4, G    : F Gs )G 4G G<G<;G<c$|j|S)zMark a package to be downgraded. This is equivalent to first removing the currently installed package, and then installing an older version. ) downgrade_to)r?rs rA downgradezBase.downgrade] s  **rCctjj|}|j|j}|s.t d|z}tj j||d}|j}t|jj}|jjjj|} t| dk(r/t d|z}tj j!|||| jjD]} |j#j%| } | s"t d}t&j)|| Gtj*j-|j} | j/| |j0j3| | d}|S) zDowngrade to specific version if specified otherwise downgrades to one version lower than the package installed. rrrz6Packages for argument %s available, but not installed.zDPackage %s of lowest version already installed, cannot downgrade it.rrbr)rrrrrr rlrrr _name_dictrrrrrr downgradesrrhrr[r\r!rri) r?rrrrrrr3available_pkg_names q_installedrdowngrade_pkgsrs rAr6zBase.downgrade_tog s{{""8,    */08;C..55c8D D">#<#<#>#C#C#EFiioo'113;;AT;U { q LMPXXC..::3.Y Y#..0557H+668??X?NN!^_sH-<<((3D HHH ( JJ  d&j  BD8 rCc|jjj|}|r||gfStjj |j|}|r||gfS|j ds|j drd|zg}n(|j dr||gfSdDcgc]}||z }}|jjj||fScc}w)N) file__glob/bin//sbin/z/usrr)r@rAz /usr/bin/z /usr/sbin/)rrrr _by_provides startswith)r? provides_spec providersbinary_providesprefixs rAr#z Base.provides sIIOO%---G }o- -II**499mD }o- -  # #G , 0H0H0R% 56O  % %c *}o- -.\]-[6 & 5-[ ]yy ((O(DoUU]s& C c|ddd}||vr td||}|r8d|z} |jj| tj ||r8d|z} |jj| tj ||r8d|z} |jj| tj ||r8d|z} |jj| tj ||r9d |z} |jj| tj |y y ) a It modifies results of install, upgrade, and distrosync methods according to provided filters. :param cmp_type: only 'eq' or 'gte' allowed :param types: List or tuple with strings. E.g. 'bugfix', 'enhancement', 'newpackage', 'security' :param advisory: List or tuple with strings. E.g.Eg. FEDORA-2201-123 :param bugzilla: List or tuple with strings. Include packages that fix a Bugzilla ID, Eg. 123123. :param cves: List or tuple with strings. Include packages that fix a CVE (Common Vulnerabilities and Exposures) ID. Eg. CVE-2201-0123 :param severity: List or tuple with strings. Includes packages that provide a fix for an issue of the specified severity. __eqg __eqg__gt)eqgtez Unsupported value for `cmp_type` advisory_typeadvisory advisory_bug advisory_cveadvisory_severityN)rr7 setdefaultr!rR) r?cmp_typerrNbugzillacvesseveritycmp_dictcmpr9s rAadd_security_filterszBase.add_security_filters s!""+6 8 #?@ @x  !C'C  ) ) 4 4S#% @ G G N s"C  ) ) 4 4S#% @ G G Q  3&C  ) ) 4 4S#% @ G G Q  3&C  ) ) 4 4S#% @ G G M %+C  ) ) 4 4S#% @ G G Q rCci|_y)z, Reset all security filters N)r7rGs rAreset_security_filterszBase.reset_security_filters s )+%rCc|js |jr|s|S|jjj d}|jr*|jD]}|j |}|g|_|jrN|jj D]1\}}|r|dz}||i} |j |jd i| }3|j|}|s|r|j}t|jj} | dkDr|Vtdj| } tdj| } tj!t#| | | |Stdj|| } tdj|| } tj!t#| | | |S) z Merge Queries in _update_filters and return intersection with q Query @param q: Query @return: Query Tr __upgraderz3No security updates needed, but {} update availablez4No security updates needed, but {} updates availablez  ( (66!/!5!5e!<7.<,d}t"j%tj,jMtdnd}t"j%tj,jMtdn]d}nZ|r8|| j2| j&| | jN| j d }n |r|| j2| j&}|sd}|jjQtRjT}|rF|jjW}|jjY|tRjTz |jj[tj\| j4}|r|jjY|dk7r3td |z}tj^ja||t"j%td d}0|s*|r(tj^jatd |s=td jbz}tj^ja|||je\}}|dk7rR|r td}t"j%|tg|}tj^ja||y)aRetrieve a key for a package. If needed, use the given callback to prompt whether the key should be imported. :param po: the package object to retrieve the key of :param askcb: Callback function to use to ask permission to import a key. The arguments *askcb* should take are the package object, the userid of the key, and the keyid :param fullaskcb: Callback function to use to ask permission to import a key. This differs from *askcb* in that it gets passed a dictionary so that we can expand the values passed. :raises: :class:`dnf.exceptions.Error` if there are errors retrieving the keys z6Unable to retrieve a key for a commandline package: %sc|tdzdzz }|tddjjzz }|S)Nz. Failing package is: %sz zGPG Keys are configured as: %sr)r rr)rrrns rA_prov_key_dataz1Base._get_key_for_package.._prov_key_data sI 1/0B7%? ?C 156YYt{{+- -CJrCFrz)GPG key at %s (0x%s) is already installedTzThe key has been approved.zThe key has been rejected.)ruseridhexkeyidkeyurl fingerprint timestampzKey import failed (code %d)zKey imported successfullyzDidn't install any keyszThe GPG keys listed for the "%s" repository are already installed but they are not correct for this package. Check that the correct key URLs are configured for this repository.z+Import of key(s) didn't help, wrong key(s)?N)4rr rrrrkr9rrJrcryptoretriever keyInstalledrTrpm_idrjrhrshort_idr@rrKeyInfofrom_rpm_key_objectrfraw_keyDNSSECKeyVerificationverify nice_user_msgurllog_dns_key_importlog_key_importassumeno assumeyesValidityVALIDPROVEN_NONEXISTENCEany_msgrirKr-rL getTsFlagsrbpgpImportPubkey procgpgkeyrlrrrr )r?raskcb fullaskcbr key_installedkeyurlsre user_cb_failrhrr dns_input_key dns_resultrc test_flag orig_flagsrerrmsgrns ` @rA_get_key_for_packagezBase._get_key_for_package s9   LMCS2X& &zz"))$4#C#CC %"4;;    ((,,TWW5F::&&vt4D$$TXXt{{DNNKqPGHCKKVT]];9944$'JJ$6$6$J$J4;;KO<<%YM!$!A!A!H!H!WJKK 8 8 ST"9944JJ11$ CJJ--d399%%BYY((yy88%#***=*=*C*C*-***=*=*Q*Q*SS!%B"KK (:(:1=Y;Z([\!&B"KK (:(:1=Y;Z([\!"" 04 .4373C3C15 $ABB r4;; >B#'L !HH001G1GH !%!4!4!6JHH%%j33I3I&IJ11$//$,,2OPHH%%j1Q;9:VCC....~c/BCC A9:; $ ]f..&&q)B'CD D'(+/)) 4C ..&&~c':; ;,,R0 Q;EF C [F..&&~f'=> > rCc*|j|||y)aRetrieve a key for a package. If needed, use the given callback to prompt whether the key should be imported. :param pkg: the package object to retrieve the key of :param askcb: Callback function to use to ask permission to import a key. The arguments *askcb* should take are the package object, the userid of the key, and the keyid :param fullaskcb: Callback function to use to ask permission to import a key. This differs from *askcb* in that it gets passed a dictionary so that we can expand the values passed. :raises: :class:`dnf.exceptions.Error` if there are errors retrieving the keys N)r)r?rrrs rApackage_import_keyzBase.package_import_keyq s !!#ui8rCcg}|jj|jjD]}|jt ||SrE)rTrproblemsrr )r?resultsprobs rArCzBase._run_rpm_check sE HH%%'D NN3t9 % ( rCc \tjj||j||fi|S)z Open the specified absolute url, return a file object which respects proxy setting even for non-repo downloads )rr_urlopenr@)r?rvrnrzrs rAurlopenz Base.urlopen s( xx  diitFvFFrCc|*|jjtj}|j |j j }|S)Nrr")rrrfrrr@r))r?r installonlys rArzBase._get_installonly_query sD 9   v'='= >Ahh (A(AhB rCcbtjj|d}|j|jddd}|drj|drd|dj rT||ddj k7r>t jtdj|ddj yyyyy) NTrFrrrrz * Maybe you meant: {}) rrrrrrrhrr rj)r?rrrs rA_report_icase_hintzBase._report_icase_hint s{{""8">))$))8=e*U G '!2x7H7M7MHW-a0555 KK34;;HWt d}|||s(t jjt dg}||fS)a  Check checksum of packages from local repositories and returns list packages from remote repositories that will be downloaded. Packages from commandline are skipped. :param install_pkgs: list of packages :return: list of remote pkgs cd}|D]K}d} |j}|dustj|j ||j d}M|S#t$r(}tjt |Yd}~fd}~wwxYwNTF)verifyLocalPkgrgrhrfrrjr)pkg_list logger_msgall_packages_verifiedrpkg_successfully_verifiedrps rA_verification_of_packagesz;Base._select_remote_pkgs.._verification_of_packages s$( !,1),030B0B0D--D8OOJ$5$5c3<<$HI,1) ) ( !,OOCF++,sA BBBz>Package "{}" from local repository "{}" has incorrect checksumz;Some packages from local repository have incorrect checksumz8Package "{}" from repository "{}" has incorrect checksumzVSome packages have invalid cache, but cannot be downloaded due to "--cacheonly" option) _is_local_pkgrrfCMDLINE_REPO_NAMErr rrlrr@r)r? install_pkgsrrlocal_repository_pkgsrrs rArzBase._select_remote_pkgs s ) "C  "<<6#;#;;)005""3'  PQ()>D..&&OPR R 99  NOC,[#>nn**-.//K111rCc(|D] }t|yrE)_msg_installed)r?rrs rArhzBase._report_already_installed sC 3 rCcJ|jjtj}tj j |}|j|j|d|}||dj||ds)tjjtd||jjtj}|dj|}|r td}n td}tjj||) NrFrrrrrNo match for argument?All matches were filtered out by exclude filtering for argumentz?All matches were filtered out by modular filtering for argument)rrrfrrrrrrrlrr IGNORE_REGULAR_EXCLUDESrO) r?rrr all_queryrrwith_regular_queryrs rArz#Base._raise_package_not_found_error sIIOO&*@*@OA ++%%h/,, IIUU)-E   W  % %x % 8 ..55a8O6PRZ[ [!%v7U7U!V !)'!2!?!?@R!S "YZYZ..55c8D DrCc8|jjtjj }t j j|}|j|j|d|}|ds)t jjtd||2|dDcgc]#}|jj||k(s"|%}}n|d}|s td} n td} t jj| |cc}w)NrFrrrzCAll matches were installed from a different repository for argumentr)rrrfrrrrrrrlrr rArn) r?rrrrrrrrrs rAr'z'Base._raise_package_not_installed_error sIIOO&*@*@OAKKM ++%%h/,, IIUU)-E ..::1=T;UW_` `  (0(9`(9T\\=N=Ns=SW_=_(9I` )IYZCUVCnn66sHEEas .#DDcR|jj|jdy)z Setup DNF file loggers based on given configuration file. The loggers are set the same way as if DNF was run from CLI. T)file_loggers_onlyN)r)_setup_from_dnf_confr@rGs rA setup_loggerszBase.setup_loggers s **499*MrCc|jjtjtjztj zzrd}nd}t |j}|j|dd}|jdi|}|sD|rBtjj|j}tj|t|j!d}t|j#d|z } d} |D cgc] } | |  } } t|D cgc]} | | | vs| c} }t| D cgc]} | | | vs| c} }||fScc} wcc} wcc} w)zreturns set of conflicting packages and set of packages with broken dependency that would be additionally installed when --best and --allowerasingTF)rr ignore_weak)rctj|j|j|j|j |j S)N)repochversionreleaser)rfNEVRArrrrr)items rArz&Base._skipped_packages.._nevra s4<./ sCls388{*ls)r; frozensetrz remove_setr )r? changed_pkgsrs @rA reboot_neededzBase.reboot_needed" sW  !>? ''33d6F6F6Q6QQ ClCCCrCrE)F)rFrFN)TT)T)FFF)rF)NN)TN)rNNFN)NTN)NT)TNN)NNTN)NNNN)NNNF)rFrFrFrFrFr)Nzw+b)__name__ __module__ __qualname__rBrHrMrPrUrq staticmethodrrrrpropertyrr@rdeleterrrlazyattrrrrr;setterrrrrrrrr7rCrKrNrrBr-RPMTRANS_FLAG_NOSCRIPTSRPMTRANS_FLAG_NOTRIGGERSRPMTRANS_FLAG_NODOCSrLRPMTRANS_FLAG_JUSTDBRPMTRANS_FLAG_NOCONTEXTSRPMTRANS_FLAG_NOFILEDIGESTRPMTRANS_FLAG_DEPLOOPSrdr:r]rrrhr rTrrrArrrrrrr"rZrJrkrMr{rrrrrr=r rrFrVr rrrrrrrrrrrrgrrrrrrirrrrr r rrrrrr4r7r6r#rYr[r(rrrCrrrrrhrr'rrrrFrCrArr\s<* I   W;+z,  ]]XX'G(G**!!"" O+( $  6p9v=~$: ";z&)%@%@&)&B&B"%":": # 6 6"%":":&)&B&B$'$B$B$'$>$>@s*+%(%=%="$c&>&>//'018 [[)V;4H6 8G \|(5  49vjX D=\|(#TAJF9<09v ( 0JN37'ET $[zY4D/L F,$,(,T,, (:,,<$,$ 3. 1-\^!F, c#J#L_<M /)b,CG38(T+8V&#RJ+'RD?L9" G X+2Z E*F$N5> DrCrc\t|}td}tj||y)Nz Package %s is already installed.)r r rhr)rrrs rArr1 s$ s8D . /C KKTrC)I__doc__ __future__rrrrrrlibdnf.transactionr:rr dnf.compsrdnf.i18nr r r dnf.utilr dnf.db.historyr dnf.yumrcollections.abcr ImportError collectionsr% dnf.callbackdnf.conf dnf.conf.read dnf.crypto dnf.dnssecdnf.drpmdnf.exceptionsdnf.goal dnf.historydnf.lock dnf.loggingdnf.module.module_baser dnf.persistor dnf.plugin dnf.querydnf.repo dnf.repodictdnf.rpm.connectiondnf.rpm.miscutilsdnf.rpm.transactiondnf.sack dnf.selector dnf.subjectdnf.transactiondnf.yum.rpmtransrnrQrfrr'rbrrpr_r-rrr getLoggerrhobjectrrrFrCrAr s$'%'  !(%(!L       5 !S+D6S+DjVUX%$%&Ls$D D/ D,+D,/D98D9