<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
fh                 @   s  d Z ddlmZmZmZmZ ddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZ ddlmZmZ ddlZddlZddlmZ ddlmZ ddlZddlmZmZ ddlZed	 ejd
ZejdZejdZejdZ eZ!dZ"edZ#edZ$edZ%dZ&dd Z'dd Z(g fddZ)d7ddZ*dd Z+G dd de,Z-G dd  d e,Z.e. Z/G d!d" d"ej0j1Z2d#d$ Z3d%d& Z4d'd( Z5d)d* Z6d+d,dd-d.gZ7G d/d0 d0ej8Z9G d1d2 d2ej:j;Z<G d3d4 d4e<Z=G d5d6 d6e<Z>dS )8zGsystem_upgrade.py - DNF plugin to handle major-version system upgrades.    )callPopencheck_outputCalledProcessErrorN)journal)_logger)CliError)ucd)serialize_transactionTransactionReplayzthe color of the skyZ 9348174c5cc74001a71ef26bd79d302eZ fef1cc509d5047268b83a3a553f54b43Z 3e0a5636d16b4ca4bbe5321d06c6aa62Z 8cec00a1566f4d3594f116450395f06cz/usr/bin/plymouthz<Need a --releasever greater than the current system version.zDownload complete! Use 'dnf {command} reboot' to start the upgrade.
To remove cached metadata and transaction use 'dnf {command} clean'zESorry, you need to use 'download --releasever' instead of '--network'   c               C   s.   t jdddrtjtd ntddg d S )NZDNF_SYSTEM_UPGRADE_NO_REBOOTF)defaultz!Reboot turned off, not rebooting.Z	systemctlreboot)osgetenvr   infor   r    r   r   $/usr/lib/python3.6/system_upgrade.pyr   E   s    r   c              C   s|   d} xrdD ]j}yNt |<}x4|D ],}|j }|j| r |t| d  jdS q W W d Q R X W q
 tk
rr   w
Y q
X q
W d S )NzUPGRADE_GUIDE_URL=/etc/os-release/usr/lib/os-release")r   r   )openstrip
startswithlenIOError)keypathZrelease_fileliner   r   r   get_url_from_os_releaseL   s    



(r    c             C   s~   t jj| sd S xht j| D ]Z}t jj| |}||kr8qy(t jj|rTtjj| n
t j| W q t	k
rt   Y qX qW d S )N)
r   r   isdirlistdirjoindnfutilZrm_rfunlinkOSError)r   ignoreentryZfullpathr   r   r   	clear_dir[   s    r*   c             C   s6   t jj| j| jkrtt|r2|| jkr2ttd S )N)r$   rpmdetect_releaseverinstallroot
releaseverr	   RELEASEVER_MSGCANT_RESET_RELEASEVER)conftargetr   r   r   check_release_verl   s    r3   c              C   sP   yt dd} | jd W n2 tk
rJ } zttd|  W Y d d }~X nX d S )Nz	/dev/tty0wbs   [9;0]z%Screen blanking can't be disabled: %s)r   write	Exceptionprintr   )Zttyer   r   r   disable_blankingu   s
    
r9   c               @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	e	dZ
e	dZe	dZe	dZe	dZe	dZe	dZe	dZe	dZe	dZe	dZe	dZe	dZdS )Statec             C   s   || _ i | _| j  d S )N)	statefile_data_read)selfr;   r   r   r   __init__   s    zState.__init__c             C   sp   y&t | j}tj|| _W d Q R X W nD tk
r@   i | _Y n, tk
rj   i | _tjt	d| j Y nX d S )Nz;Failed loading state file: %s, continuing with empty state.)
r   r;   jsonloadr<   r   
ValueErrorr   warningr   )r>   fpr   r   r   r=      s    

