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: //usr/lib/python3/dist-packages/cloudinit/distros/package_management/__pycache__/apt.cpython-38.pyc
U

Ӈg��@s�ddlZddlZddlZddlZddlZddlZddlmZmZm	Z	m
Z
mZmZm
Z
ddlmZmZmZddlmZmZddlmZmZe�e�ZdZddd	d
gZdZeee	ed�d
d�Z Gdd�de�Z!dS)�N)�Any�Iterable�List�Mapping�Optional�Sequence�cast)�helpers�subp�util)�PackageManager�UninstalledPackages)�
PER_ALWAYS�PER_INSTANCE)zapt-getz(--option=Dpkg::Options::=--force-confoldz*--option=Dpkg::options::=--force-unsafe-ioz--assume-yesz--quietz/var/lib/dpkg/lock-frontendz/var/lib/dpkg/lockz/var/cache/apt/archives/lockz/var/lib/apt/lists/lock�)�cfg�returncCs�|sd}dg}n8|�d�}|�d�}t|t�r6|g}nt|t�sHtd��t�|�stt|���dkr�|r�t�	|d�r�t
tt|�SgSdS)a9Parse the 'apt_get_wrapper' section of cloud-config.

    apt_get_wrapper may be defined in cloud-config:
      apt_get_wrapper:
        enabled: true
        command: ["eatmydata"]

    The function takes the value of "apt_get_wrapper" and returns the list
    of arguments to prefix to the apt-get command.
    �autoZ	eatmydata�enabled�commandz,apt_wrapper command must be a string or listrN)�get�
isinstance�str�list�	TypeErrorrZis_true�lowerr
�whichrr)rrr�r�J/usr/lib/python3/dist-packages/cloudinit/distros/package_management/apt.py�get_apt_wrapper)s$





���rcs�eZdZdZdddd�ejeeeeeeed��fdd�Z	e
ejedd�d	d
��Ze
d�dd
�Zdd�dd�Zejdd�dd��Zeed�dd�Zeed�dd�Zd"dd�Zdd�Zefd d!�Z�ZS)#�AptZaptrN��apt_get_wrapper_command�apt_get_command�apt_get_upgrade_subcommand)�runnerr"r#r$csNt��|�|dkrt|_|dkr&d}t|�t|j�|_||_ddi|_dS)Nzdist-upgradeZDEBIAN_FRONTENDZnoninteractive)�super�__init__�APT_GET_COMMANDr#�tuple�apt_commandr$�environment)�selfr%r"r#r$��	__class__rrr'Ms�zApt.__init__)r%rrcCs&t|t|�d��|�d�|�d�d�S)NZapt_get_wrapperr#r$r!)r rr)�clsr%rrrr�from_configas��zApt.from_config)rcCstt�|jd��S)Nr)�boolr
rr#�r,rrr�	availablelsz
Apt.availableF)�forcecCs$|jjd|jdg|rtntd�dS)Nzupdate-sources�update)Zfreq)r%�run�run_package_commandrr)r,r4rrr�update_package_sourcesos
�zApt.update_package_sources�)�maxsizecCst�ddg�j}t|���S)Nz	apt-cacheZpkgnames)r
�stdout�set�
splitlines)r,Zresprrr�get_all_packageswszApt.get_all_packages)�pkglistcs�fdd�|D�S)Ncs.g|]&}t�d|�d�d����kr|�qS)z/|=rz-^)�re�split�rstripr>)�.0�pkgr2rr�
<listcomp>�s
��z0Apt.get_unavailable_packages.<locals>.<listcomp>r)r,r?rr2r�get_unavailable_packages�s
�zApt.get_unavailable_packages)r?rcsd|��t�dt|��}|�dd�|D����r<t�d���fdd�|D�}|r`|jd|d��S)N�%s=%scSsg|]}|�d�d�qS)�=r)rA)rC�xrrrrE�sz(Apt.install_packages.<locals>.<listcomp>zXThe following packages were not found by APT so APT will not attempt to install them: %scsg|]}|�kr|�qSrr)rC�p�ZunavailablerrrE�s�install)�pkgs)r8r�expand_package_listrrF�LOG�debugr7)r,r?Z
to_installrrKr�install_packages�s��zApt.install_packagescCs�|dkrg}t|j�}|r0t|t�r0|�|�n|rHt|t�rH|�|�|dkrV|j}|�|�t�d|�}|�|�|j	||j
dd�d�dS)NZupgraderGF)�argsZ
update_envZcapture)�subp_kwargs)rr*rr�append�extendr$rrN�_wait_for_apt_commandr+)r,rrRrMZfull_commandr?rrrr7�s$



��zApt.run_package_commandc
CsntD]d}tj�|�sqt|d��B}zt�|tjtjB�Wn"t	k
r\YW5QR�dSXW5QRXqdS)ztDetermines if another process holds any apt locks.

        If all locks are clear, return True else False.
        �wFT)
�APT_LOCK_FILES�os�path�exists�open�fcntl�lockfZLOCK_EXZLOCK_NB�OSError)r,�lockZhandlerrr�_apt_lock_available�s zApt._apt_lock_availablecCs�t��}t�d�t��||kr�|��s6t�d�qt�d�ztjf|�WStjk
r�|��rj�t�d�t�d�YqXqtd��dS)zWWait for apt install to complete.

        subp_kwargs: kwargs to pass to subp
        zWaiting for APT lockr9zAPT lock availablez*Another process holds APT lock. Waiting...zCould not get APT lockN)	�time�	monotonicrOrPra�sleepr
ZProcessExecutionError�TimeoutError)r,rSZtimeoutZ
start_timerrrrV�s



zApt._wait_for_apt_command)NN)�__name__�
__module__�__qualname__�namer	ZRunnersrrrr'�classmethodrr0r1r3r8�	functools�	lru_cacher>rrFr
rQr7ra�APT_LOCK_WAIT_TIMEOUTrV�
__classcell__rrr-rr Js,�
�


	
�r )"r]rkZloggingrYr@rb�typingrrrrrrrZ	cloudinitr	r
rZ4cloudinit.distros.package_management.package_managerrr
Zcloudinit.settingsrrZ	getLoggerrfrOr(rXrm�dictrrr rrrr�<module>s&$
�!