e-smith-base/root/sbin/e-smith/console-menu-items/reboot.pl

81 lines
2.3 KiB
Perl
Executable File

package esmith::console::reboot;
use strict;
use warnings;
use esmith::console;
use Locale::gettext;
sub new
{
my $class = shift;
my $self = {
name => gettext("Reboot, reconfigure or shut down this server"),
order => 40,
};
bless $self, $class;
return $self;
}
sub name
{
return $_[0]->{name};
}
sub order
{
return $_[0]->{order};
}
sub doit
{
#------------------------------------------------------------
# REBOOT_SHUTDOWN:
#------------------------------------------------------------
my ($self, $console, $db) = @_;
my @args =
(
gettext("Reboot"), gettext("Reboot this server"),
gettext("Reconfigure"), gettext("Reconfigure this server"),
gettext("Shutdown"), gettext("Shutdown this server"),
);
my ($rc, $choice) = $console->menu_page
(
title => gettext("Reboot, reconfigure or shutdown this server"),
text =>
gettext("Please select whether you wish to reboot, reconfigure or shutdown. The process will start as soon as you make your selection.") .
"\n\n" .
gettext("If you have an older computer without power management, the shutdown process will perform a clean halt of all system services, but will not actually power off your computer. In this case, wait for the power down message and then shut off the power manually.") .
"\n\n" .
gettext("If you have changed your mind and do not want to reboot or shutdown, use the Tab key to select Cancel, then press Enter."),
argsref => \@args,
left => gettext("Cancel"),
right => gettext("OK"),
);
return unless ($rc == 0);
if ($choice eq gettext('Shutdown'))
{
system("/usr/bin/tput", "clear");
system("/sbin/e-smith/signal-event", "halt");
}
elsif ($choice eq gettext('Reboot'))
{
system("/usr/bin/tput", "clear");
system("/sbin/e-smith/signal-event", "reboot");
}
elsif ($choice eq gettext('Reconfigure'))
{
system("/usr/bin/tput", "clear");
system("/sbin/e-smith/signal-event", "post-upgrade");
system("/sbin/e-smith/signal-event", "reboot");
}
# A bit of a hack to avoid the console restarting before the
# reboot takes effect.
sleep(600);
}
return new esmith::console::reboot;