HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //lib/python3/dist-packages/DistUpgrade/__pycache__/apt_clone.cpython-38.pyc
U

�@FV9��@s�ddlmZddlZddlmZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlmZmZdejkr�ej�dd�ej�dd�Gd	d
�d
e�ZGdd�de�ZdS)
�)�print_functionN)�FetchFailedException)�BytesIO�openZAPT_CLONE_DEBUG_RESOLVERzDebug::pkgProblemResolver�1zDebug::pkgDepCache::AutoInstallc@sFeZdZdZdZdd�Zdd�Zddd	�Zd
d�Zdd
�Z	dd�Z
dS)�LowLevelCommandszN calls to the lowlevel operations to install debs
        or repack a deb
    z/usr/bin/dpkg-repackcCsF|sdSddg}|dkr0|�dd�|�d|�t�||�}|dkS)NTZdpkgz-i�/r�chroot�)�insert�
subprocess�call)�selfZdebfiles�	targetdirZinstall_cmd�ret�r�7/usr/lib/python3/dist-packages/DistUpgrade/apt_clone.py�install_debs2szLowLevelCommands.install_debscCshtj�|j�std|j��|jg}t��dksLtj�d�s@dSddg|}tj||g|d�}|dkS)z$ dpkg-repack pkgname into targetdir z
no '%s' foundrz/usr/bin/fakerootNZfakerootz-u)�cwd)�os�path�exists�dpkg_repack�IOError�getuidrr
)r�pkgnamerZ
repack_cmdrrrr�
repack_deb<szLowLevelCommands.repack_debNcCs4|dkrddl}|��d}t�d||g�}|dkS)NrZCODENAME�debootstrap)�lsb_release�get_distro_informationrr
)rr�distrorrrrrrHs
zLowLevelCommands.debootstrapcCst�dd|d|g�}|dkS)Nzapt-keyz	--keyring�addr�rr
)rZfromkeyfileZintokeyfilerrrr�
merge_keysOs

�zLowLevelCommands.merge_keyscCst�dd||g�}|dkS)NZmountz--bindrr")rZolddirZnewdirrrrr�
bind_mountTszLowLevelCommands.bind_mountcCst�d|g�}|dkS)NZumountrr")rZbinddirrrrr�bind_umountXszLowLevelCommands.bind_umount)N)�__name__�
__module__�__qualname__�__doc__rrrrr#r$r%rrrrr,s

rc@s8eZdZdZde��dZdZdIdd�ZdJd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�ZdKdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�ZdLd.d/�ZdMd0d1�ZdNd2d3�ZdOd4d5�Zd6d7�ZdPd8d9�Z d:d;�Z!d<d=�Z"d>d?�Z#d@dA�Z$dQdCdD�Z%dRdEdF�Z&dGdH�Z'dS)S�AptClonez� clone the package selection/installation of a existing system
        using the information that apt provides

        If dpkg-repack is installed, it will be used to generate debs
        for the obsolete ones.
    zapt-clone-state-%s.tar.gzr
�./NcCsdt�|_t�|_t�|_|r$||_ntjj�	�|_|r>||_
ntjj��|_
|rX||_
ntj|_
dS�N)�set�not_downloadable�version_mismatchr�commands�fetch_progress�apt�progress�text�AcquireProgress�install_progress�baseZInstallProgress�
_cache_clsZCache)rr1r6Z	cache_clsrrr�__init__hszAptClone.__init__Fc	Cs�tj�|�rtj�||j�}n|�d�s0|d7}|dkrnt��tj�	d|�tj�	dtj�|d��t�
�tj|dd��n}|�
|�|�||�|�|�|�||�|�|�|�|�|�||�|r�|�|�|r�|�|�W5QRXd	S)
z� save the current system state (installed pacakges, enabled
            repositories ...) into the apt-state.tar.gz file in targetdir
        z.tar.gzz.apt-clone.tar.gzrZDir�Dir::State::statuszvar/lib/dpkg/statuszw:gz)�name�modeN)rr�isdir�join�CLONE_FILENAME�endswith�apt_pkgZinit_config�configr-Zinit_system�tarfiler�_write_uname�_write_state_installed_pkgs�_write_state_auto_installed�_write_state_sources_list�_write_state_apt_preferences�_write_state_apt_keyring�_write_state_extra_files�_write_state_dpkg_status�_dpkg_repack)r�	sourcedir�targetZwith_dpkg_repackZwith_dpkg_statusZ
