%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /lib/python3.9/site-packages/cloudinit/distros/package_management/__pycache__/
Upload File :
Create Path :
Current File : //lib/python3.9/site-packages/cloudinit/distros/package_management/__pycache__/apt.cpython-39.pyc

a

'�Dg��@s�ddlZddlZddlZddlZddlZddlZddlmZmZm	Z	m
Z
mZmZm
Z
ddlmZmZmZddlmZmZddlmZmZe�e�ZdZgd�ZdZeee	ed	�d
d�Z Gdd
�d
e�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--quiet)z/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�L/usr/lib/python3.9/site-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��|�|durt|_|dur&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����vr|�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��z(Apt.install_packages.<locals>.<listcomp>zXThe following packages were not found by APT so APT will not attempt to install them: %scsg|]}|�vr|�qSrr)rC�p�ZunavailablerrrE�rJ�install)�pkgs)r8r�expand_package_listrrF�LOG�debugr7)r,r?Z
to_installrrLr�install_packages�s��zApt.install_packagescCs�|dur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$rrO�_wait_for_apt_commandr+)r,rrSrNZfull_commandr?rrrr7�s$



��zApt.run_package_commandc
Cs�tD]x}tj�|�sqt|d��L}zt�|tjtjB�Wn"t	y\YWd�dS0Wd�q1sr0YqdS)ztDetermines if another process holds any apt locks.

        If all locks are clear, return True else False.
        �wNFT)
�APT_LOCK_FILES�os�path�exists�open�fcntl�lockfZLOCK_EXZLOCK_NB�OSError)r,�lockZhandlerrr�_apt_lock_available�s6zApt._apt_lock_availablecCs�t��}t�d�t��||kr�|��s6t�d�qt�d�ztjfi|��WStjy�|��rl�t�d�t�d�Yq0qtd��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�	monotonicrPrQrb�sleepr
ZProcessExecutionError�TimeoutError)r,rT�timeoutZ
start_timerrrrW�s



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


	
�r )"r^rmZloggingrZr@rc�typingrrrrrrrZ	cloudinitr	r
rZ4cloudinit.distros.package_management.package_managerrr
Zcloudinit.settingsrrZ	getLoggerrhrPr(rYro�dictrrr rrrr�<module>s$

!

Zerion Mini Shell 1.0