diff options
Diffstat (limited to 'perl-install/standalone/drakups')
-rwxr-xr-x | perl-install/standalone/drakups | 66 |
1 files changed, 17 insertions, 49 deletions
diff --git a/perl-install/standalone/drakups b/perl-install/standalone/drakups index bb65aae02..08a3008c6 100755 --- a/perl-install/standalone/drakups +++ b/perl-install/standalone/drakups @@ -4,63 +4,31 @@ use strict; use lib qw(/usr/lib/libDrakX); use common; use detect_devices; - -#------------------------------------------------------------------ -# to be moved in MDK::Common as a generalisation of (read|update)_gnomekderc -# once cooker is unfrozen and major releases are allowed again. -# -# but there's a "bug" that prevent factorization: current -# (read|update)_gnomekderc keep comments ... and minimize intrusions - -sub read_all_gnomekderc { - my ($file) = @_; - my (@a, %h); - my ($section, @section); - foreach (MDK::Common::File::cat_($file)) { - s/#.*//; - if (/^\s*\[(.*)\]/) { - # remove all "if $section" tests if options out of sections is needed - push @a, [ $section, [ @section ] ] if $section; - $section = $1; - $h{$section} = { }; - @section = (); - } elsif (/^\s*(.*?)=(.*)/) { - push @section, $1; - $h{$section}{$1} = $2; - } - } - push @a, [ $section, [ @section ] ] if $section; - \@a, \%h; -} - -# lost comment but keep sections & options order: -sub update_all_gnomekderc { - my ($file, $list, $hvalues) = @_; - output($file, map { - my ($section, $items) = @$_; - "\n[$section]\n", map { $_ . "=" . $hvalues->{$section}{$_} . "\n" } @$items; - } @$list); -} -#------------------------------------------------------------------ +use Libconf qw(:functions); +use Libconf::Glueconf::Ups; #------------------------------------------------------------------ # UPS autoconfig: my $file = "/etc/ups/ups.conf"; -my ($sections, $sec_contents) = read_all_gnomekderc($file); -my @ups_devices = sort values %$sec_contents; +my $struct = Libconf::Glueconf::Ups->new('ups.conf'); #Libconf::Glueconf::ups->new($file, 'ups', ''); + +detect_devices::probeSerialDevices(); foreach my $ups_device (detect_devices::getUPS()) { - my $str = $ups_device->{description}; - if (!find { $str eq $_->{port} } @ups_devices) { - $str =~ s/ /_/g; - push @$sections, [ $str, [ qw(driver port) ] ]; - $sec_contents->{$str} = { - port => $ups_device->{bus} eq 'USB' ? "/dev/usb/hid/hiddev0" : $ups_device->{device}, - driver => $ups_device->{bus} eq 'USB' ? "hidups" : "", - }; + my $str = $ups_device->{name} || $ups_device->{DESCRIPTION}; + + if (!exists $struct->{$str}) { + $struct->{$str}{port} = $ups_device->{port} || $ups_device->{DEVICE}; + $struct->{$str}{driver} = $ups_device->{driver}; } } -update_all_gnomekderc($file, $sections, $sec_contents); +$struct->writeConf($file); + +my $drivers_table = glob("/usr/share/doc/nut-*/docs/driver.list"); + +# driver list from nutupsdrv(8) +my @drivers = qw(apcsmart bcmxcp belkin bestferrups801-807 bestfortress bestuferrups bestups cyberpower dummycons etapro everups fentonups genericups hidups hp isbmex liebert masterguard mge-shut mge-utalk microdowell newapc oneac powercom powernet sec sms snmp-ups tripplite tripplitesu victronups); + |