scrub_sources�extra_files�tarrrr�
save_state�s.
�




zAptClone.save_statecCs2t��dt��dt��dtj�d�d�}|S)Nr
��zAPT::Architecture)�hostnameZkernelZ
uname_arch�arch)r�unamerArB�find)r�	host_inforrr�_get_host_info_dict�s



�zAptClone._get_host_info_dictcCsV|��}tjdd�}d�dd�|��D��}|�|d�|��|j|jdd�dS)N�w�r<�
cSsg|]\}}d||f�qS)z%s: %sr)�.0�key�valuerrr�
<listcomp>�s�z)AptClone._write_uname.<locals>.<listcomp>z./var/lib/apt-clone/uname��arcname)	rY�tempfile�NamedTemporaryFiler>�items�write�flushr!r;)rrPrX�f�inforrrrD�s
�zAptClone._write_unamecCs<|dkrdS|D]&}t�|�D]}|j|d|d�qqdS)Nz
./extra-filesra)�globr!)rrOrP�prhrrrrJ�s
z!AptClone._write_state_extra_filescCs`|j|d�}d}d}|D]�}|jr|d|j|jjt|j�f7}|jrN|jjs^|j	�
|j�n|jjrn|jjs||j�
|j�|jjD]d}|j
dkr�|jdkr�q�ddl}|��d}	|j|	kr�|d|j|jj|jdkr�|jndf7}qq�qt�d�}
|�d	�}t|�|
_t��|
_|�|
t|��t�d
�}
|�d	�}t|�|
_t��|
_|�|
t|��dS)N�Zrootdir�z	%s %s %s
ZnowrZID�unknownz"./var/lib/apt-clone/installed.pkgs�utf-8z ./var/lib/apt-clone/foreign.pkgs)r8�is_installedr;�	installed�version�int�is_auto_installed�	candidateZdownloadabler.r!r/Zorigins�archive�originrrrCZTarInfo�encode�len�size�time�mtimeZaddfiler)rrMrP�cache�sZforeign�pkg�orZ	distro_id�tarinforrrrE�sL��
�







z$AptClone._write_state_installed_pkgscCstj�d�}|j|dd�dS)N�dir::state::statusz./var/lib/apt-clone/dpkg-statusra)rArB�	find_filer!)rrP�dpkg_statusrrrrK�sz!AptClone._write_state_dpkg_statuscCs(tj�d�}tj�|�r$|�|d�dS)NzDir::State::extended_statesz#./var/lib/apt-clone/extended_states)rArBr�rrrr!)rrPZextended_statesrrrrF�s
�z$AptClone._write_state_auto_installedcCsRtj�d�}tj�|�r&|j|dd�tj�dd�}tj�|�rN|j|dd�dS)NzDir::Etc::preferencesz./etc/apt/preferencesrazDir::Etc::preferencespartsz/etc/apt/preferences.dz./etc/apt/preferences.d�rArBr�rrrr!�find_dir�rrPrhrkrrrrH�s�z%AptClone._write_state_apt_preferencescCsRtj�d�}tj�|�r&|j|dd�tj�dd�}tj�|�rN|j|dd�dS)NzDir::Etc::trustedz./etc/apt/trusted.gpgrazDir::Etc::trustedpartsz/etc/apt/trusted.gpg.dz./etc/apt/trusted.gpg.dr�r�rrrrI�s�z!AptClone._write_state_apt_keyringcCs�tj�d�}|�|||d�tj�d�}tj�|�r�|j|ddd�t�	|�D]J}|�
d�r^qN|�d�sjqNd	||f}tj�|�r�qN|�|||d
|�qNdS)N�Dir::Etc::sourcelistz./etc/apt/sources.list�Dir::Etc::sourcepartsz./etc/apt/sources.list.dF)rb�	recursive�.z.listz%s/%sz./etc/apt/sources.list.d/)
rArBr��$_add_file_to_tar_with_password_checkr�rrrr!�listdir�
startswithr@r=)rrP�scrubZsources_listZsource_parts�sourceZsources_file_namerrrrG�s,
��

�z"AptClone._write_state_sources_listc
Cs�|r�tjdd���}t|d��l}|��D]L}t|�tkr@|�d�}t�d|�rZt�	dd|�}|�
|�d��|��q&|j
|j|d�W5QRXW5QRXn|j
||d�dS)	N�wbr[�rbzUTF-8z/[^/@:]*:[^/@:]*@z/USERNAME:PASSWORD@rora)rcrdr�	readlines�type�bytes�decode�re�search�subrfrxrgr!r;)rrP�sourcesr�rbZsource_copyrh�linerrrr�s
�
&z-AptClone._add_file_to_tar_with_password_checkcCsdSr,r�rrPrrr�_write_modified_files_from_etc&sz'AptClone._write_modified_files_from_etccCs>t��}|jD]}|j�||�q|j|dd�t�|�dS)N�./var/lib/apt-clone/debsra)rc�mkdtempr.r0rr!�shutil�rmtree)rrPZtdirrrrrrL*s

zAptClone._dpkg_repackcCs$|��d�d�rd|_nd|_dS)N���r+rm)�getnamesr��	TARPREFIXr�rrr�_detect_tarprefix3szAptClone._detect_tarprefixc
Cs�t�|���}|�|�|�|jd�}|��D]`}|�d�}|�d�s.|��dkrTq.|�	�}t
|�dkr.|d�d�s.|dW5QR�Sq.W5QRXdS)N�etc/apt/sources.listro�#rmrRr)rCrr��extractfiler�r�r�r��strip�splitryr@)r�	statefilerPrhr��lrrr�_get_info_distro;s

