aboutsummaryrefslogtreecommitdiffstats
path: root/lib/AdminPanel/Shared/Services.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/AdminPanel/Shared/Services.pm')
-rw-r--r--lib/AdminPanel/Shared/Services.pm955
1 files changed, 0 insertions, 955 deletions
diff --git a/lib/AdminPanel/Shared/Services.pm b/lib/AdminPanel/Shared/Services.pm
deleted file mode 100644
index abef8c3..0000000
--- a/lib/AdminPanel/Shared/Services.pm
+++ /dev/null
@@ -1,955 +0,0 @@
-# vim: set et ts=4 sw=4:
-package ManaTools::Shared::Services;
-#============================================================= -*-perl-*-
-
-=head1 NAME
-
-ManaTools::Shared::Services - shares the API to manage services
-
-=head1 SYNOPSIS
-
-use ManaTools::Shared::Services;
-
-my $serv = ManaTools::Shared::Services->new();
-
-my ($l, $on_services) = $serv->services();
-
-=head1 DESCRIPTION
-
- This module aims to share all the API to manage system services,
- to be used from GUI applications or console.
-
- From the original code drakx services.
-
-=head1 SUPPORT
-
-You can find documentation for this module with the perldoc command:
-
-perldoc ManaTools::Shared::Services
-
-=head1 SEE ALSO
-
-ManaTools::Shared
-
-=head1 AUTHOR
-
-Angelo Naselli <anaselli@linux.it>
-
-=head1 COPYRIGHT and LICENSE
-
-Copyright (C) 2013-2015, Angelo Naselli.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License version 2, as
-published by the Free Software Foundation.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-=head1 FUNCTIONS
-
-=cut
-
-
-use Moose;
-
-use Sys::Syslog;
-use Net::DBus;
-use Net::DBus::Annotation qw(:auth);
-use File::Basename;
-
-use ManaTools::Shared::Locales;
-use MDK::Common::Func qw(find);
-use MDK::Common::File;
-use MDK::Common::DataStructure qw(member);
-use ManaTools::Shared::RunProgram qw(rooted);
-
-has 'loc' => (
- is => 'rw',
- init_arg => undef,
- builder => '_localeInitialize'
-);
-
-
-sub _localeInitialize {
- my $self = shift();
-
- # TODO fix domain binding for translation
- $self->loc(ManaTools::Shared::Locales->new(domain_name => 'libDrakX') );
- # TODO if we want to give the opportunity to test locally add dir_name => 'path'
-}
-
-
-has 'dbus_systemd1_service' => (
- is => 'rw',
- init_arg => undef,
- lazy => 1,
- builder => '_dbusServiceInitialize'
-);
-
-sub _dbusServiceInitialize {
- my $self = shift();
-
- my $bus = Net::DBus->system;
- $self->dbus_systemd1_service($bus->get_service("org.freedesktop.systemd1"));
-}
-
-
-has 'dbus_systemd1_object' => (
- is => 'rw',
- init_arg => undef,
- lazy => 1,
- builder => '_dbusObjectInitialize'
-);
-
-sub _dbusObjectInitialize {
- my $self = shift();
-
- $self->dbus_systemd1_object($self->dbus_systemd1_service->get_object("/org/freedesktop/systemd1"));
-}
-
-
-has 'service_info' => (
- is => 'rw',
- traits => ['Hash'],
- isa => 'HashRef',
- handles => {
- set_service_info => 'set',
- get_service_info => 'get',
- service_info_pairs => 'kv',
- },
- init_arg => undef,
- lazy => 1,
- builder => '_serviceInfoInitialization'
-);
-
-sub _serviceInfoInitialization {
- my $self = shift();
-
- my %services = ();
- if ($self->_running_systemd()) {
- my $object = $self->dbus_systemd1_object;
- my $properties = $object->ListUnits();
-
- foreach my $s (@{$properties}) {
- my $name = $s->[0];
- if (index($name, ".service") != -1) {
- my $st = eval{$object->GetUnitFileState($name)} if $name !~ /.*\@.*$/g;
- $name =~ s|.service||;
- if (!$st) {
- if ($name !~ /.*\@$/g &&
- (-e "/usr/lib/systemd/system/$name.service" or -e "/etc/rc.d/init.d/$name") &&
- ! -l "/usr/lib/systemd/system/$name.service") {
- $st = 'enabled';
- }
- }
- if ($st && $st ne 'static') {
- $services{$name} = {
- 'name' => $s->[0],
- 'description' => $s->[1],
- 'load_state' => $s->[2],
- 'active_state' => $s->[3],
- 'sub_state' => $s->[4],
- 'unit_path' => $s->[6],
- 'enabled' => $st eq 'enabled',
- };
- }
- }
- }
-
- my $unit_files = $object->ListUnitFiles();
- foreach my $s (@{$unit_files}) {
- my $name = $s->[0];
- my $st = $s->[1];
- if (index($name, ".service") != -1) {
- $name = File::Basename::basename($name, ".service");
- if (!$services{$name} &&
- $name !~ /.*\@$/g &&
- (-e $s->[0] or -e "/etc/rc.d/init.d/$name") &&
- ! -l $s->[0] && ($st eq "disabled" || $st eq "enabled")) {
- my $wantedby = $self->_WantedBy($s->[0]);
- if ($wantedby) {
- my $descr = $self->getUnitProperty($name, 'Description');
-
- $services{$name} = {
- 'name' => $name,
- 'description' => $descr,
- 'enabled' => $st eq "enabled",
- };
- }
- }
- }
- }
- }
-
- return \%services;
-}
-
-#=============================================================
-
-=head2 description
-
-=head3 INPUT
-
-name: Service Name
-
-=head3 OUTPUT
-
-Description: Service description
-
-=head3 DESCRIPTION
-
-THis function return the description for the given service
-
-=cut
-
-#=============================================================
-sub description {
- my ($self, $name) = @_;
-
- my %services = (
-acpid => $self->loc->N_("Listen and dispatch ACPI events from the kernel"),
-alsa => $self->loc->N_("Launch the ALSA (Advanced Linux Sound Architecture) sound system"),
-anacron => $self->loc->N_("Anacron is a periodic command scheduler."),
-apmd => $self->loc->N_("apmd is used for monitoring battery status and logging it via syslog.
-It can also be used for shutting down the machine when the battery is low."),
-atd => $self->loc->N_("Runs commands scheduled by the at command at the time specified when
-at was run, and runs batch commands when the load average is low enough."),
-'avahi-deamon' => $self->loc->N_("Avahi is a ZeroConf daemon which implements an mDNS stack"),
-chronyd => $self->loc->N_("An NTP client/server"),
-cpufreq => $self->loc->N_("Set CPU frequency settings"),
-crond => $self->loc->N_("cron is a standard UNIX program that runs user-specified programs
-at periodic scheduled times. vixie cron adds a number of features to the basic
-UNIX cron, including better security and more powerful configuration options."),
-cups => $self->loc->N_("Common UNIX Printing System (CUPS) is an advanced printer spooling system"),
-dm => $self->loc->N_("Launches the graphical display manager"),
-fam => $self->loc->N_("FAM is a file monitoring daemon. It is used to get reports when files change.
-It is used by GNOME and KDE"),
-g15daemon => $self->loc->N_("G15Daemon allows users access to all extra keys by decoding them and
-pushing them back into the kernel via the linux UINPUT driver. This driver must be loaded
-before g15daemon can be used for keyboard access. The G15 LCD is also supported. By default,
-with no other clients active, g15daemon will display a clock. Client applications and
-scripts can access the LCD via a simple API."),
-gpm => $self->loc->N_("GPM adds mouse support to text-based Linux applications such the
-Midnight Commander. It also allows mouse-based console cut-and-paste operations,
-and includes support for pop-up menus on the console."),
-haldaemon => $self->loc->N_("HAL is a daemon that collects and maintains information about hardware"),
-harddrake => $self->loc->N_("HardDrake runs a hardware probe, and optionally configures
-new/changed hardware."),
-httpd => $self->loc->N_("Apache is a World Wide Web server. It is used to serve HTML files and CGI."),
-inet => $self->loc->N_("The internet superserver daemon (commonly called inetd) starts a
-variety of other internet services as needed. It is responsible for starting
-many services, including telnet, ftp, rsh, and rlogin. Disabling inetd disables
-all of the services it is responsible for."),
-ip6tables => $self->loc->N_("Automates a packet filtering firewall with ip6tables"),
-iptables => $self->loc->N_("Automates a packet filtering firewall with iptables"),
-irqbalance => $self->loc->N_("Evenly distributes IRQ load across multiple CPUs for enhanced performance"),
-keytable => $self->loc->N_("This package loads the selected keyboard map as set in
-/etc/sysconfig/keyboard. This can be selected using the kbdconfig utility.
-You should leave this enabled for most machines."),
-kheader => $self->loc->N_("Automatic regeneration of kernel header in /boot for
-/usr/include/linux/{autoconf,version}.h"),
-kudzu => $self->loc->N_("Automatic detection and configuration of hardware at boot."),
-'laptop-mode' => $self->loc->N_("Tweaks system behavior to extend battery life"),
-linuxconf => $self->loc->N_("Linuxconf will sometimes arrange to perform various tasks
-at boot-time to maintain the system configuration."),
-lpd => $self->loc->N_("lpd is the print daemon required for lpr to work properly. It is
-basically a server that arbitrates print jobs to printer(s)."),
-lvs => $self->loc->N_("Linux Virtual Server, used to build a high-performance and highly
-available server."),
-mandi => $self->loc->N_("Monitors the network (Interactive Firewall and wireless"),
-mdadm => $self->loc->N_("Software RAID monitoring and management"),
-messagebus => $self->loc->N_("DBUS is a daemon which broadcasts notifications of system events and other messages"),
-msec => $self->loc->N_("Enables MSEC security policy on system startup"),
-named => $self->loc->N_("named (BIND) is a Domain Name Server (DNS) that is used to resolve host names to IP addresses."),
-netconsole => $self->loc->N_("Initializes network console logging"),
-netfs => $self->loc->N_("Mounts and unmounts all Network File System (NFS), SMB (Lan
-Manager/Windows), and NCP (NetWare) mount points."),
-network => $self->loc->N_("Activates/Deactivates all network interfaces configured to start
-at boot time."),
-'network-auth' => $self->loc->N_("Requires network to be up if enabled"),
-'network-up' => $self->loc->N_("Wait for the hotplugged network to be up"),
-nfs => $self->loc->N_("NFS is a popular protocol for file sharing across TCP/IP networks.
-This service provides NFS server functionality, which is configured via the
-/etc/exports file."),
-nfslock => $self->loc->N_("NFS is a popular protocol for file sharing across TCP/IP
-networks. This service provides NFS file locking functionality."),
-ntpd => $self->loc->N_("Synchronizes system time using the Network Time Protocol (NTP)"),
-numlock => $self->loc->N_("Automatically switch on numlock key locker under console
-and Xorg at boot."),
-oki4daemon => $self->loc->N_("Support the OKI 4w and compatible winprinters."),
-partmon => $self->loc->N_("Checks if a partition is close to full up"),
-pcmcia => $self->loc->N_("PCMCIA support is usually to support things like ethernet and
-modems in laptops. It will not get started unless configured so it is safe to have
-it installed on machines that do not need it."),
-portmap => $self->loc->N_("The portmapper manages RPC connections, which are used by
-protocols such as NFS and NIS. The portmap server must be running on machines
-which act as servers for protocols which make use of the RPC mechanism."),
-portreserve => $self->loc->N_("Reserves some TCP ports"),
-postfix => $self->loc->N_("Postfix is a Mail Transport Agent, which is the program that moves mail from one machine to another."),
-random => $self->loc->N_("Saves and restores system entropy pool for higher quality random
-number generation."),
-rawdevices => $self->loc->N_("Assign raw devices to block devices (such as hard disk drive
-partitions), for the use of applications such as Oracle or DVD players"),
-resolvconf => $self->loc->N_("Nameserver information manager"),
-routed => $self->loc->N_("The routed daemon allows for automatic IP router table updated via
-the RIP protocol. While RIP is widely used on small networks, more complex
-routing protocols are needed for complex networks."),
-rstatd => $self->loc->N_("The rstat protocol allows users on a network to retrieve
-performance metrics for any machine on that network."),
-rsyslog => $self->loc->N_("Syslog is the facility by which many daemons use to log messages to various system log files. It is a good idea to always run rsyslog."),
-rusersd => $self->loc->N_("The rusers protocol allows users on a network to identify who is
-logged in on other responding machines."),
-rwhod => $self->loc->N_("The rwho protocol lets remote users get a list of all of the users
-logged into a machine running the rwho daemon (similar to finger)."),
-saned => $self->loc->N_("SANE (Scanner Access Now Easy) enables to access scanners, video cameras, ..."),
-shorewall => $self->loc->N_("Packet filtering firewall"),
-smb => $self->loc->N_("The SMB/CIFS protocol enables to share access to files & printers and also integrates with a Windows Server domain"),
-sound => $self->loc->N_("Launch the sound system on your machine"),
-'speech-dispatcherd' => $self->loc->N_("layer for speech analysis"),
-sshd => $self->loc->N_("Secure Shell is a network protocol that allows data to be exchanged over a secure channel between two computers"),
-syslog => $self->loc->N_("Syslog is the facility by which many daemons use to log messages
-to various system log files. It is a good idea to always run syslog."),
-'udev-post' => $self->loc->N_("Moves the generated persistent udev rules to /etc/udev/rules.d"),
-usb => $self->loc->N_("Load the drivers for your usb devices."),
-vnStat => $self->loc->N_("A lightweight network traffic monitor"),
-xfs => $self->loc->N_("Starts the X Font Server."),
-xinetd => $self->loc->N_("Starts other deamons on demand."),
- );
-
- my $s = $services{$name};
- if ($s) {
- $s = $self->loc->N($s);
- }
- elsif ($self->get_service_info($name)) {
- $s = $self->get_service_info($name)->{description};
- }
- else {
- my $file = "/usr/lib/systemd/system/$name.service";
- if (-e $file) {
- $s = MDK::Common::File::cat_($file);
- $s = $s =~ /^Description=(.*)/mg ? $1 : '';
- } else {
- $file = MDK::Common::Func::find { -e $_ } map { "$_/$name" } '/etc/rc.d/init.d', '/etc/init.d', '/etc/xinetd.d';
- $s = MDK::Common::File::cat_($file);
- $s =~ s/\\\s*\n#\s*//mg;
- $s =
- $s =~ /^#\s+(?:Short-)?[dD]escription:\s+(.*?)^(?:[^#]|# {0,2}\S)/sm ? $1 :
- $s =~ /^#\s*(.*?)^[^#]/sm ? $1 : '';
-
- $s =~ s/#\s*//mg;
- }
- }
- $s =~ s/\n/ /gm; $s =~ s/\s+$//;
- $s;
-}
-
-
-#=============================================================
-
-=head2 set_service
-
-=head3 INPUT
-
- $service: Service name
- $enable: enable/disable service
-
-=head3 DESCRIPTION
-
- This function enable/disable at boot the given service
-
-=cut
-
-#=============================================================
-sub set_service {
- my ($self, $service, $enable) = @_;
-
- my @xinetd_services = map { $_->[0] } $self->xinetd_services();
-
- if (MDK::Common::DataStructure::member($service, @xinetd_services)) {
- $ENV{PATH} = "/usr/bin:/usr/sbin";
- ManaTools::Shared::RunProgram::rooted("", "/usr/sbin/chkconfig", $enable ? "--add" : "--del", $service);
- } elsif ($self->_running_systemd() || $self->_has_systemd()) {
- $service = $service . ".service";
- my $dbus_object = $self->dbus_systemd1_object;
- if ($enable) {
- $dbus_object->EnableUnitFiles(dbus_auth_interactive, [$service], 0, 1);
- }
- else {
- $dbus_object->DisableUnitFiles(dbus_auth_interactive, [$service], 0);
- }
- # reload local cache
- $self->_systemd_services(1);
- } else {
- my $script = "/etc/rc.d/init.d/$service";
- $ENV{PATH} = "/usr/bin:/usr/sbin";
- ManaTools::Shared::RunProgram::rooted("", "/usr/sbin/chkconfig", $enable ? "--add" : "--del", $service);
- #- FIXME: handle services with no chkconfig line and with no Default-Start levels in LSB header
- if ($enable && MDK::Common::File::cat_("$script") =~ /^#\s+chkconfig:\s+-/m) {
- $ENV{PATH} = "/usr/bin:/usr/sbin";
- ManaTools::Shared::RunProgram::rooted("", "/usr/sbin/chkconfig", "--level", "35", $service, "on");
- }
- }
-}
-
-sub _run_action {
- my ($self, $service, $action) = @_;
- if ($self->_running_systemd()) {
- my $object = $self->dbus_systemd1_object;
- if ($action eq 'start') {
- $object->StartUnit(dbus_auth_interactive, "$service.service", 'fail');
- }
- elsif ($action eq 'stop') {
- $object->StopUnit(dbus_auth_interactive, "$service.service", 'fail');
- }
- else {
- $object->RestartUnit(dbus_auth_interactive, "$service.service", 'fail');
- }
- # reload local cache
- $self->_systemd_services(1);
- } else {
- $ENV{PATH} = "/usr/bin:/usr/sbin:/etc/rc.d/init.d/";
- ManaTools::Shared::RunProgram::rooted("", "/etc/rc.d/init.d/$service", $action);
- }
-}
-
-sub _running_systemd {
- my $self = shift;
-
- $ENV{PATH} = "/usr/bin:/usr/sbin";
- ManaTools::Shared::RunProgram::rooted("", '/usr/bin/mountpoint', '-q', '/sys/fs/cgroup/systemd');
-}
-
-sub _has_systemd {
- my $self = shift;
-
- $ENV{PATH} = "/usr/bin:/usr/sbin";
- ManaTools::Shared::RunProgram::rooted("", '/usr/bin/rpm', '-q', 'systemd');
-}
-
-#=============================================================
-
-=head2 xinetd_services
-
-=head3 OUTPUT
-
- xinetd_services: All the xinetd services
-
-=head3 DESCRIPTION
-
- This functions returns all the xinetd services in the system.
- NOTE that xinetd *must* be enable at boot to get this info
-
-=cut
-
-#=============================================================
-sub xinetd_services {
- my $self = shift;
-
- my @xinetd_services = ();
-
- #avoid warning if xinetd is not installed and either enabled
- my $ser_info = $self->get_service_info('xinetd');
- if ($ser_info && $ser_info->{enabled} eq "1") {
- local $ENV{LANGUAGE} = 'C';
- $ENV{PATH} = "/usr/bin:/usr/sbin";
- foreach (ManaTools::Shared::RunProgram::rooted_get_stdout("", '/usr/sbin/chkconfig', '--list', '--type', 'xinetd')) {
- if (my ($xinetd_name, $on_off) = m!^\t(\S+):\s*(on|off)!) {
- push @xinetd_services, [ $xinetd_name, $on_off eq 'on' ];
- }
- }
- }
- return @xinetd_services;
-}
-
-sub _systemd_services {
- my ($self, $reload) = @_;
-
- if ($reload) {
- $self->service_info($self->_serviceInfoInitialization());
- }
-
- my @services;
- for my $pair ( $self->service_info_pairs) {
- my $name = $pair->[0];
- my $info = $pair->[1];
- push @services, [$name, $info->{'enabled'}];
- }
-
- return @services;
-
-}
-
-sub _legacy_services {
- my $self = shift;
-
- local $ENV{LANGUAGE} = 'C';
- my @services;
- my $has_systemd = $self->_has_systemd();
- if ($has_systemd) {
- # The system not using systemd but will be at next boot. This is
- # is typically the case in the installer. In this mode we must read
- # as much as is practicable from the native systemd unit files and
- # combine that with information from chkconfig regarding legacy sysvinit
- # scripts (which systemd will parse and include when running)
- Sys::Syslog::syslog('info|local1', "Detected systemd installed. Using fake service+chkconfig introspection.");
- foreach (glob_("/usr/lib/systemd/system/*.service")) {
- my ($name) = m!([^/]*).service$!;
-
- # We only look at non-template, non-symlinked service files
- if (!(/.*\@\.service$/g) && ! -l $_) {
- # Limit ourselves to "standard" targets
- my $wantedby = MDK::Common::File::cat_($_) =~ /^WantedBy=(graphical|multi-user).target$/sm ? $1 : '';
- if ($wantedby) {
- # Exclude if enabled statically
- # Note DO NOT use -e when testing for files that could
- # be symbolic links as this will fail under a chroot
- # setup where -e will fail if the symlink target does
- # exist which is typically the case when viewed outside
- # of the chroot.
- if (!-l "/usr/lib/systemd/system/$wantedby.target.wants/$name.service") {
- push @services, [ $name, !!-l "/etc/systemd/system/$wantedby.target.wants/$name.service" ];
- }
- }
- }
- }
- } else {
- Sys::Syslog::syslog('info|local1', "Could not detect systemd. Using chkconfig service introspection.");
- }
-
- # Regardless of whether we expect to use systemd on next boot, we still
- # need to instrospect information about non-systemd native services.
- my $runlevel;
- my $on_off;
- if (!$::isInstall) {
- $runlevel = (split " ", `/sbin/runlevel`)[1];
- }
- foreach (ManaTools::Shared::RunProgram::rooted_get_stdout("", '/sbin/chkconfig', '--list', '--type', 'sysv')) {
- if (my ($name, $l) = m!^(\S+)\s+(0:(on|off).*)!) {
- # If we expect to use systemd (i.e. installer) only show those
- # sysvinit scripts which are not masked by a native systemd unit.
- my $has_systemd_unit = $self->_systemd_unit_exists($name);
- if (!$has_systemd || !$has_systemd_unit) {
- if ($::isInstall) {
- $on_off = $l =~ /\d+:on/g;
- } else {
- $on_off = $l =~ /$runlevel:on/g;
- }
- push @services, [ $name, $on_off ];
- }
- }
- }
- @services;
-}
-
-#- returns:
-#--- the listref of installed services
-#--- the listref of "on" services
-#=============================================================
-
-=head2 services
-
-=head3 INPUT
-
- $reload: load service again
-
-=head3 OUTPUT
-
- @l: all the system services
- @on_services: all the services that start at boot
-
-=head3 DESCRIPTION
-
- This function returns two lists, all the system service and
- all the active ones.
-
-=cut
-
-#=============================================================
-
-
-sub services {
- my ($self, $reload) = @_;
-
- my @Services;
- if ($self->_running_systemd()) {
- @Services = $self->_systemd_services($reload);
- } else {
- @Services = $self->_legacy_services();
- }
-
- my @l = $self->xinetd_services();
- push @l, @Services;
- @l = sort { $a->[0] cmp $b->[0] } @l;
- [ map { $_->[0] } @l ], [ map { $_->[0] } grep { $_->[1] } @l ];
-}
-
-
-# if we loaded service info, then exists
-sub _systemd_unit_exists {
- my ($self, $name) = @_;
-
- return defined ($self->get_service_info($name));
-}
-
-#=============================================================
-
-=head2 service_exists
-
-=head3 INPUT
-
- $service: Service name
-
-=head3 OUTPUT
-
- 0/1: if the service exists
-
-=head3 DESCRIPTION
-
- This function checks if a service is installed by looking for
- its unit or init.d service
-
-=cut
-
-#=============================================================
-
-sub service_exists {
- my ($self, $service) = @_;
- $self->_systemd_unit_exists($service) or -x "/etc/rc.d/init.d/$service";
-}
-
-#=============================================================
-
-=head2 restart
-
-=head3 INPUT
-
- $service: Service to restart
-
-=head3 DESCRIPTION
-
- This function restarts a given service
-
-=cut
-
-#=============================================================
-
-
-sub restart {
- my ($self, $service) = @_;
- # Exit silently if the service is not installed
- $self->service_exists($service) or return 1;
- $self->_run_action($service, "restart");
-}
-
-#=============================================================
-
-=head2 restart_or_start
-
-=head3 INPUT
-
- $service: Service to restart or start
-
-=head3 DESCRIPTION
-
- This function starts a given service if it is not running,
- it restarts that otherwise
-
-=cut
-
-#=============================================================
-
-sub restart_or_start {
- my ($self, $service) = @_;
- # Exit silently if the service is not installed
- $self->service_exists($service) or return 1;
- $self->_run_action($service, $self->is_service_running($service) ? "restart" : "start");
-}
-
-
-#=============================================================
-
-=head2 startService
-
-=head3 INPUT
-
- $service: Service to start
-
-=head3 DESCRIPTION
-
- This function starts a given service
-
-=cut
-
-#=============================================================
-
-sub startService {
- my ($self, $service) = @_;
- # Exit silently if the service is not installed
- $self->service_exists($service) or return 1;
- $self->_run_action($service, "start");
-}
-
-#=============================================================
-
-=head2 start_not_running_service
-
-=head3 INPUT
-
- $service: Service to start
-
-=head3 DESCRIPTION
-
- This function starts a given service if not running
-
-=cut
-
-#=============================================================
-
-sub start_not_running_service {
- my ($self, $service) = @_;
- # Exit silently if the service is not installed
- $self->service_exists($service) or return 1;
- $self->is_service_running($service) || $self->_run_action($service, "start");
-}
-
-#=============================================================
-
-=head2 stopService
-
-=head3 INPUT
-
- $service: Service to stop
-
-=head3 DESCRIPTION
-
- This function stops a given service
-
-=cut
-
-#=============================================================
-sub stopService {
- my ($self, $service) = @_;
- # Exit silently if the service is not installed
- $self->service_exists($service) or return 1;
- $self->_run_action($service, "stop");
-}
-
-#=============================================================
-
-=head2 is_service_running
-
-=head3 INPUT
-
- $service: Service to check
-
-=head3 DESCRIPTION
-
- This function returns if the given service is running
-
-=cut
-
-#=============================================================
-
-sub is_service_running {
- my ($self, $service) = @_;
- # Exit silently if the service is not installed
- $self->service_exists($service) or return 0;
- my $out;
- if ($self->_running_systemd()) {
- my $ser_info = $self->get_service_info($service);
- $out = $ser_info->{active_state} eq 'active' if $ser_info->{active_state};
- } else {
- $ENV{PATH} = "/usr/bin:/usr/sbin";
- $out = ManaTools::Shared::RunProgram::rooted("", '/usr/sbin/service', $service, 'status');
- }
- return $out;
-}
-
-#=============================================================
-
-=head2 starts_on_boot
-
-=head3 INPUT
-
- $service: Service name
-
-
-=head3 DESCRIPTION
-
- This function returns if the given service starts at boot
-
-=cut
-
-#=============================================================
-sub starts_on_boot {
- my ($self, $service) = @_;
- my (undef, $on_services) = $self->services();
- MDK::Common::DataStructure::member($service, @$on_services);
-}
-
-#=============================================================
-
-=head2 start_service_on_boot
-
-=head3 INPUT
-
- $service: Service name
-
-
-=head3 DESCRIPTION
-
- This function set the given service active at boot
-
-=cut
-
-#=============================================================
-sub start_service_on_boot {
- my ($self, $service) = @_;
- $self->set_service($service, 1);
-}
-
-#=============================================================
-
-=head2 do_not_start_service_on_boot
-
-=head3 INPUT
-
- $service: Service name
-
-
-=head3 DESCRIPTION
-
- This function set the given service disabled at boot
-
-=cut
-
-#=============================================================
-sub do_not_start_service_on_boot {
- my ($self, $service) = @_;
- $self->set_service($service, 0);
-}
-
-#=============================================================
-
-=head2 enable
-
-=head3 INPUT
-
- $service: Service name
- $o_dont_apply: do not start it now
-
-=head3 DESCRIPTION
-
- This function set the given service active at boot
- and restarts it if o_dont_apply is not given
-
-=cut
-
-#=============================================================
-sub enable {
- my ($self, $service, $o_dont_apply) = @_;
- $self->start_service_on_boot($service);
- $self->restart_or_start($service) unless $o_dont_apply;
-}
-
-#=============================================================
-
-=head2 disable
-
-=head3 INPUT
-
- $service: Service name
- $o_dont_apply: do not stop it now
-
-=head3 DESCRIPTION
-
- This function set the given service disabled at boot
- and stops it if o_dont_apply is not given
-
-=cut
-
-#=============================================================
-sub disable {
- my ($self, $service, $o_dont_apply) = @_;
- $self->do_not_start_service_on_boot($service);
- $self->stopService($service) unless $o_dont_apply;
-}
-
-#=============================================================
-
-=head2 set_status
-
-=head3 INPUT
-
- $service: Service name
- $enable: Enable/disable
- $o_dont_apply: do not start it now
-
-=head3 DESCRIPTION
-
- This function set the given service to enable/disable at boot
- and restarts/stops it if o_dont_apply is not given
-
-=cut
-
-#=============================================================
-sub set_status {
- my ($self, $service, $enable, $o_dont_apply) = @_;
- if ($enable) {
- $self->enable($service, $o_dont_apply);
- } else {
- $self->disable($service, $o_dont_apply);
- }
-}
-
-# NOTE $service->get_object("/org/freedesktop/systemd1/unit/$name_2eservice");
-# has empty WantedBy property if disabled
-sub _WantedBy {
- my ($self, $path_service) = @_;
-
- my $wantedby = MDK::Common::File::cat_($path_service) =~ /^WantedBy=(graphical|multi-user).target$/sm ? $1 : '';
-
- return $wantedby;
-}
-
-#=============================================================
-
-=head2 getUnitProperty
-
-=head3 INPUT
-
- $unit: unit name
- $property: property name
-
-=head3 OUTPUT
-
- $property_value: property value
-
-=head3 DESCRIPTION
-
- This method returns the requested property value
-
-=cut
-
-#=============================================================
-sub getUnitProperty {
- my ($self, $unit, $property) = @_;
-
- my $name = $unit . ".service";
- $name =~ s|-|_2d|g;
- $name =~ s|\.|_2e|g;
- my $service = $self->dbus_systemd1_service;
- my $unit_object = $service->get_object("/org/freedesktop/systemd1/unit/" . $name);
- my $property_value = eval {$unit_object->Get("org.freedesktop.systemd1.Unit", $property)} || "";
-
- return $property_value;
-}
-
-1;