zState._readc             C   sF   t jjtjj| j t| jd}tj	| j
|ddd W d Q R X d S )Nw   T)indent	sort_keys)r$   r%   
ensure_dirr   r   dirnamer;   r   r@   dumpr<   )r>   Zoutfr   r   r   r5      s    zState.writec             C   s&   t jj| jrt j| j | j  d S )N)r   r   existsr;   r&   r=   )r>   r   r   r   clear   s    zState.clearc             C   s   | S )Nr   )r>   r   r   r   	__enter__   s    zState.__enter__c             C   s   |d kr| j   d S )N)r5   )r>   exc_type	exc_value	tracebackr   r   r   __exit__   s    zState.__exit__c                s"    fdd} fdd}t ||S )Nc                s   || j  < d S )N)r<   )r>   value)optionr   r   setprop   s    zState._prop.<locals>.setpropc                s   | j j S )N)r<   get)r>   )rT   r   r   getprop   s    zState._prop.<locals>.getprop)property)rT   rU   rW   r   )rT   r   _prop   s    zState._propstate_versiondownload_statusdestdirtarget_releaseversystem_releasevergpgcheckgpgcheck_reposrepo_gpgcheck_reposupgrade_statusupgrade_commanddistro_syncenable_disable_reposmodule_platform_idN)__name__
__module____qualname__r?   r=   r5   rM   rN   rR   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   r   r   r   r   r:      s(   
r:   c               @   s@   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dS )PlymouthOutputzA plymouth output helper class.

    Filters duplicate calls, and stops calling the plymouth binary if we
    fail to contact it.
    c             C   s   d| _ t | _d | _d S )NT)alivedict
_last_args	_last_msg)r>   r   r   r   r?      s    zPlymouthOutput.__init__c             G   sj   || j j|k}| jr| s$|dkrdytt|f| dk| _W n tk
rX   d| _Y nX || j |< | jS )Nz--pingr   F)rm   rV   rk   r   PLYMOUTHr'   )r>   cmdargsZdupe_cmdr   r   r   	_plymouth   s    
zPlymouthOutput._plymouthc             C   s
   | j dS )Nz--ping)rr   )r>   r   r   r   ping   s    zPlymouthOutput.pingc             C   s4   | j r | j |kr | jdd| j  || _ | jdd|S )Nzhide-messagez--textzdisplay-message)rn   rr   )r>   msgr   r   r   message   s    zPlymouthOutput.messagec             C   sR   d}y$t tdg}tjdt|r&d}W n ttfk
r@   Y nX | jdd| S )NZupdatesz--helpz--system-upgradezsystem-upgradezchange-modez--)r   ro   researchr
   r   r'   rr   )r>   modesr   r   r   set_mode   s    zPlymouthOutput.set_modec             C   s   | j ddt|S )Nzsystem-updatez
--progress)rr   str)r>   Zpercentr   r   r   progress   s    zPlymouthOutput.progressN)
rg   rh   ri   __doc__r?   rr   rs   ru   rz   r|   r   r   r   r   rj      s   

rj   c               @   s$   e Zd Zdd Zdd Zdd ZdS )PlymouthTransactionProgressc             C   s   | j |||| d S )N)_update_plymouth)r>   packageactionZti_doneZti_totalZts_doneZts_totalr   r   r   r|      s    z$PlymouthTransactionProgress.progressc             C   sd   |dkrd S |t jjkr0tjtd| |  ntjdtd| |   tj| j|||| d S )N   g     V@Z   g      $@)r$   callbackZ
PKG_VERIFYPlymouthr|   intru   
_fmt_event)r>   r   r   currenttotalr   r   r   r      s    z,PlymouthTransactionProgress._update_plymouthc             C   s    t jjj||}d||||f S )Nz[%d/%d] %s %s...)r$   transactionZACTIONSrV   )r>   r   r   r   r   r   r   r   r     s    z&PlymouthTransactionProgress._fmt_eventN)rg   rh   ri   r|   r   r   r   r   r   r   r~      s   r~   c             c   sJ   t j }|j| jdd d}x(|D ] }|d }||kr8q"|}|V  q"W dS )zVFind all boots with this message id.

    Returns the entries of all found boots.
    r   )