$zAptClone._get_info_distroc
Cs*|�|�pd}t�|���}|�|jd�}d}}g}|��D]L}|�d�}|����\}	}
}|d7}t	|�rx|d7}|	�
d�r@|�|	�q@|�|jd�}|j
}
d}d}|jd|��kr�|�|jd���}t�|�}|�dd�}|�d	d�}||d
�|�||t�|
�|d�W5QR�SQRXdS)Nrn� var/lib/apt-clone/installed.pkgsrror
z-desktopzvar/lib/apt-clone/unamerTrUz, )rTr �metarq�
autoinstalled�daterU)r�rCrr�r�r�r�r�r�rsr@�appendZ	getmemberr|r��readrAZ
TagSection�getr>r{�ctime)rr�r rPrhrqr�r�r�r;rr�auto�mr�rTrUriZsectionrrr�_get_clone_info_dictIsH�

��
�zAptClone._get_clone_info_dictcCsd|�|�S)Nz�Hostname: %(hostname)s
Arch: %(arch)s
Distro: %(distro)s
Meta: %(meta)s
Installed: %(installed)s pkgs (%(autoinstalled)s automatic)
Date: %(date)s
)r�)rr�rrrriqs�z
AptClone.infoc	Cs�t�|��J}|�|�|�|j|dd��}g}|��D]}|�|�d��q:W5QRX||}tj	�
|�r�t|��}|��}	W5QRXng}	tj|	|d||d�}
g}|
D]}|�|�q�|S)Nr
rozcurrent-system%s)ZfromfileZtofile)
rCrr�r�r�r�r�r�rrr�difflibZunified_diff)rr�Zsystem_filerrPZ
clone_fileZclone_file_linesr��fpZsystem_file_lines�gen�diffrrr�_get_file_diff_against_clonezs*

�z%AptClone._get_file_diff_against_clonerc	Csh|dkrtj�d|�td�|��}|�|�}|D]>}|�|d�|�|d�kr4td||�|d�|�|d�f�q4td�d}|�|||�}|r�td�|��|j	|d�}t
�|��d}	|	�|j
d�}
i}|
��D]@}|���d	�}|�d
�s�|dkr�q�|��\}
}}||f||
<q�W5QRXi}|D]*}|j�s8�q(|jjt|j�f||j<�q(t|���t|���}|�r�td�td�t|���td
�t|���t|���}|�r�td�td�t|���td
�t�}t|�D]F}||k�r�q�||\}}||\}}||k�r�|�|||f��q�|�rdtd�td�|D]\}}}td|||f��qDdS)Nr�DPkg::Chroot-DirectoryzClone info differences: z '%s': clone='%s' system='%s'rmz/etc/apt/sources.listrlr�ror�z2Installed on the system but not in the clone-file:� r\z2Installed in the clone-file but not in the system:zVersion differences: z-Pkgname <clone-file-version> <system-version>z %s  <%s>   <%s>)rArBr-�printrYr�r�r�r>r8rCrr�r�r�r�r�r�r�rqrr�strrtr;�keys�sortedr!)rr�rrXZ
clone_infor^Zsources_list_systemr�r}rPrhZinstalled_in_cloner�r;rrr�Zinstalled_on_systemrZonly_on_systemZ
only_in_cloneZpkgversion_differencesrZclone_file_pkgversionZ
clone_is_autoZsystem_pkgversionZsys_is_autoZ	clone_verZ
system_verrrr�	show_diff�s�


