dbfdg 3 wh%@sddlZddlZddlZddlZddlZddlZddlmZddlmZddlm Z ddlm Z ddlm Z ddl m Z dd lmZd Zd d Zd dZddZddZddZddZddZGdddeZGdddeZGdddeZdd Zd!d"Ze jd#d$Ze jd%d&Z e jd'd(Z!d)d*Z"d+d,Z#d-d.Z$d/d0Z%d1d2Z&d3d4Z'e jd5d6Z(d7d8Z)d9d:Z*d;d<Z+d=d>Z,dS)?N)config) constants) log_utils) process_utils)utils)SafeExceptionWrapper)json_loads_nstrzuname: cCstj|p|dkS)Nz.-_+)strisalnum)cr +/usr/libexec/kcare/python/kcarectl/kcare.py is_uname_charsrc Csjt}tt||tjd}z@x:|jD].}|jtr&djt t |t tdj Sq&WWd|j XdS)Nr)get_kernel_hashopenget_cache_pathr PATCH_INFO readlines startswith UNAME_LABELjoinfilterrlenstripclose) patch_levelkhashfliner r r parse_unames ( r"c CsJtjjtjrFy"ttjd}|j||jdStk rDYnXdS)NwTF) ospathexistsrKCARE_UNAME_FILErwriter Exception) new_versionr r r rkcare_update_effective_version*s  r+c Cs.ttjd}ztj|jjS|jXdS)Nrb)rrKERNEL_VERSION_FILEhashlibsha1read hexdigestr)r r r rr6s rcCstjjtjd}tjj|rt|dV}|jj}y t |Wn6t k rdt t tjj |St k rvdSX|SQRXdS)z:Returns timestamp from PATCH_CACHE/stoped.at if its exsitsz stopped.atrerrorNz-1)r$r%rr PATCH_CACHEr&rr0rstripint ValueErrorr getctimer))Zstopped_at_filenameZfhvaluer r r get_last_stopAs     r9cCsPtjpd}tjpd}dj||t||g}tjd|f}|rD||f7}tjj|S)Nnonedefault-patches) rPREFIX PATCH_TYPErr rr3r$r%)rplevelfnameprefixptypeZ patch_dirresultr r rrRs    rcGstjtjf|S)N)rget_patch_server_urlrr>)partsr r rget_kernel_prefixed_url\srGc@seZdZddZddZdS)BaseKernelPatchLevelcGst|jt|f|S)N)rrr )selfrFr r r cache_pathaszBaseKernelPatchLevel.cache_pathcCs|j|j|j|jdS)N)levelrbaseurlrelease)rKrrLrM)rIr r ras_dictdszBaseKernelPatchLevel.as_dictN)__name__ __module__ __qualname__rJrNr r r rrH`srHcs8eZdZd fdd Zd ddZddZdd ZZS) KernelPatchLevelNcst||j||S)N)super__new__)clsrrKrLrM) __class__r rrTnszKernelPatchLevel.__new__cCs||_||_||_||_dS)N)rKrrLrM)rIrrKrLrMr r r__init__qszKernelPatchLevel.__init__cGstj|j|jf|S)N)rrErLr)rIrFr r rkmod_urlwszKernelPatchLevel.kmod_urlcGstj|j|jt|f|S)N)rrErLrr )rIrFr r rfile_urlzszKernelPatchLevel.file_url)N)N)rOrPrQrTrWrXrY __classcell__r r )rVrrRms rRcs<eZdZfddZddZddZddZd d ZZS) LegacyKernelPatchLevelcsByt||j||Stk r<}zt|WYdd}~XnXdS)N)rSrTr6r)rUrrKexc)rVr rrTszLegacyKernelPatchLevel.__new__cCs||_||_d|_d|_dS)N)rKrrLrM)rIrrKr r rrWszLegacyKernelPatchLevel.__init__cGs0dtjkr t|jt|f|St|jf|S)Nzpatches.kernelcare.com)r PATCH_SERVERrGrr )rIrFr r rrXs zLegacyKernelPatchLevel.kmod_urlcGst|jt|f|S)N)rGrr )rIrFr r rrYszLegacyKernelPatchLevel.file_urlcCst|jt||S)N)rRrr5)rIrLr r rupgradeszLegacyKernelPatchLevel.upgrade) rOrPrQrTrWrXrYr^rZr r )rVrr[~s  r[cCs^y6ttjjtjdd}tj|j|WdQRXWn"t k rXt j dddYnXdS)Nzkernel_patch_level.jsonr#z!failed to dump kernel patch levelF) print_msg) rr$r%rrr3jsondumprNr)rlogexc)Zkernel_patch_levelr r r rdump_kernel_patch_levels rccCsTy,ttjjtjd}t|jSQRXWn"tk rNt j dddYnXdS)Nzkernel_patch_level.jsonz(failed to read dumped kernel patch levelF)r_) rr$r%rrr3r r0r)rrb)r r r rread_dumped_kernel_patch_levels rdc Csd}d}tjjdrZtdd6}x.|D]&}|j}|jdr&|jdd\}}q&WWdQRXtjj|rtjtjj |d}|rt dd|D}|S) Nz /var/crashz/etc/kdump.confrzpath rz*/vmcorecss|]}tjj|VqdS)N)r$r%r7).0itr r r sz0kdumps_latest_event_timestamp..) r$r%isfilerrrsplitisdirglobrmax)Z kdump_pathrDZ kdump_confr!_Z vmcore_listr r rkdumps_latest_event_timestamps     rncCs>tjstjjtjr:tjtjddgddd\}}}|jSdS)Nz is-activeZkdumpT) catch_stdout catch_stderrzsystemd-absent) rSKIP_SYSTEMCTL_CHECKr$r%rh SYSTEMCTLr run_commandr)rmstdoutr r r kdump_statussrucCs8tjjtjsdStjtj}|s&dStdd|DS)Ncss&|]}tjjtjjtj|VqdS)N)r$r%r7rr KDUMPS_DIR)rerfr r rrgsz7crashreporter_latest_event_timestamp..)r$r%rjrrvlistdirrl)Z files_listr r r$crashreporter_latest_event_timestamps  rxc Cs:d}tjj|sdSt|d}|jj}WdQRX|S)Nz/sys/module/kcare/versionr)r$r%r&rr0r)Zkmod_version_filer versionr r rget_current_kmod_versions   rzcCs6t}|sdStjdddt||tjgj}||kS)NTz /sbin/modinfoz-Fry)rzr check_outputrrKMOD_BINr)rr@Z old_versionr*r r ris_kmod_version_changeds r}cCst}|stjSt|S)N)loaded_patch_levelplatformrMr")rr r rkcare_uname_susrcCs,tjjtjr"ttjdjjStSdS)Nr) r$r%r&rr'rr0rrr r r r kcare_unamesrcCs`ttd}|r\y t|Wn0tk rN}zt|dtWYdd}~XnXtt|SdS)Nz patch-levelzUnexpected patch state)parse_patch_descriptionloaded_patch_descriptionr5r6r _patch_infor[r)pler r rr~s  r~cCstjtjdgS)Ninfo)rr{r KPATCH_CTLr r r rrsrcCsRyddtdDSttfk rL}ztjdt|ddgSd}~XnXdS)NcSsg|]}|jdqS)r)ri)rer!r r r sz&get_loaded_modules..z /proc/modulesz#Error getting loaded modules list: F)r_)rOSErrorIOErrorrlogerrorr )exr r rget_loaded_moduless rcCsdtkrdSttdS)Nkcarezkpatch-description)rget_patch_valuerr r r rr s rcCstj|j|S)N)r data_as_dictget)rZlabelr r rrsrc Csrddddd}|s|S|jd\}}}|jd\}}}|jd\}}}|pLd|d<|pXd|d<||d <||d <|S) Nr;r)z patch-levelz patch-typez last-updatezkernel-version;:r<z patch-levelz patch-typez last-updatezkernel-version) partition) ZdescrDZlevel_type_timestamprmZkernelZ level_type timestampr patch_typer r rrs  rcCshtjjtjd}tjj|rdt|d8}y|j}tj |St t t t tfk rXYnXWdQRXdS)Nz kcare.stater)r$r%rrr3r&rr0astZ literal_eval SyntaxErrorrr6 TypeErrorUnicodeDecodeError)Z state_filer stater r r get_state*s   r)-rr`r$r.rkrrrrrrrerrorsrpy23r rrr"r+rr9rrGr5rHrRr[rcrdcachedrnrurxrzr}rrr~rrrrrrr r r rsN