D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
usr
/
libexec
/
kcare
/
python
/
kcarectl
/
__pycache__
/
Filename :
__init__.cpython-36.pyc
back
Copy
3 �ӹh�$ � @ s� d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl Z d dl Z d dlZd dlZd dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlmZ ddlmZ ddlmZ dd lmZ dd lmZ ddlmZ ddlmZ dd lmZ ddlmZ ddlmZ ddlm Z ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& ddlm'Z' ddlm(Z( ddlm)Z) ddl*m+Z+m,Z,m-Z-m.Z.m/Z/ ddl&m0Z0m1Z1m2Z2 dZ3dZ4d�Z5d"Z6d#Z7d�Z8d&Z9d'Z:ej;d(ej<�Z=ej;d)�Z>ej?j@d*��rej?jAd d*� ejBd+eCd,� ejDjEejF� d-d.� ZGd/d0� ZHd1d2� ZId3d4� ZJd5d6� ZKd�d7d8�ZLd9d:� ZMd;d<� ZNd=d>� ZOd?d@� ZPdAdB� ZQdCdD� ZRG dEdF� dFeS�ZTG dGdH� dHe1�ZUG dIdJ� dJe1�ZVG dKdL� dLe1�ZWdMdN� ZXedOdP� �ZYd�dQdR�ZZdSdT� Z[dUdV� Z\i Z]dWdX� Z^e^e-j__`eaedYd��s�y8d dlbZcd dldZeecjfjgeejh�ecjfjgdZ�k �rTeid[��W n eik �rl Y n8X d\d]� Zje-jkZlG d^d_� d_em�ZnG d`da� dae-jk�Zoeoe-_kdbdc� Zpejqfddde�Zrdfdg� Zsdhdi� ZtG djdk� dkem�Zudldm� Zvdndo� Zwd�dqdr�Zxdsdt� Zydudv� Zzd�dwdx�Z{dydz� Z|d{d|� Z}d}d~� Z~dd�� Zd�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�d��Z�d�d�� Z�d�d�� Z�d�d�� Z�d�d�� Z�d�d�d��Z�d�d�� Z�d�d�� Z�d�d�� Z�d�d�� Z�d�d�d��Z�d�d�� Z�d�d�� Z�G d�d�� d��Z�d�d�� Z�d�d�� Z�d�d�� Z�d�d�� Z�ej�ejqfd�d��Z�d�d�� Z�ej�fd�dÄZ�d�dń Z�d�dDŽ Z�d�dɄ Z�d�d�d˄Z�d�d̈́ Z�d�dτ Z�dS )�� )�print_functionN)�ArgumentParser)�datetime)�contextmanager� )�config)� constants)� log_utils)�utils)� process_utils)�platform_utils)� http_utils)�ipv6_support)�auth)�serverid)�config_handlers)�libcare)�selinux)�fetch)�update_utils)�errors)�kcare)�server_info)�capabilities)�URLError� HTTPError�httplib� urlencode�json_loads_nstr)�SafeExceptionWrapper� KcareError�NotFound�c Zv3�12h�24h�48h�testz./etc/sysconfig/kcare/freezer.modules.blacklistz/usr/libexec/kcare/kcdoctor.sh� latest.v3� latest.v2z /etc/sysconfig/kcare/sysctl.conf� z$==BLACKLIST== (.*)==END BLACKLIST== z'(kpatch.*|ksplice.*|kpatch_livepatch.*)z/usr/libexec/kcare/python�ignore)�categoryc C sD t � } tjjt�r@ttd�}x|D ]}| j|j� � q"W |j� | S )N�r) �set�os�path�isfile�FREEZER_BLACKLIST�open�add�rstrip�close)�result�f�line� r9 �./usr/libexec/kcare/python/kcarectl/__init__.py�get_freezer_blacklistP s r; c C sB |j d�}| r(dj|d | |d g�}ndj|d |d g�}|S )N�.r r ���r= )�split�join)�ptype�filenameZ name_partsr9 r9 r: �_apply_ptypeZ s rB c C sJ t | tj�t_t | tj�t_t | tj�t_t | tj�t_t | tj�t_d S )N)rB r � PATCH_BIN� PATCH_INFO�BLACKLIST_FILE�FIXUPS_FILE� PATCH_DONE)r@ r9 r9 r: �apply_ptypec s rH c C s t j� \} }}d}t|t�rbt|t� rbyd|jtj|j�|jf }W q� t t fk r^ Y q�X nPt|tt tf�r�t|t� r�d| }n*t|t �r�|jp�t|j�} |jp�d|j }tj� }tjtj� |d |d t| dt| ��|djtj|d��t|dd�d �S ) N� z[Errno %i] %s: '%s'z%sr r �__name__�d �attempts)Z agent_versionZpython_version�distroZdistro_version�error�details� tracebackrL )�sys�exc_info� isinstance�OSErrorr �errnor. �strerrorrA �AttributeError� TypeError�KeyError�IOErrorr �etype�type�innerrO r � get_distror �VERSION�get_python_version�getattr�strr? rP Z format_tb)r[ �value�tbZdetails_sanitizedrM r9 r9 r: � format_exception_without_detailsk s* re c C sv t jr d S tjt� �} tjtjtj | ���}tj d�d | }tj|t j� �}ytj|� W n tk rp Y nX d S )Nz/api/kcarectl-tracez?trace=)r �UPDATE_FROM_LOCAL�json�dumpsre r �nstr�base64Zurlsafe_b64encodeZbstr�get_patch_server_urlr Zhttp_requestr Zget_http_auth_stringZurlopen_base� Exception)ZtraceZ encoded_trace�urlZrequestr9 r9 r: �send_exc� s rn c C s� t j� }|dkr t j|d� dS t j� t j� }|dkrBt jd� t jd� ttjd��&}t j |j � d� t j |j � d� W dQ R X |r�tj|� y | � W n* t k r� tjjd� t jd� Y nX t jd� dS )z� Run func in a fork in an own process group (will stay alive after kcarectl process death). :param func: function to execute :return: r N�ar � zWait exception)r. �fork�waitpid�setsid�_exitr5 r2 r ZLOG_FILE�dup2�fileno�time�sleeprl r �kcarelog� exception)�funcrx �pid�fdr9 r9 r: � nohup_fork� s( r~ c C s� t jjtjd�} t jj| �rtt| d��H}y,t|j� �}|t j tj� krRt|| ��W n t k rh Y nX W dQ R X tj| tj� � dS )a Check the fact that there was a failed patching attempt. If anchor file not exists we should create an anchor with timestamp and schedule its deletion at $timeout. If anchor exists and its timestamp more than $timeout from now we should raise an error. z.kcareprev.lockr, N)r. r/ r? r �PATCH_CACHEr0 r2 �int�readr �SUCCESS_TIMEOUTrw �PreviousPatchFailedException� ValueErrorr �atomic_write� timestamp_str)Zanchor_filepathZafile� timestampr9 r9 r: �touch_anchor� s r� c C sx yt jt jjtjd�� W n tk r. Y nX td| � tj j � ytdd� W n tk rr t jjd� Y nX dS )z� See touch_anchor() for detailed explanation of anchor mechanics. See KPT-730 for details about action registration. :param state_data: dict with current level, kernel_id etc. z.kcareprev.lock�done)�reasonzCannot send update info!N)r. �remover/ r? r r rT �register_actionr �get_loaded_modules�clear�get_latest_patch_levelrl r ry rz )� state_datar9 r9 r: � commit_update� s r� c C s( t jtjjtjd�tj| |d�d� d S )N�patchesrI )Zexclude_path) r �clean_directoryr. r/ r? r r r �get_cache_path)�khashZplevelr9 r9 r: �clear_cache� s r� c C s>