�
���

�zAptClone.show_diffc		Cs$|dkrFtj�d|�|j�dtj�|d��|j�dtj�|d��t�	|��}|�
|�W5QRXtj�|�s�td|�|�
|�}|j�||�|j|||d�|�||�|r�|�||�|�||||�|�||�|�||�|dk�r |j�tj�|d��|j�tj�|d��d	S)
z� take a statefile produced via (like apt-state.tar.gz)
            save_state() and restore the packages/repositories
            into targetdir (that is usually "/")
        rr�z/proc�procz/sys�sysz0Dir '%s' does not exist, need to bootstrap first)�mirrorN)rArBr-r0r$rrr>rCrr�rr�r�r�_restore_sources_list�_restore_apt_keyring�_rewrite_sources_list�_restore_package_selection�_restore_not_downloadable_debs�_restore_extra_filesr%)	rr�r�exclude_pkgs�
new_distro�protect_installedr�rPr rrr�
restore_state�s(

zAptClone.restore_statecCs�t��}tj�d�}tj�|tj�|��sBt�	|tj�|��t
�|||�|�||�|rn|�
||�|j|d�}z|�tjj���Wntk
r�YnX|��|j|||d�}t
�|�|S)Nr�rl)r�)rcr�rArBr�rrr�dirname�makedirsr��copyr�r�r8�updater2r3r7r5rr�#_restore_package_selection_in_cacher�)rr�r�r�rNr�r}�missingrrr�simulate_restore_states"
zAptClone.simulate_restore_statec
	Cst�|���}tj�|ddd�}tj�|�r:t�|d|�|�|j	d|�tj�|ddd�}t�
|tjtj
BtjBtjB�|r�ddlm}tj�d|�|�}|jdd�D]}	|	j|kr�||	_q�|��z|�|j	d	|�Wntk
r�YnXW5QRXdS)
N�etcr2�sources.list�%s.apt-cloner�r)�SourcesListr�zetc/apt/sources.list.d)rCrrrr>rr�r��extractr��chmod�stat�S_IRUSR�S_IWUSR�S_IRGRP�S_IROTH�aptsources.sourceslistr�rArBr-�list�uri�save�KeyError)
rr�rr�rP�existingZ
td_sourcesr�r��entryrrrr�s*�
zAptClone._restore_sources_listc	Cs�tj�|ddd�}d|}tj�|�r2t�||�t�|���}z|�|j	d|�Wnt
k
rhYnXz|�|j	d|�Wnt
k
r�YnXtj�|�r�|j�||�t�
|�W5QRXdS)Nr�r2ztrusted.gpgr�zetc/apt/trusted.gpgzetc/apt/trusted.gpg.d)rrr>rr�r�rCrr�r�r�r0r#�remove)rr�rr�ZbackuprPrrrr�1s zAptClone._restore_apt_keyringc
Cs|dkrg}t|�}t�}t�}t�|j�}|rL|D]}|jr4|�|j�q4t�|���J}	|	�	|j
d�}
|����$|
��D�]}|�
��d�}|�d�s~|dkr�q~|��\}}
}dd�}|||�r�q~|�|�t|�}|}||kr~zZ|�r0||j|dd�|jd	k�r@|��||j�s@td
|��n||j|d�Wn@tk
�r�}z t�d||f�|�|�W5d}~XYnX||�|�q~W5QRXW5QRX|jd	k�r�|��|D]@}||k�r�|�|��q�||j�s�||j�s�|�|��q�|S)
Nr�ror�rmcSs |D]}t�||�rdSqdS)NT)�fnmatch)r;r�Zexclrrr�is_excluded]szAAptClone._restore_package_selection_in_cache.<locals>.is_excludedF)�	from_userZauto_fixrzpkg %s not marked upgrade)r�zcan't add %s (%s))r-rAZProblemResolverZ	_depcacherpZprotectZ_pkgrCrr�r�Zactiongroupr�r�r�r�r�r!rsZmark_installZbroken_countZresolveZmarked_install�SystemError�loggingZwarningZ	mark_auto)rr�r}r�r�r�ZpkgsZresolverrrPrhr�r;rrr�r�Zauto_installedr��errrr�Cs`�

$

