<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
<e)                 @   s   d dl mZ ddlZddljZd dlT ddlZddlZddlZ	ddl
mZ e	jj Ze ZG dd dZG dd	 d	ZG d
d deZG dd deZG dd deZG dd deZG dd deZG dd dejZdS )   )base    N)*)commandsc               @   s   e Zd ZdddZdS )ServiceNc             C   s   || _ || _|| _|| _d S )N)enablestartcfg_filerunlevel)selfr   r   r	   r
    r   $/usr/lib/python3.6/plugin_service.py__init__   s    zService.__init__)NNNN)__name__
__module____qualname__r   r   r   r   r   r      s   r   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )InitHandlerc             C   s(   t jdg\}}|dkr$|j d S d S )Nr
   r   r   )cmdexecutesplit)r   retcodeoutr   r   r   runlevel_get   s    zInitHandler.runlevel_getc             C   s   t jddg d S )NZtelinitq)r   r   )r   r   r   r   daemon_reload   s    zInitHandler.daemon_reloadc             C   s   d S )Nr   )r   namer	   r   r   r   cfg_install   s    zInitHandler.cfg_installc             C   s   d S )Nr   )r   r   r	   r   r   r   cfg_uninstall   s    zInitHandler.cfg_uninstallc             C   s   d S )Nr   )r   r   r	   r   r   r   
cfg_verify"   s    zInitHandler.cfg_verifyN)r   r   r   r   r   r   r   r   r   r   r   r   r      s
   r   c               @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )SysVBasicHandlerc             C   s   t jd|dg d S )Nservicer   )r   r   )r   r   r   r   r   r   '   s    zSysVBasicHandler.startc             C   s   t jd|dg d S )Nr!   stop)r   r   )r   r   r   r   r   r"   *   s    zSysVBasicHandler.stopc             C   s
   t  d S )N)NotImplementedError)r   r   r
   r   r   r   r   -   s    zSysVBasicHandler.enablec             C   s
   t  d S )N)r#   )r   r   r
   r   r   r   disable0   s    zSysVBasicHandler.disablec             C   s"   t jd|dgdgd\}}|dkS )Nr!   statusr   )	no_errors)r   r   )r   r   r   r   r   r   r   
is_running3   s    zSysVBasicHandler.is_runningc             C   s
   t  d S )N)r#   )r   r   r
   r   r   r   
is_enabled7   s    zSysVBasicHandler.is_enabledN)	r   r   r   r   r"   r   r$   r'   r(   r   r   r   r   r    &   s   r    c               @   s$   e Zd Zdd Zdd Zdd ZdS )SysVHandlerc             C   s   t jdd||dg d S )N	chkconfigz--levelon)r   r   )r   r   r
   r   r   r   r   ;   s    zSysVHandler.enablec             C   s   t jdd||dg d S )Nr*   z--leveloff)r   r   )r   r   r
   r   r   r   r$   >   s    zSysVHandler.disablec             C   sB   t jdd|g\}}|dkr>|jdt| d d d dkS d S )Nr*   z--listr   z%s:r      r+   )r   r   r   str)r   r   r
   r   r   r   r   r   r(   A   s    zSysVHandler.is_enabledN)r   r   r   r   r$   r(   r   r   r   r   r)   :   s   r)   c               @   s$   e Zd Zdd Zdd Zdd ZdS )SysVRCHandlerc             C   s   t jdd||dg d S )Nzsysv-rc-confz--levelr+   )r   r   )r   r   r
   r   r   r   r   F   s    zSysVRCHandler.enablec             C   s   t jdd||dg d S )Nzsysv-rc-confz--levelr,   )r   r   )r   r   r
   r   r   r   r$   I   s    zSysVRCHandler.disablec             C   sB   t jdd|g\}}|dkr>|jdt| d d d dkS d S )Nzsysv-rc-confz--listr   z%s:r   r-   r+   )r   r   r   r.   )r   r   r
   r   r   r   r   r   r(   L   s    zSysVRCHandler.is_enabledN)r   r   r   r   r$   r(   r   r   r   r   r/   E   s   r/   c               @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )OpenRCHandlerc             C   s&   t jddg\}}|dkr"|j S d S )Nz	rc-statusz-rr   )r   r   strip)r   r   r   r   r   r   r   Q   s    zOpenRCHandler.runlevel_getc             C   s   t jd|dg d S )Nz
rc-servicer   )r   r   )r   r   r   r   r   r   U   s    zOpenRCHandler.startc             C   s   t jd|dg d S )Nz
rc-servicer"   )r   r   )r   r   r   r   r   r"   X   s    zOpenRCHandler.stopc             C   s   t jdd||g d S )Nz	rc-updateadd)r   r   )r   r   r
   r   r   r   r   [   s    zOpenRCHandler.enablec             C   s   t jdd||g d S )Nz	rc-updatedel)r   r   )r   r   r
   r   r   r   r$   ^   s    zOpenRCHandler.disablec             C   s"   t jd|dgdgd\}}|dkS )Nz
