Mini Shell
3
C��e~^ � @ s> d dl Z d dlZd dlmZ d dljZd dlmZ d dlm Z d dl
mZ d dlm
Z
mZ d dlmZmZ d dlmZ d d lmZ d d
lmZ d dlmZ d dlmZmZ d d
lmZ d dl m!Z! d dl"m#Z#m$Z$m%Z%m&Z& d dl'm(Z( d dl)Z)e)j*dd� d dl+m,Z, d dl-m.Z. e.e/�Z0G dd� de�Z1G dd� de1�Z2dS )� N)�CalledProcessError)�util)�PAYLOAD_TYPE_RPM_OSTREE)�_)�get_locale_map_from_ostree�strip_codeset_and_modifier)�
BOOTLOADER�DEVICE_TREE)�STORAGE)� progressQ)�Payload)�utils)�PayloadInstallError�FlatpakInstallError)�FlatpakPayload)�conf)�format_size_full�create_new_context�Variant�GError)�Size�Gioz2.0)r )�get_module_loggerc s� e Zd ZdZ� fdd�Zedd� �Zedd� �Zedd � �Zed
d� �Z edd
� �Z
dd� Zdd� Zdd� Z
dd� Zdd� Zdd� Zdd� Zdd� Zd+d!d"�Zd#d$� Z� fd%d&�Zd'd(� Z� fd)d*�Z� ZS ),�RPMOSTreePayloadz_ A RPMOSTreePayload deploys a tree (possibly with layered packages)
onto the target system.c s$ t � j||� d | _g | _d | _d S )N)�super�__init__�_remoteOptions�_internal_mounts�_locale_map)�self�args�kwargs)� __class__� �(/usr/lib64/python3.6/rpmostreepayload.pyr 5 s zRPMOSTreePayload.__init__c C s t S )zThe DBus type of the payload.)r )r r# r# r$ �type; s zRPMOSTreePayload.typec C s dS )NTr# )r r# r# r$ � handles_bootloader_configuration@ s z1RPMOSTreePayload.handles_bootloader_configurationc C s g S )Nr# )r r# r# r$ �kernel_version_listD s z$RPMOSTreePayload.kernel_version_listc C s t d�S )Nz500 MB)r )r r# r# r$ �space_requiredI s zRPMOSTreePayload.space_requiredc C s | j jjo| j jjjd� S )z.Test ostree repository if it requires network.zfile://)�data�ostreesetup�url�
startswith)r r# r# r$ �
needs_networkN s zRPMOSTreePayload.needs_networkc C s( | j dkr"t| jjj| jjj�| _ | j S )z0Return a map of supported languages and locales.N)r r r) r* r+ �ref)r r# r# r$ �_get_locale_mapS s
z RPMOSTreePayload._get_locale_mapc C s t jjsdS || j� kS )z/Is the given language supported by the payload?T)r �payload�check_supported_localesr/ )r �languager# r# r$ �is_language_supported] s z&RPMOSTreePayload.is_language_supportedc C s, t jjsdS | j� }t|�}||j|g �kS )z-Is the given locale supported by the payload?T)r r0 r1 r/ r �get)r r2 ZlocaleZ
locale_mapr# r# r$ �is_locale_supportedd s
z$RPMOSTreePayload.is_locale_supportedc K sD t j||f|�}|dkr@td|||f �}tjj|�tjkr@|�dS )z5Like util.execWithRedirect, but treat errors as fatalr z%s %s exited with code %dN)r �execWithRedirectr �errors�errorHandler�cb�ERROR_RAISE)r �cmd�argvr! �rc�exnr# r# r$ �_safe_exec_with_redirectm s
z)RPMOSTreePayload._safe_exec_with_redirectc C s� |j � }|jd�}|r"tj|� nz|dkr�|jd�}|jd�}|jd�}t|d�}|dkr`d}n|d | d }tjtd �||||d
� � ntjtd�� d S )Nzoutstanding-fetchesr zbytes-transferred�fetched� requestedg g �?�d zFReceiving objects: %(percent)d%% (%(fetched)d/%(requested)d) %(bytes)s)�percentr@ rA �byteszWriting objects)�
get_statusZget_uintr �send_messageZ
get_uint64r r ) r Z
asyncProgressZstatusZoutstanding_fetchesZbytes_transferredr@ rA Zformatted_bytesrC r# r# r$ �_pull_progress_cbu s
z"RPMOSTreePayload._pull_progress_cbc C s t jt�}|j� }tjjd }tjjd }tj j
|�sBtjjd }x�tj|�D ]�}tj j||�}tj j||�}tj j
|�s|qN|dkr�|r�xdtj|�D ]4}tj j||�} tj j||�}
| j
ddd| |
g� q�W n tjd|� | j
ddd||g� |d }| rNtj j|�rNtj|� qNW d S ) Nz/bootz/usr/lib/ostree-bootZefiZcpz-rz-pzCopying bootloader data: %sz/grub2/grubenv)r
� get_proxyr ZIsEFIr �target�
physical_root�system_root�os�path�isdir�listdir�joinr? �log�info�islink�unlink)r �
bootloaderZis_efiZphysbootZostree_boot_sourceZfnameZsrcpathZdestpathZsubnameZsub_srcpathZsub_destpathZefi_grubenv_linkr# r# r$ �_copy_bootloader_data� s.
z&RPMOSTreePayload._copy_bootloader_datac C s | j � | j� d S )N)�_install�_prepare_mount_targets)r r# r# r$ �install� s zRPMOSTreePayload.installc C s� t � }|j� d }tjdd� tjdd� ddlm}m} | jj}t j
d|� | jddd tj
j d
tj
jg� tjjtj
j�}|jj|�}|j|� |jd �d }|jd� i | _t|d
�r�|jr�tdd�| jd<