MESSAGE_IDZ_UIDN_BOOT_ID)r   ReaderZ	add_matchhex)
message_idjZoldbootr)   Zbootr   r   r   
find_boots  s    
r   c           
   C   st   t td d
} xJtttD ]:\} }t dj| d |d |d |jdd|jdd qW | dkrpt td	 d S )Nz3The following boots appear to contain upgrade logs:r   u)   {} / {.hex}: {:%Y-%m-%d %H:%M:%S} {}→{}r   Z__REALTIME_TIMESTAMPSYSTEM_RELEASEVERz??TARGET_RELEASEVERz-- no logs were found --r   )r7   r   	enumerater   ID_TO_IDENTIFY_BOOTSformatrV   )nr)   r   r   r   	list_logs   s    
r   c             C   sZ   t t| }y(|dkrt|dkr*|d8 }|| d S  tk
rT   ttdY nX d S )Nr   r   r   z!Cannot find logs with this index.)listr   
IndexErrorr	   r   )r   r   Zbootsr   r   r   	pick_boot.  s    r   c             C   sD   t t| }tdd|jg}|j  |j}|dkr@tjjt	dd S )NZ
journalctlz--bootr   z%Unable to match systemd journal entry)
r   r   r   r   wait
returncoder$   
exceptionsErrorr   )r   Zboot_idZprocessZrcr   r   r   show_log=  s    
r   ZdownloadZcleanupgradelogc                   s    e Zd ZdZ fddZ  ZS )SystemUpgradePluginzsystem-upgradec                s8   t t| j|| |r4|jt |jt |jt d S )N)superr   r?   Zregister_commandSystemUpgradeCommandOfflineUpgradeCommandOfflineDistrosyncCommand)r>   basecli)	__class__r   r   r?   N  s
    

zSystemUpgradePlugin.__init__)rg   rh   ri   namer?   __classcell__r   r   )r   r   r   K  s   r   c                   s(  e Zd ZdEZedZdZ fddZedd Z	d	d
 Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Z d7d8 Z!d9d: Z"d;d< Z#d=d> Z$d?d@ Z%dAdB Z&dCdD Z'  Z(S )Fr   system-upgradefedupz+Prepare system for upgrade to a new releasezvar/lib/dnf/system-upgradec                sj   t t| j| tjj|jjj| j	| _
tjj| j
d| _tjj|jjjd| _ttjj| j
d| _d S )Nzsystem-upgrade-transaction.jsonzsystem-updatezsystem-upgrade-state.json)r   r   r?   r   r   r#   r   r1   r-   DATADIRdatadirtransaction_filemagic_symlinkr:   state)r>   r   )r   r   r   r?   \  s
    zSystemUpgradeCommand.__init__c             C   sJ   | j dddtdd | j ddtdd	jt d
 | j dttdd d S )Nz--no-downgraderd   Zstore_falsez=keep installed packages if the new release's version is older)destr   helptidr   z[%s]|)nargschoicesmetavarz--numberzwhich logs to show)typer   )add_argumentr   CMDSr#   r   )parserr   r   r   set_argparserd  s    