rc-servicer%   r   )r&   )r   r   )r   r   r   r   r   r   r   r'   a   s    zOpenRCHandler.is_runningc             C   s2   t jdd|g\}}ttjdtj| d |S )Nz	rc-updateZshowz\b)r   r   boolresearchescape)r   r   r
   r   r   r   r   r   r(   e   s    zOpenRCHandler.is_enabledN)
r   r   r   r   r   r"   r   r$   r'   r(   r   r   r   r   r0   P   s   r0   c               @   s\   e Z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S )SystemdHandlerc             C   s   dS )N r   )r   r   r   r   r   k   s    zSystemdHandler.runlevel_getc             C   s   t jdd|g d S )N	systemctlZrestart)r   r   )r   r   r   r   r   r   n   s    zSystemdHandler.startc             C   s   t jdd|g d S )Nr:   r"   )r   r   )r   r   r   r   r   r"   q   s    zSystemdHandler.stopc             C   s   t jdd|g d S )Nr:   r   )r   r   )r   r   r
   r   r   r   r   t   s    zSystemdHandler.enablec             C   s   t jdd|g d S )Nr:   r$   )r   r   )r   r   r
   r   r   r   r$   w   s    zSystemdHandler.disablec             C   s"   t jdd|gdgd\}}|dkS )Nr:   z	is-activer   )r&   )r   r   )r   r   r   r   r   r   r   r'   z   s    zSystemdHandler.is_runningc             C   s>   t jdd|gdgd\}}|j }|dkr.dS |dkr:dS d S )	Nr:   z
is-enabledr   )r&   ZenabledTZdisabledF)r   r   r1   )r   r   r
   r   r   r%   r   r   r   r(   ~   s    zSystemdHandler.is_enabledc             C   s   t jd||f  tjj|s0t jd|  d S tj| }ytj|tj	 W n2 t
k
r~ } zt jd||f  d S d }~X nX tj|| | j  d S )NzCinstalling service configuration overlay file '%s' for service '%s'z)Unable to find service configuration '%s'z#Unable to create directory '%s': %s)loginfoospathexistserrorconstsSERVICE_SYSTEMD_CFG_PATHmakedirsZDEF_SERVICE_CFG_DIR_MODEOSErrorr   copyr   )r   r   r	   dirpather   r   r   r      s    
zSystemdHandler.cfg_installc             C   sn   t jd||f  tj| }d|tjj|f }tj| | j	  ytj
| W n ttfk
rh   Y nX d S )NzEuninstalling service configuration overlay file '%s' for service '%s'z%s/%s)r;   r<   rA   rB   r=   r>   basenamer   unlinkr   rmdirFileNotFoundErrorrD   )r   r   r	   rF   r>   r   r   r   r      s    

zSystemdHandler.cfg_uninstallc             C   s   |d krd S dt j| tjj|f }tjj|sHtjd||f  dS tjj|sjtjd||f  dS tj	|}tj	|}||kS )Nz%s/%sz.Unable to find service '%s' configuration '%s'Fz0Service '%s' configuration not installed in '%s')
rA   rB   r=   r>   rH   r?   r;   r@   r   Z	sha256sum)r   r   r	   r>   Z
sha256sum1Z
sha256sum2r   r   r   r      s    

zSystemdHandler.cfg_verifyN)r   r   r   r   r   r"   r   r$   r'   r(   r   r   r   r   r   r   r   r8   i   s   r8   c                   sn   e Zd ZdZ f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ejfddZ  ZS )ServicePlugina1  
	`service`::
	
	Plug-in for handling sysvinit, sysv-rc, openrc and systemd services.
	+
	The syntax is as follows:
	+
	[subs="+quotes,+macros"]
	----
	[service]
	service.__service_name__=__commands__[,file:__file__]
	----
	+
	Supported service-handling `_commands_` are `start`, `stop`, `enable`
	and `disable`. The optional `file:__file__` directive installs an overlay
	configuration file `__file__`. Multiple commands must be comma (`,`)
	or semicolon (`;`) separated. If the directives conflict, the last
	one is used.
	+
	The service plugin supports configuration overlays only for systemd.
	In other init systems, this directive is ignored. The configuration
	overlay files are copied to `/etc/systemd/system/__service_name__.service.d/`
	directories. Upon profile unloading, the directory is removed if it is empty.
	+
	With systemd, the `start` command is implemented by `restart` in order
	to allow loading of the service configuration file overlay.
	+
	NOTE: With non-systemd init systems, the plug-in operates on the
	current runlevel only.
	+
	.Start and enable the `sendmail` service with an overlay file
	====
	----
	[service]
	service.sendmail=start,enable,file:${i:PROFILE_DIR}/tuned-sendmail.conf
	----
	The internal variable `${i:PROFILE_DIR}` points to the directory
	from which the profile is loaded.
	====
	c                s&   t t| j|| d| _| j | _d S )NT)superrL   r   Z_has_dynamic_options_detect_init_system_init_handler)r   argskwargs)	__class__r   r   r      s    zServicePlugin.__init__c             C   s   t j|dgd\}}|dkS )Nr   )r&   )r   r   )r   Zcommandr   r   r   r   r   
