3 szSysVHandler.disablecCsBtjdd|g\}}|dkr>|jdt|ddddkSdS)Nr*z--listrz%s:rr+)rrrstr)r rr rrr r r r(AszSysVHandler.is_enabledN)rrrrr$r(r r r r r):sr)c@s$eZdZddZddZddZdS) SysVRCHandlercCstjdd||dgdS)Nz sysv-rc-confz--levelr+)rr)r rr r r r rFszSysVRCHandler.enablecCstjdd||dgdS)Nz sysv-rc-confz--levelr,)rr)r rr r r r r$IszSysVRCHandler.disablecCsBtjdd|g\}}|dkr>|jdt|ddddkSdS)Nz sysv-rc-confz--listrz%s:rr-r+)rrrr.)r rr rrr r r r(LszSysVRCHandler.is_enabledN)rrrrr$r(r r r r r/Esr/c@sDeZdZddZddZddZddZd d Zd d Zd dZ dS) OpenRCHandlercCs&tjddg\}}|dkr"|jSdS)Nz rc-statusz-rr)rrstrip)r rrr r r rQszOpenRCHandler.runlevel_getcCstjd|dgdS)Nz rc-servicer)rr)r rr r r rUszOpenRCHandler.startcCstjd|dgdS)Nz rc-servicer")rr)r rr r r r"XszOpenRCHandler.stopcCstjdd||gdS)Nz rc-updateadd)rr)r rr r r r r[szOpenRCHandler.enablecCstjdd||gdS)Nz rc-updatedel)rr)r rr r r r r$^szOpenRCHandler.disablecCs"tjd|dgdgd\}}|dkS)Nz rc-servicer%r)r&)rr)r rrrr r r r'aszOpenRCHandler.is_runningcCs2tjdd|g\}}ttjdtj|d|S)Nz rc-updateZshowz\b)rrboolresearchescape)r rr rrr r r r(eszOpenRCHandler.is_enabledN) rrrrrr"rr$r'r(r r r r r0Psr0c@s\eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ dS)SystemdHandlercCsdS)Nr )r r r r rkszSystemdHandler.runlevel_getcCstjdd|gdS)N systemctlZrestart)rr)r rr r r rnszSystemdHandler.startcCstjdd|gdS)Nr:r")rr)r rr r r r"qszSystemdHandler.stopcCstjdd|gdS)Nr:r)rr)r rr r r r rtszSystemdHandler.enablecCstjdd|gdS)Nr:r$)rr)r rr r r r r$wszSystemdHandler.disablecCs"tjdd|gdgd\}}|dkS)Nr:z is-activer)r&)rr)r rrrr r r r'zszSystemdHandler.is_runningcCs>tjdd|gdgd\}}|j}|dkr.dS|dkr:dSdS) Nr:z is-enabledr)r&ZenabledTZdisabledF)rrr1)r rr rrr%r r r r(~szSystemdHandler.is_enabledcCstjd||ftjj|s0tjd|dStj|}ytj|tj Wn2t k r~}ztjd||fdSd}~XnXt j |||j dS)NzCinstalling service configuration overlay file '%s' for service '%s'z)Unable to find service configuration '%s'z#Unable to create directory '%s': %s)loginfoospathexistserrorconstsSERVICE_SYSTEMD_CFG_PATHmakedirsZDEF_SERVICE_CFG_DIR_MODEOSErrorrcopyr)r rr dirpather r r rs   zSystemdHandler.cfg_installc Csntjd||ftj|}d|tjj|f}tj||j ytj |Wnt t fk rhYnXdS)NzEuninstalling service configuration overlay file '%s' for service '%s'z%s/%s) r;r<rArBr=r>basenamerunlinkrrmdirFileNotFoundErrorrD)r rr rFr>r r r rs  zSystemdHandler.cfg_uninstallcCs|dkr dSdtj|tjj|f}tjj|sHtjd||fdStjj|sjtjd||fdStj |}tj |}||kS)Nz%s/%sz.Unable to find service '%s' configuration '%s'Fz0Service '%s' configuration not installed in '%s') rArBr=r>rHr?r;r@rZ sha256sum)r rr r>Z sha256sum1Z sha256sum2r r r rs    zSystemdHandler.cfg_verifyN) rrrrrr"rr$r'r(rrrr r r r r8is r8csneZdZdZfddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ e jfddZZS) 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. ==== cs&tt|j||d|_|j|_dS)NT)superrLrZ_has_dynamic_options_detect_init_system _init_handler)r argskwargs) __class__r r rszServicePlugin.__init__cCstj|dgd\}}|dkS)Nr)r&)rr)r Zcommandrrr r r _check_cmdszServicePlugin._check_cmdcCs|jddgrtjdtS|jdgr:tjdtS|jddgrXtjdtS|jd dgrvtjd tStjd dS) Nr:r%zdetected systemdr*zdetected generic sysvinitz update-rc.dz-hzdetected sysv-rcz rc-updatezdetected openrcz8Unable to detect your init system, disabling the plugin.) rSr;debugr8r)r/r0 exceptionsZNotSupportedPluginException)r r r r rNs     z!ServicePlugin._detect_init_systemcCstjd|}t}x~|D]v}|dkr,d|_q|dkrsz0ServicePlugin._instance_init..)Z_has_dynamic_tuningZ_has_static_tuning collections OrderedDictZoptionsitems _services_services_original)r instancer )r r _instance_inits zServicePlugin._instance_initcCsdS)Nr )r rfr r r _instance_cleanup szServicePlugin._instance_cleanupcCsT|r|jj|n|dk r&|jj||r:|jj||n|dk rP|jj||dS)N)rOrr"rr$)r rrrr r r r _process_service s zServicePlugin._process_servicecCs|jj}|dkr tjddSx|jjD]}|jj|d|}|jj|d}t|||dj ||j |d<|dj r|jj |d|dj |j |d|dj |dj|q,WdS)NzCannot detect runlevelrr)rOrr;r@rdrcr(r'rr rerrirr)r rfr r!r(r'r r r _instance_apply_statics   z$ServicePlugin._instance_apply_staticc CsH|jj}|dkr&tjtjddSd}x|jjD]}|jj|d|dj }|r~tj tj d|d|dj fnR|dk rtjtjd|d|dj fd}n"tj tj d|d|dj f|jj |d|}|jj|d} |jd |d|dj| |dkrd}|jd |d|dj||dkr8d}q8W|S) Nzcannot detect runlevelFTrrz'service '%s' configuration '%s' matchesz'service '%s' configuration '%s' differszservice '%s' configuration '%s'z %s runningz %s enabled)rOrr;r@rAZSTR_VERIFY_PROFILE_FAILrdrcrr r<ZSTR_VERIFY_PROFILE_OKZ STR_VERIFY_PROFILE_VALUE_MISSINGr(r'Z _verify_valuerr) r rfZignore_missingZdevicesr retr!Zret_cfg_verifyr(r'r r r _instance_verify_static$s( $""$"z%ServicePlugin._instance_verify_staticcCsLxFt|jjD]4\}}|jr.|jj||j|j||j|j|j qWdS)N) listrercr rOrrirrr )r rfZrollbackrr_r r r _instance_unapply_static<sz&ServicePlugin._instance_unapply_static)rrr__doc__rrSrNrZrgrhrirjrlrAZ ROLLBACK_SOFTrn __classcell__r r )rRr rLs(   rL)r9rraZ tuned.constsrAZ decoratorsr=r5Z tuned.logsZtunedZtuned.utils.commandsrZlogsgetr;rrrr r)r/r0r8ZPluginrLr r r r s"      B