z"SystemUpgradeCommand.set_argparserc             C   s(   t j||t j| jj| jjtjjd dS )zLog directly to the journal.)r   ZPRIORITYr   r   ZDNF_VERSIONN)	r   sendZ
LOG_NOTICEr   r^   r]   r$   constVERSION)r>   ru   r   r   r   r   
log_statusn  s    zSystemUpgradeCommand.log_statusc             C   s   | j d | j d d S )NZcheckpre_configure)	_call_sub)r>   r   r   r   r   w  s    
z"SystemUpgradeCommand.pre_configurec             C   s   | j d d S )N	configure)r   )r>   r   r   r   r   {  s    zSystemUpgradeCommand.configurec             C   s   | j d d S )Nrun)r   )r>   r   r   r   r   ~  s    zSystemUpgradeCommand.runc             C   s   | j d d S )Nr   )r   )r>   r   r   r   run_transaction  s    z$SystemUpgradeCommand.run_transactionc             C   s   | j d d S )NZresolved)r   )r>   r   r   r   run_resolved  s    z!SystemUpgradeCommand.run_resolvedc             C   s.   t | |d | jjd  d }t|r*|  d S )Nr   r   )getattroptsr   callable)r>   r   Zsubfuncr   r   r   r     s    zSystemUpgradeCommand._call_subc             C   s(   | j jtkr$tdj|d}t|d S )NzFIncompatible version of data. Rerun 'dnf {command} download [OPTIONS]')command)r   rZ   STATE_VERSIONr   r   r	   )r>   r   rt   r   r   r   _check_state_version  s    z)SystemUpgradeCommand._check_state_versionc             C   s*   | j | jj_| jjr| jjnd | jj_d S )N)r   r   r1   cachedirr   r\   )r>   r   r   r   _set_cachedir  s    z"SystemUpgradeCommand._set_cachedirc             C   s   t tjjtjjg }t tjj}i }i }xl| jjjD ]^}|j	|krp|j
}|j|j|jji jt|i |j	< q6|j	|kr6|j|jt|j
i |j	< q6W ||fS )z
        forward = {repoid:{pkg_nevra: {tsi.action: tsi.reason}}
        reverse = {pkg_nevra: {tsi.action: tsi.reason}}
        :return: forward, reverse
        )setr$   r   ZBACKWARD_ACTIONSlibdnfZ!TransactionItemAction_REINSTALLEDZFORWARD_ACTIONSr   r   r   pkgreason
setdefaultrepoidr{   )r>   Zbackward_actionZforward_actionsZforwardreverseZtsir   r   r   r   %_get_forward_reverse_pkg_reason_pairs  s    
&
z:SystemUpgradeCommand._get_forward_reverse_pkg_reason_pairsc             C   sb   | j | jj_| jjr| jjnd | jj_d| jjkrJ| jj rJtt	dnd| jjkr^d| j_d S )Nzoffline-distrosynczFCommand 'offline-distrosync' cannot be used with --no-downgrade optionzoffline-upgradeF)
r   r   r1   r   r   r\   r   rd   r	   r   )r>   r   r   r   pre_configure_download  s    z+SystemUpgradeCommand.pre_configure_downloadc             C   s   | j   d S )N)r   )r>   r   r   r   pre_configure_reboot  s    z)SystemUpgradeCommand.pre_configure_rebootc             C   s.   | j   | jjr| jj| j_| jj| jj_d S )N)	r   r   re   r   repos_edr]   r   r1   r.   )r>   r   r   r   pre_configure_upgrade  s    z*SystemUpgradeCommand.pre_configure_upgradec             C   s   | j   d S )N)r   )r>   r   r   r   pre_configure_clean  s    z(SystemUpgradeCommand.pre_configure_cleanc             C   s  d| j jksd| j jkrtjtd t }|rLtd}tj|jt| | j	j
 rtd}| j	jjs| j	jjdj|dj|d rtjtd	 tjd
 t| j	j| j jd nd| j jkr| jj| j  d| jj_d| jj_d| jj_d| jj_d| jj_| j	j jdg7  _d S )Nzsystem-upgrader   z\WARNING: this operation is not supported on the RHEL distribution. Proceed at your own risk.z-Additional information for System Upgrade: {}zyBefore you continue ensure that your system is fully upgraded by running "dnf --refresh upgrade". Do you want to continuez
{} [y/N]: z
{} [Y/n]: )rt   Zdefaultyes_msgzOperation aborted.r   )r2   zoffline-upgradeTZtest)r   r   r   rC   r   r    r   r   r
   r   Z_promptWantedr1   ZassumenooutputZuserconfirmerrorsysexitr3   r.   r   Z _populate_update_security_filterdemands	root_user	resolvingavailable_repossack_activationZfreshest_metadataZtsflags)r>   Zhelp_urlrt   r   r   r   configure_download  s*    