z,AptClone._restore_package_selection_in_cachecCs~|j|d�}tjj�dd�tjj�dd�z|�|j�Wntk
rPYnX|��|�	||||�|�
|j|j�dS)NrlzDir::BinrzDir::Bin::dpkgz
/usr/bin/dpkg)r8r2rArBr-r�r1rrr�Zcommitr6)rr�rr�r�r}rrrr��sz#AptClone._restore_package_selectionc	Cs^t�|��J}|��D]:}|jd}|j�|�r|jt|�d�|_|�||�qW5QRXdS)Nzextra-files/)rCr�
getmembersr�r;r�ryr�)rr�rrPr��prefixrrrr��s
zAptClone._restore_extra_filesc		s�t�|��N}z&�fdd�|��D�}|�||�Wn tk
rRYW5QR�dSXW5QRXg}tj�|d�}t�tj�|d��D]}tj�||�}|�	|�q��j
�||�dS)Ncs"g|]}|j��jd�r|�qS)zvar/lib/apt-clone/debs/)r;r�r�)r]r��rrrr`�sz;AptClone._restore_not_downloadable_debs.<locals>.<listcomp>r�z*.deb)rCrr�Z
extractallr�rrr>rjr�r0r)	rr�rrPZdebsdirZdebsrZdebZdebpathrr�rr��sz'AptClone._restore_not_downloadable_debscCs�ddlm}m}tj�dtj�tj�	|ddd���tj�dtj�tj�	|ddd���|�}|j
dd�D]R}|jsl|jr~qld	}d
D]$}|j
�d|�r�d||f}q�q�|r�||_
ql||_
qltj�	|ddd
�}	tj�d�}
tj�|	��rDt|	d��>}|D]2}|||
�}
|
j�s"|
j�s"|
|kr�|j
�|
�q�W5QRXt�|	�|j
D]4}|j�d��rJ|j
�|�|j
�d|�d|_�qJ|��dS)Nr)r��SourceEntryr�r�r2r�r�zsources.list.drm)ZupdatesZsecurityZ	backportsz-%sz%s-%szsources.list.apt-clone�rzcdrom:T)r�r�r�rArBr-rr�abspathr>r�ZinvalidZdisabledZdistr@r�rrr�r�r�r�rr�)rrr�r�r�r�r�ZreplacementZpocketr�Z
sourcelistr�r��srcrrrr��sL���



zAptClone._rewrite_sources_listrmc
Cs�|rtj�|d�}nd}t�}tj�tj�d��}t�tj�|dd��D]>}t	|dd��(}|D]}|�
d�r^|�|���q^W5QRXqHt�}t�
|�D]@\}	}
}|D]0}tj�|	t|�d�|�}
|
|kr�|�|
�q�q�|S)	Nr�z/etcr:riz*.listro)�encodingz/etc/)rrr>r-r�rArBr�rjrr�r!r��walkry)rrMZetcdirZownedZdpkg_basedirrhr�r�Zunowned�dirpathZdirnames�	filenamesr;�fullnamerrr�_find_unowned_in_etc�s"
zAptClone._find_unowned_in_etcc
Cs*|tj�d�}t�}t|���}t�|�}|D]�}d|kr0|d�d�D]�}d}t|���dkrr|��\}	}
}n|��\}	}
||	}|
��}
|dkr�qJt	j
�|�s�t�
d|�|�|�qJt��}t|d��}|�|���W5QRX|��|
krJt�
d||��|
f�|�|�qJq0W5QRX|S)	Nr:Z	conffilesr\��obsoletezconffile %s removedr�zconffile %s (%s != %s))rArBrWr-rZTagFiler�ryr�rrrr��debugr!�hashlib�md5r�r�Z	hexdigest)
rrMr�Zmodifiedr��tagr�r�rr;Zmd5sumrrrrr�_find_modified_conffiles�s<

�z!AptClone._find_modified_conffilescCstd�dS)Nznot implemented yet)r�)rrMrrr�_dump_debconf_databaseszAptClone._dump_debconf_database)NNN)FFFN)F)r)rNNFN)N)N)FN)rm)r)(r&r'r(r)rrVr?r�r9rQrYrDrJrErKrFrHrIrGr�r�rLr�r�r�rir�r�r�r�r�r�r�r�r�r�r�r�rrrrrrr*]sZ�
�
 	
%		
	(	
K�
&


@	*

#r*)Z
__future__rr2Z	apt.cacherrAr�r�rjrr�rr�r�r�rrCrcr{�iorr�environrBr-�objectrr*rrrr�<module>s,
1