# Copyright (c) 2007 - OpenSLX GmbH # # This program is free software distributed under the GPL version 2. # See http://openslx.org/COPYING # # If you have any feedback please consult http://openslx.org/feedback and # send your suggestions, praise, or complaints to feedback@openslx.org # # General information about OpenSLX can be found at http://openslx.org/ # ----------------------------------------------------------------------------- # sysrqshutdown.pm # - implementation of the 'sysrqshutdow' plugin, which replaces the shutdown # binary through a SYSRQ shutdown script # ----------------------------------------------------------------------------- package OpenSLX::OSPlugin::sysrqshutdown; use strict; use warnings; use base qw(OpenSLX::OSPlugin::Base); use File::Path; use OpenSLX::Basics; use OpenSLX::Utils; sub new { my $class = shift; my $self = { name => 'sysrqshutdown', }; return bless $self, $class; } sub getInfo { my $self = shift; return { description => unshiftHereDoc(<<' End-of-Here'), Replaces the shutdown binary through a SYSRQ shutdown script End-of-Here precedence => 10, }; } sub getAttrInfo { my $self = shift; return { 'sysrqshutdown::active' => { applies_to_systems => 1, applies_to_clients => 1, description => unshiftHereDoc(<<' End-of-Here'), should the 'sysrqshutdown'-plugin be activated? End-of-Here content_regex => qr{^(0|1)$}, content_descr => '1 means active - 0 means inactive', default => '1', }, }; } sub installationPhase { my $self = shift; my $info = shift; my $openslxBasePath = $info->{'openslx-base-path'}; my $pluginName = $self->{'name'}; my $pluginBasePath = "$openslxBasePath/lib/plugins/$pluginName/files"; # copy files if (! -e "/sbin/shutdown.slxorig") { system("mv /sbin/shutdown /sbin/shutdown.slxorig"); system("cp -p $pluginBasePath/shutdown /sbin/; cp -p $pluginBasePath/shutdown /opt/openslx/plugin-repo/$pluginName"); chmod 0755, "/sbin/shutdown"; } # else assume reinstall elsif (-e "/sbin/shutdown.slxorig") { system("cp -p $pluginBasePath/shutdown /sbin/"); chmod 0755, "/sbin/shutdown"; } return; } sub removalPhase { my $self = shift; my $info = shift; if (-e "/sbin/shutdown.slxorig") { system("mv /sbin/shutdown.slxorig /sbin/shutdown"); } return; } 1;