z'SystemUpgradeCommand.configure_downloadc             C   s   d| j j_d S )NT)r   r   r   )r>   r   r   r   configure_reboot  s    z%SystemUpgradeCommand.configure_rebootc             C   s   d| j j_d| j j_d| j j_d| j j_| jj| j_| jj	d k	rN| jj	| j
j_	| jjd k	rx$| j
jj D ]}|j| jjk|_	qhW | jjd k	rx$| j
jj D ]}|j| jjk|_qW | jj| j
j_d| j j_d| j
j_t | j j_d| j
j_d| j
j_d S )NTF)r   r   r   r   r   r   r   rd   r   r_   r   r1   r`   reposvaluesr   ra   repo_gpgcheckrf   Z	cacheonlyZ	assumeyesr~   Ztransaction_displayZclean_requirements_on_removeZinstall_weak_deps)r>   r   r   r   r   configure_upgrade  s&    






z&SystemUpgradeCommand.configure_upgradec             C   s   d| j j_d S )NT)r   r   r   )r>   r   r   r   configure_clean  s    z$SystemUpgradeCommand.configure_cleanc             C   s   d S )Nr   )r>   r   r   r   configure_log  s    z"SystemUpgradeCommand.configure_logc             C   s~   | j jdksttd| j| jj | j j| jjkrRtdj| jjd}t|t	j
j| jrlttdtjj| j d S )Ncompletezsystem is not ready for upgradezZthe transaction was not prepared for '{command}'. Rerun 'dnf {command} download [OPTIONS]')r   zupgrade is already scheduled)r   r[   r	   r   r   r   r   rc   r   r   r   lexistsr   r$   r%   rI   r   )r>   rt   r   r   r   check_reboot  s    z!SystemUpgradeCommand.check_rebootc             C   s   t jj| js$tjtd tdt j| j| j	krLtjtd tdt
jjj| j | jj}|sp| jj}| j| | jjdkstdj|d}t|d S )Nz-trigger file does not exist. exiting quietly.r   z1another upgrade tool is running. exiting quietly.readyz/use 'dnf {command} reboot' to begin the upgrade)r   )r   r   r   r   r   r   r   
SystemExitreadlinkr   r$   ZyumZmiscZunlink_fr   rc   r   r   r   rb   r   r	   )r>   r   rt   r   r   r   check_upgrade  s    
z"SystemUpgradeCommand.check_upgradec          	   C   s,   t j| j| j | j}d|_W d Q R X d S )Nr   )r   symlinkr   r   r   rb   )r>   r   r   r   r   run_prepare,  s    z SystemUpgradeCommand.run_preparec             C   s6   | j   | jjd dksd S | jtdt t  d S )Nr   r   zRebooting to perform upgrade.)r   r   r   r   r   REBOOT_REQUESTED_IDr   )r>   r   r   r   
run_reboot3  s    
zSystemUpgradeCommand.run_rebootc          	      s    j jr jj  n
 jj   j jdkr jj   fdd jjjD }|r\ jj|  fdd jjj	D }|r jj|  j
$}d|_ jjj|_ jjj|_W d Q R X d S )Noffline-upgradeoffline-distrosyncc                s$   g | ]} j jjj|jr|jqS r   )r   historygrouprV   r   ).0g)r>   r   r   
<listcomp>G  s    z5SystemUpgradeCommand.run_download.<locals>.<listcomp>c                s$   g | ]} j jjj|jr|jqS r   )r   r   envrV   r   )r  r  )r>   r   r   r  J  s    Zdownloading)r   r   )r   rd   r   Zupgrade_allr   Z
read_compscompsgroupsZenv_group_upgradeZenvironmentsr   r[   r1   r.   r]   r\   )r>   Zinstalled_groupsZinstalled_environmentsr   r   )r>   r   run_download=  s    

z!SystemUpgradeCommand.run_downloadc          
   C   s   d}| j }d|_|j}W d Q R X |dkr4td}n|dkrFtd}ntd}| j|t tj  tjd tj	| t
  t| j| j| _| jj  d S )	N Z
incompletezoffline-upgradez1Starting offline upgrade. This will take a while.zoffline-distrosyncz4Starting offline distrosync. This will take a while.z0Starting system upgrade. This will take a while.r   )r   rb   rc   r   r   UPGRADE_STARTED_IDr   rz   r|   ru   r9   r   r   r   replayr   )r>   r   r   rt   r   r   r   run_upgradeS  s     



z SystemUpgradeCommand.run_upgradec          	   C   sd   t jtd t| jjjtjj	| jjjj
g | j$}d |_d |_d |_d |_d |_W d Q R X d S )NzCleaning up downloaded data...)r   r   r   r*   r   r1   r   r$   Z	persistorZTempfilePersistorZdb_pathr   r[   rZ   rb   rc   r\   )r>   r   r   r   r   	run_cleanm  s    
zSystemUpgradeCommand.run_cleanc             C   s    | j jrt| j j nt  d S )N)r   Znumberr   r   )r>   r   r   r   run_logz  s    zSystemUpgradeCommand.run_logc             C   s   | j j  dS )z5Adjust transaction reasons according to stored valuesN)r
  Zpost_transaction)r>   r   r   r   resolved_upgrade  s    z%SystemUpgradeCommand.resolved_upgradec             C   s  | j jj }|j s&tjtd d S t|}yLt| j	d"}t
j||ddd |jd W d Q R X ttdj| j	 W n< tk
r } z tjjtdjt|W Y d d }~X nX tjj| j jj}| j}d	|_t|_| jj|_| j jj|_d
d | j jj  D |_!dd | j jj  D |_"||_#| j jj$|_%| j jj&|_&| jj'|_(| j jj)|_)| jj*|_+W d Q R X t,j| jj*d}tj| | j-tdt. d S )NzKThe system-upgrade transaction is empty, your system is already up-to-date.rE   rF   T)rG   rH   
zTransaction saved to {}.zError storing transaction: {}r   c             S   s   g | ]}|j r|jqS r   )r_   r   )r  r   r   r   r   r    s    z=SystemUpgradeCommand.transaction_download.<locals>.<listcomp>c             S   s   g | ]}|j r|jqS r   )r   r   )r  r   r   r   r   r    s    )r   zDownload finished.)/r   r   Zget_currentZpackagesr   r   r   r   r   r   r@   rK   r5   r7   r   r'   r$   r   r	   r{   r+   r,   r1   r-   r   r[   r   rZ   r   rd   r_   r   r   r`   ra   r^   r.   r]   rf   r   re   r\   r   rc   DOWNLOAD_FINISHED_MSGr   DOWNLOAD_FINISHED_ID)r>   r   datafr8   Z
system_verr   rt   r   r   r   transaction_download  s:    ,


