diff options
Diffstat (limited to 'perl-install/standalone/drakups')
-rwxr-xr-x | perl-install/standalone/drakups | 385 |
1 files changed, 0 insertions, 385 deletions
diff --git a/perl-install/standalone/drakups b/perl-install/standalone/drakups deleted file mode 100755 index 9f55af292..000000000 --- a/perl-install/standalone/drakups +++ /dev/null @@ -1,385 +0,0 @@ -#!/usr/bin/perl - -use strict; -use lib qw(/usr/lib/libDrakX); -use standalone; -use common; -use mouse; -use detect_devices; -use ugtk2 qw(:create :dialogs :helpers :wrappers); -use interactive; -use Libconf qw(:functions); -use Libconf::Glueconf::NUT::Ups_conf; - -# config files: -my %files = (devices => "/etc/ups/ups.conf", - access => "/etc/ups/upsd.conf", - users => "/etc/ups/upsd.users", - ); - - -my ($struct, $users); # NUT configuration -my ($w, $in); # GUI -my %indexes; - - -sub writeconf { - info_dialog(N("Warning"), "Write support for users is incomplete\n\nIt lacks some support for some extra fields that would be lost else"); - log::explanations("Updating NUT configuration accordingly"); - $struct->writeConf($files{devices}); - - log::explanations("Updating NUT users configuration accordingly"); - $users->writeConf($files{users}); -} - -sub readDriversList { - my (%ups, @ups); - local $_; - foreach (cat_(first(glob("/usr/share/doc/nut-*/docs/driver.list")))) { - /^#/ and next; - if (my ($vendor, $model, $extra, $driver) = /^"(.*)"\s+"(.*)"\s+"(.*)"\s+"(.*)"/) { - $ups{$vendor}{$model} = { - driver => $driver, - extra => $extra, - }; - push @ups, "$vendor|$model"; - } - } - \%ups, \@ups; -} - -sub add_device_wizard { - my ($in, $config) = @_; - my ($ups_models, $model_list) = readDriversList(); - - use wizards; - my ($ups, $vendor, $model, $name, $driver, $port, @new_devices); - my $w = wizards->new; - my $wiz; - my %methods = ( - # network => N("Connected through the network"), # need SNMP probe - # serial => N("Connected through a serial port"), - # usb => N("Connected through an usb cable"), - auto => N("Connected through a serial port or an usb cable"), - manual => N("Manual configuration"), - ); - my $method = $methods{manual}; - $wiz = { - #defaultimage => "logdrake.png", # FIXME - name => N("Add an UPS device"), - pages => { - welcome => { - name => N("Welcome to the UPS configuration utility. - -Here, you'll be add a new UPS to your system.\n"), - no_back => 1, - next => 'method' - }, - method => { - name => N("We're going to add an UPS device. - -Do you prefer autodetect UPS devices connected to this machine or ?"), - data => [ { label => N("Autodetection"), val => \$method, type => "list", - list => [ values %methods ] } ], - post => sub { +{ reverse %methods }->{$method} }, - }, - auto => { - end => 1, - pre => sub { - local $::isWizard; - my $wait = $in->wait_message(N("Please wait"), N("Detection in progress")); - # UPS autoconfig: - detect_devices::probeSerialDevices() if !$::testing; - @new_devices = (); - - foreach my $ups_device (detect_devices::getUPS()) { - my $str = $ups_device->{name} || $ups_device->{DESCRIPTION}; - $str =~ s/ /_/g; - - if (!exists $struct->{$str}) { - $struct->{$str}{port} = $ups_device->{port} || $ups_device->{DEVICE}; - $struct->{$str}{driver} = $ups_device->{driver}; - push @new_devices, $str; - } - } - }, - name => sub { - if (@new_devices) { - N("Congratulations") . "\n\n" . - N("The wizard successfully added the following UPS devices:", join("\n\n-", @new_devices)) - } else { - N("No new UPS devices was found"); - } - }, - }, - manual => { - name => N("UPS driver configuration") . "\n\n" . N("Please select your UPS model."), - data => [ { label => N("Manufacturer / Model:"), val => \$ups, list => $model_list, - type => 'combo', sort => 1, separator => '|' }, ], - post => sub { - ($vendor, $model) = split(/\|/, $ups); - ($name, $driver, $port) = ("myups", $ups_models->{$vendor}{$model}{driver}, ""); - ($driver) = split(/\s*/, $driver); - "driver"; - }, - }, - driver => { - name => sub { - N("UPS driver configuration") . "\n\n" . N("We are configuring the \"%s\" UPS from \"%s\". -Please fill in its name, its driver and its port.", $model, $vendor); - }, - data => sub { - [ - { label => N("Name:"), val => \$name, help => N("The name of your ups") }, - { label => N("Driver:"), val => \$driver, help => N("The driver that manage your ups") }, - { label => N("Port:"), val => \$port, format => \&mouse::serial_port2text, type => "combo", - list => [ &mouse::serial_ports() ], not_edit => 0, - help => N("The port on which is connected your ups") }, - ]; - }, - next => "end", - }, - end => { - name => sub { - N("Congratulations") . "\n\n" . N("The wizard successfully configured the new \"%s\" UPS device.", - $model . "|" . $vendor); - }, - end => 1, - no_back => 1, - next => 0 - }, - }, - }; - $w->process($wiz, $in); - - $config->{$name}{driver} = $driver; - $config->{$name}{port} = $port; - - log::explanations(qq(Configuring "$name" UPS)); -} - -my (@acls, @rules); - -sub load_access_conf() { - foreach (cat_($files{access})) { - s/#.*//; - if (/^\s*ACL\s*(\S*)\s*(\S*)/) { - my ($ip, $mask) = split('/', $2); - push @acls, [ $1, $ip, $mask ]; - } elsif (/^\s*ACCESS\s*(\S*)\s*(\S*)\s*(\S*)/) { - push @rules, [ $1, $2, $3 ]; - } - } -} - - - -#------------------------------------------------------------------ -# misc gui data - -sub edit_row { - my ($model, $iter) = @_; - # create new item if needed (that is when adding a new one) at end of list - $iter ||= $model->append; - my $dialog = Gtk2::Dialog->new; - $dialog->set_transient_for($w->{rwindow}) unless $::isEmbedded; - $dialog->set_modal(1); - - gtkpack_($dialog->vbox, - #map { - #} - ); - - gtkadd($dialog->action_area, - gtksignal_connect(Gtk2::Button->new(N("Ok")), clicked => sub { - # create new item if needed (that is when adding a new one) at end of list - $iter ||= $model->append; - # $model->set($iter, 1 => $file->get_text); # FILL ME - $dialog->destroy; - # $modified++; - }), - gtksignal_connect(Gtk2::Button->new(N("Cancel")), clicked => sub { $dialog->destroy }), - ); - - $dialog->show_all; - -} - - -sub add_callback() { - my ($model, $list, $getindex) = @_; - edit_row($model); -} - -sub edit_callback() { - my ($model, $list) = @_; - my ($iter) = $list->get_selection->get_selected; - return unless $iter; - edit_row($model, $iter); -} - -sub del_callback() { - my ($model, $list) = @_; - my (undef, $iter) = $list->get_selection->get_selected; - my $removed_idx = $list->get($iter, 0); # 1st column is index - #@rules = grep { $_->{index} ne $removed_idx } @rules; - #$tree->remove($iter); - #sensitive_buttons(0); - #$modified++; -} - -my @pages = ( - { name => N("UPS devices"), - columns => [ N("Name"), N("Driver"), N("Port") ], # N("Manufacturer"), N("Model"), - callbacks => { - add => sub { - eval { add_device_wizard($in, $struct) }; - my $err = $@; - die $err if $err && $err !~ /wizcancel/; - $::WizardWindow->destroy if defined $::WizardWindow; - undef $::WizardWindow; - }, - edit => sub { }, - remove => sub { }, - }, - load => sub { - $struct = Libconf::Glueconf::NUT::Ups_conf->new($files{devices}); - map { [ $_, @{$struct->{$_}}{qw(driver port)} ] } keys %$struct; - }, - }, - { name => N("UPS users"), - columns => [ N("Name") ], - callbacks => { - add => sub { - my ($name) = @_; - $users->{$name} = {}; - }, - edit => sub { }, - remove => sub { }, - }, - load => sub { - $users = Libconf::Glueconf::NUT::Ups_conf->new($files{users}); - map { [ $_ ] } keys %$users; - }, - }, - { name => N("Access Control Lists"), - columns => [ N("Name"), N("IP address"), N("IP mask") ], - callbacks => { - add => sub { }, - edit => sub { }, - remove => sub { }, - }, - load => sub { - load_access_conf(); - @acls; - }, - }, - { name => N("Rules"), - columns => [ N("Action"), N("Level"), N("ACL name"), N("Password") ], - callbacks => { - N("Add") => sub { }, - N("Edit") => sub { }, - N("Remove") => sub { }, - }, - - load => sub { @rules }, # already loaded when we loaded acls - }, - ); - - -#------------------------------------------------------------------ -# initialize: - -#$in = 'interactive'->vnew('su'); # require_root_capability(); -$in = 'interactive'->vnew; - -$ugtk2::wm_icon = "drakups"; -$w = ugtk2->new(N("DrakUPS")); -if (!$::isEmbedded) { - $::main_window = $w->{rwindow}; - $w->{window}->set_size_request(500, 550); - $w->{rwindow}->set_title(N("DrakUPS")); -} - -#------------------------------------------------------------------ -# main window: - -my $_msg = N("Welcome to the UPS configuration tools"); - -$w->{window}->add(gtkpack_(Gtk2::VBox->new, - 0, Gtk2::Banner->new('drakups', N("DrakUPS")), - 1, my $nb = Gtk2::Notebook->new, - 0, create_okcancel( my $oc = - { - ok_clicked => sub { - #$_->{save}->() foreach @pages; - writeconf(); - $w->exit; - }, - cancel_clicked => sub { $w->exit }, - }, - ), - ), - ); - -#------------------------------------------------------------------ -# build the notebook - -my %labels = ( - add => N("Add"), - edit => N("Edit"), - remove => N("Remove"), - ); - -foreach my $i (@pages) { - my $model = Gtk2::ListStore->new("Glib::Int", ("Glib::String") x listlength(@{$i->{columns}})); - my (%buttons, $list); - $indexes{$i->{name}} = 0; - my $idx = \$indexes{$i->{name}}; - my $getindex = sub { ${$idx}++ }; - $nb->append_page(gtkpack_(Gtk2::VBox->new, - 1, create_scrolled_window($list = Gtk2::TreeView->new_with_model($model), - [ 'automatic', 'automatic' ]), - 0, gtkpack(Gtk2::HButtonBox->new, - (map { - my ($id, $label, $sub) = @$_; - gtksignal_connect($buttons{$id} = Gtk2::Button->new($label), clicked => sub { - $sub->($model, $list, $getindex); - }) - } ([ 'add', N("Add"), $i->{callbacks}{add} || \&add_callback ], - [ 'edit', N("Edit"), \&edit_callback ], - [ 'remove', N("Remove"), \&del_callback], - ) - ) - #(map { - # gtksignal_connect(Gtk2::Button->new($_), clicked => $i->{callbacks}{$_}), - #} keys %{$i->{callbacks}}) - ), - ), - Gtk2::Label->new($i->{name}), - ); - #$i->{list} = $list; - each_index { - $list->append_column(Gtk2::TreeViewColumn->new_with_attributes($_, Gtk2::CellRendererText->new, 'text' => $::i + 1)); - } @{$i->{columns}}; - my @u = $i->{load}->(); - foreach my $line (@u) { - $model->append_set(0 => $getindex->(), map_index { $::i + 1 => $_ } @$line); - } - my $set_sensitive = sub { - my ($bool) = @_; - $buttons{$_}->set_sensitive($bool) foreach qw(remove edit); - }; - $set_sensitive->(0); - $list->get_selection->signal_connect('changed' => sub { - my ($select) = @_; - my (undef, $iter) = $select->get_selected; - $set_sensitive->(defined $iter); - }); -} - -#------------------------------------------------------------------ -# let's start the show: -$in->do_pkgs->ensure_is_installed('nut-server', '/usr/sbin/upsd') if !$::testing; -$w->{rwindow}->show_all; -$w->main; |