_check_cmd   s    zServicePlugin._check_cmdc             C   s   | j ddgrtjd t S | j dgr:tjd t S | j ddgrXtjd t S | j d	dgrvtjd
 t S tjdd S )Nr:   r%   zdetected systemdr*   zdetected generic sysvinitzupdate-rc.dz-hzdetected sysv-rcz	rc-updatezdetected openrcz8Unable to detect your init system, disabling the plugin.)	rS   r;   debugr8   r)   r/   r0   
exceptionsZNotSupportedPluginException)r   r   r   r   rN      s    



z!ServicePlugin._detect_init_systemc             C   s   t jd|}t }x~|D ]v}|dkr,d|_q|dkr<d|_q|dkrLd|_q|dkr\d|_q|d d d	kr||dd  |_qtjd
||f  qW |S )Nz
\s*[,;]\s*r   Tr$   Fr   r"      zfile:z*service '%s': invalid service option: '%s')r5   r   r   r   r   r	   r;   r@   )r   r   vallr!   ir   r   r   _parse_service_options   s    
z$ServicePlugin._parse_service_optionsc                s6   d|_ d|_tj fdd|jj D  _i |_d S )NFTc                sT   g | ]L\}}|d d dkrt |dkr|dd   j|dd   jj|fqS )N   zservice.)lenrZ   Z
_variablesexpand).0Zoptionvalue)r   r   r   
<listcomp>  s   z0ServicePlugin._instance_init.<locals>.<listcomp>)Z_has_dynamic_tuningZ_has_static_tuningcollectionsOrderedDictZoptionsitems	_services_services_original)r   instancer   )r   r   _instance_init   s
    zServicePlugin._instance_initc             C   s   d S )Nr   )r   rf   r   r   r   _instance_cleanup	  s    zServicePlugin._instance_cleanupc             C   sT   |r| j j| n|d k	r&| j j| |r:| j j|| n|d k	rP| j j|| d S )N)rO   r   r"   r   r$   )r   r   r   r   r
   r   r   r   _process_service  s    zServicePlugin._process_servicec             C   s   | j j }|d kr tjd d S x| jj D ]}| j j|d |}| j j|d }t|||d j	||j
|d < |d j	r| j j|d |d j	 | j|d |d j|d j| q,W d S )NzCannot detect runlevelr   r   )rO   r   r;   r@   rd   rc   r(   r'   r   r	   re   r   ri   r   r   )r   rf   r
   r!   r(   r'   r   r   r   _instance_apply_static  s    


z$ServicePlugin._instance_apply_staticc       
      C   sH  | j j }|d kr&tjtjd  dS d}x| jj D ]}| j j|d |d j	}|r~tj
tjd |d |d j	f  nR|d k	rtjtjd |d |d j	f  d}n"tj
tjd |d |d j	f  | j j|d |}| j j|d }	| jd	|d  |d j|	|dkrd}| jd
|d  |d j||dkr8d}q8W |S )Nzcannot detect runlevelFTr   r   z'service '%s' configuration '%s' matchesz'service '%s' configuration '%s' differszservice '%s' configuration '%s'z
%s runningz
%s enabled)rO   r   r;   r@   rA   ZSTR_VERIFY_PROFILE_FAILrd   rc   r   r	   r<   ZSTR_VERIFY_PROFILE_OKZ STR_VERIFY_PROFILE_VALUE_MISSINGr(   r'   Z_verify_valuer   r   )
r   rf   Zignore_missingZdevicesr
   retr!   Zret_cfg_verifyr(   r'   r   r   r   _instance_verify_static$  s(    
$""$"z%ServicePlugin._instance_verify_staticc             C   sL   xFt |jj D ]4\}}|jr.| jj||j | j||j|j|j	 qW d S )N)
listre   rc   r	   rO   r   ri   r   r   r
   )r   rf   Zrollbackr   r_   r   r   r   _instance_unapply_static<  s    z&ServicePlugin._instance_unapply_static)r   r   r   __doc__r   rS   rN   rZ   rg   rh   ri   rj   rl   rA   ZROLLBACK_SOFTrn   __classcell__r   r   )rR   r   rL      s   (	
rL   )r9   r   ra   Ztuned.constsrA   Z
decoratorsr=   r5   Z
tuned.logsZtunedZtuned.utils.commandsr   Zlogsgetr;   r   r   r   r    r)   r/   r0   r8   ZPluginrL   r   r   r   r   <module>   s"   

B