z)SystemUpgradeCommand.transaction_downloadc             C   s@   t jtd | jtdt | j  | jjd dkr<t  d S )Nz.Upgrade complete! Cleaning up and rebooting...r   r   )	r   ru   r   r   UPGRADE_FINISHED_IDr  r   r   r   )r>   r   r   r   transaction_upgrade  s    
z(SystemUpgradeCommand.transaction_upgrade)r   r   ))rg   rh   ri   aliasesr   summaryr   r?   staticmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r   r   r   )r   r   r   V  sF   
	
 
(r   c               @   s   e Zd ZdZedZdS )r   offline-upgradez%Prepare offline upgrade of the systemN)r  )rg   rh   ri   r  r   r  r   r   r   r   r     s   r   c               @   s   e Zd ZdZedZdS )r   offline-distrosyncz(Prepare offline distrosync of the systemN)r  )rg   rh   ri   r  r   r  r   r   r   r   r     s   r   )N)?r}   
subprocessr   r   r   r   r@   r   Zos.pathrv   r   ZuuidZsystemdr   Zdnfpluginscorer   r   r$   Zdnf.clir	   Zdnf.i18nr
   Zdnf.transactionZdnf.transaction_srr   r   Zlibdnf.confr   ZUUIDr  r   r	  r  r   ro   r/   r  r0   r   r   r    r*   r3   r9   objectr:   rj   r   r   ZTransactionProgressr~   r   r   r   r   r   ZPluginr   r   ZCommandr   r   r   r   r   r   r   <module>   sd   




	@.	  e