Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package monitoring-plugins-smart for
openSUSE:Factory checked in at 2021-11-20 02:39:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/monitoring-plugins-smart (Old)
and /work/SRC/openSUSE:Factory/.monitoring-plugins-smart.new.1895 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "monitoring-plugins-smart"
Sat Nov 20 02:39:31 2021 rev:7 rq:932589 version:6.11.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/monitoring-plugins-smart/monitoring-plugins-smart.changes
2021-05-10 15:42:07.272912328 +0200
+++
/work/SRC/openSUSE:Factory/.monitoring-plugins-smart.new.1895/monitoring-plugins-smart.changes
2021-11-20 02:40:54.044431590 +0100
@@ -1,0 +2,14 @@
+Fri Nov 19 20:32:24 UTC 2021 - [email protected] - 6.11.0
+
+- reduce the sudoers rights for nagios user from using smartctl to
+ only call the plugin itself. As the plugin is called with sudo
+ rights, the included sudo calls in the plugin will also be executed
+ as root and don't cause any problem. As the plugin is only writable
+ by root, this forbits the nagios user to execute smartctl with
+ arbitrary options (boo#1191671)
+- update to 6.11.0
+ + Handle dots in NVMe attributes, prioritize (order) alerts
+ + Add aacraid devices (6.10.0)
+- add rpmlintrc
+
+-------------------------------------------------------------------
Old:
----
check_smart-6.9.1.tar.xz
New:
----
check_smart-6.11.0.tar.xz
monitoring-plugins-smart-rpmlintrc
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ monitoring-plugins-smart.spec ++++++
--- /var/tmp/diff_new_pack.5eWtym/_old 2021-11-20 02:40:54.636429637 +0100
+++ /var/tmp/diff_new_pack.5eWtym/_new 2021-11-20 02:40:54.640429624 +0100
@@ -17,7 +17,7 @@
Name: monitoring-plugins-smart
-Version: 6.9.1
+Version: 6.11.0
Release: 0
Summary: Check SMART status of a given disk
License: SUSE-Public-Domain
@@ -26,6 +26,7 @@
Source0: check_smart-%{version}.tar.xz
Source1: usr.lib.nagios.plugins.check_smart
Source3: monitoring-plugins-smart-README.SUSE
+Source4: monitoring-plugins-smart-rpmlintrc
BuildRequires: nagios-rpm-macros
BuildRequires: sudo
Requires: monitoring-plugins-common
@@ -65,8 +66,8 @@
%if 0%{?suse_version} > 1130
mkdir -p %{buildroot}/%{_sysconfdir}/sudoers.d
cat >> %{buildroot}/%{_sysconfdir}/sudoers.d/%{name} << EOF
-# the next line is needed for %%{name} to allow the correct use of smartctl
-nagios ALL=(root) NOPASSWD: %{_sbindir}/smartctl
+# the next line is needed for %{name} to allow the correct use of smartctl
+nagios ALL=(root) NOPASSWD: %{nagios_plugindir}/check_smart
EOF
%endif
++++++ _service ++++++
--- /var/tmp/diff_new_pack.5eWtym/_old 2021-11-20 02:40:54.676429505 +0100
+++ /var/tmp/diff_new_pack.5eWtym/_new 2021-11-20 02:40:54.680429491 +0100
@@ -2,10 +2,10 @@
<service name="tar_scm" mode="localonly">
<param name="url">https://github.com/Napsty/check_smart.git</param>
<param name="scm">git</param>
- <param name="revision">6.9.1</param>
+ <param name="revision">6.11.0</param>
<param name="exclude">.git</param>
- <param name="versionformat">6.9.1</param>
- <param name="revision">6.9.1</param>
+ <param name="versionformat">6.11.0</param>
+ <param name="revision">6.11.0</param>
<param name="filename">check_smart</param>
</service>
<service name="set_version" mode="localonly">
++++++ check_smart-6.9.1.tar.xz -> check_smart-6.11.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/check_smart-6.9.1/check_smart.pl
new/check_smart-6.11.0/check_smart.pl
--- old/check_smart-6.9.1/check_smart.pl 2021-04-08 09:59:56.000000000
+0200
+++ new/check_smart-6.11.0/check_smart.pl 2021-10-04 13:11:08.000000000
+0200
@@ -48,13 +48,15 @@
# Mar 3, 2021: Evan Felix - Allow use of colons in pathnames so
/dev/disk/by-path/ device names work (6.9.0)
# Mar 4, 2021: Claudio Kuenzler - Add SSD attribute Percent_Lifetime_Remain
check (-l|--ssd-lifetime) (6.9.0)
# Apr 8, 2021: Claudio Kuenzler - Fix regex for pseudo-devices (6.9.1)
+# Jul 6, 2021: Bernhard Bittner - Add aacraid devices (6.10.0)
+# Oct 4, 2021: Claudio Kuenzler + Peter Newman - Handle dots in NVMe
attributes, prioritize (order) alerts (6.11.0)
use strict;
use Getopt::Long;
use File::Basename qw(basename);
my $basename = basename($0);
-my $revision = '6.9.1';
+my $revision = '6.11.0';
# Standard Nagios return codes
my %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4);
@@ -132,7 +134,7 @@
# Allow all device types currently supported by smartctl
# See http://www.smartmontools.org/wiki/Supported_RAID-Controllers
- if ($opt_i =~
m/(ata|scsi|3ware|areca|hpt|cciss|megaraid|sat|auto|nvme)/) {
+ if ($opt_i =~
m/(ata|scsi|3ware|areca|hpt|aacraid|cciss|megaraid|sat|auto|nvme)/) {
$interface = $opt_i;
if($interface =~ m/megaraid,\[(\d{1,2})-(\d{1,2})\]/) {
$interface = "";
@@ -152,6 +154,12 @@
$interface .= "cciss," . $k . "|";
}
}
+ elsif($interface =~ m/aacraid,\[(\d{1,2})-(\d{1,2})\]/) {
+ $interface = "";
+ for(my $k = $1; $k <= $2; $k++) {
+ $interface .= "aacraid," . $k . "|";
+ }
+ }
else {
$interface .= "|";
}
@@ -214,11 +222,15 @@
my @drives_status_okay;
my @drives_status_not_okay;
+my @drives_status_warning;
+my @drives_status_critical;
my $drive_details;
foreach $device ( split("\\|",$device) ){
foreach $interface ( split("\\|",$interface) ){
my @error_messages = qw//;
+ my @warning_messages = qw//;
+ my @notice_messages = qw//;
my($status_string_local)='';
my($tag,$label);
$exit_status_local = 'OK';
@@ -227,7 +239,7 @@
# we had a pattern based on $opt_g
$tag = $device;
$tag =~ s/\Q$opt_g\E//;
- if($interface =~ qr/(?:megaraid|3ware|cciss)/){
+ if($interface =~ qr/(?:megaraid|3ware|aacraid|cciss)/){
$label = "[$interface] - ";
} else {
$label = "[$device] - ";
@@ -364,7 +376,7 @@
escalate_status('UNKNOWN');
}
if ($return_code & 0x04) {
- push(@error_messages, 'Checksum failure');
+ push(@warning_messages, 'Checksum failure');
escalate_status('WARNING');
}
if ($return_code & 0x08) {
@@ -372,19 +384,19 @@
escalate_status('CRITICAL');
}
if ($return_code & 0x10) {
- push(@error_messages, 'Disk is in prefail');
+ push(@warning_messages, 'Disk is in prefail');
escalate_status('WARNING');
}
if ($return_code & 0x20) {
- push(@error_messages, 'Disk may be close to failure');
+ push(@warning_messages, 'Disk may be close to failure');
escalate_status('WARNING');
}
if ($return_code & 0x40) {
- push(@error_messages, 'Error log contains errors');
+ push(@warning_messages, 'Error log contains errors');
escalate_status('WARNING');
}
if ($return_code & 0x80) {
- push(@error_messages, 'Self-test log contains errors');
+ push(@warning_messages, 'Self-test log contains
errors');
escalate_status('WARNING');
}
if ($return_code && !$exit_status_local) {
@@ -406,7 +418,7 @@
warn "(debug) exit code:\n$return_code\n\n" if
$opt_debug;
if ($return_code > 0) {
- push(@error_messages, 'Self-test log contains
errors');
+ push(@warning_messages, 'Self-test log contains
errors');
warn "(debug) Self-test log contains
errors\n\n" if $opt_debug;
escalate_status('WARNING');
}
@@ -449,7 +461,7 @@
if (grep {$_ eq $attribute_number || $_
eq $attribute_name || $_ eq $when_failed} @exclude_checks) {
warn "SMART Attribute $attribute_name
failed at $when_failed but was set to be ignored\n" if $opt_debug;
} else {
- push(@error_messages, "Attribute
$attribute_name failed at $when_failed");
+ push(@warning_messages, "Attribute
$attribute_name failed at $when_failed");
escalate_status('WARNING');
warn "(debug) parsed SMART attribute
$attribute_name with error condition:\n$when_failed\n\n" if $opt_debug;
}
@@ -473,15 +485,15 @@
# Check for warning thresholds
if ( ($warn_list{$attribute_name}) &&
($raw_value >= $warn_list{$attribute_name}) ) {
warn "(debug) $attribute_name is
non-zero ($raw_value)\n\n" if $opt_debug;
- push(@error_messages, "$attribute_name
is non-zero ($raw_value)");
+ push(@warning_messages,
"$attribute_name is non-zero ($raw_value)");
escalate_status('WARNING');
} elsif ( ($warn_list{$attribute_name})
&& ($raw_value < $warn_list{$attribute_name}) ) {
warn "(debug) $attribute_name is
non-zero ($raw_value) but less than $warn_list{$attribute_name}\n\n" if
$opt_debug;
- push(@error_messages, "$attribute_name
is non-zero ($raw_value) (but less than threshold
$warn_list{$attribute_name})");
+ push(@notice_messages, "$attribute_name
is non-zero ($raw_value) (but less than threshold
$warn_list{$attribute_name})");
}
else {
warn "(debug) $attribute_name is
non-zero ($raw_value)\n\n" if $opt_debug;
- push(@error_messages, "$attribute_name
is non-zero ($raw_value)");
+ push(@warning_messages,
"$attribute_name is non-zero ($raw_value)");
escalate_status('WARNING');
}
} else {
@@ -499,6 +511,7 @@
my ($attribute_name, $raw_value) = ($1, $2);
$raw_value =~ s/\s|,//g;
$attribute_name =~ s/\s/_/g;
+ $attribute_name =~ s/.//g;
# some attributes produce irrelevant data; no
need to graph them
if (grep {$_ eq $attribute_name}
('Critical_Warning') ){
@@ -518,67 +531,67 @@
# Handle Critical_Warning values
if ($attribute_name eq 'Critical_Warning') {
if ($raw_value eq '0x01') {
- push(@error_messages, "Available
spare below threshold");
+ push(@warning_messages, "Available
spare below threshold");
escalate_status('WARNING');
}
elsif ($raw_value eq '0x02') {
- push(@error_messages, "Temperature is
above or below thresholds");
+ push(@warning_messages, "Temperature
is above or below thresholds");
escalate_status('WARNING');
}
elsif ($raw_value eq '0x03') {
- push(@error_messages, "Available
spare below threshold and temperature is above or below thresholds");
+ push(@warning_messages, "Available
spare below threshold and temperature is above or below thresholds");
escalate_status('WARNING');
}
elsif ($raw_value eq '0x04') {
- push(@error_messages, "NVM subsystem
reliability degraded");
+ push(@warning_messages, "NVM
subsystem reliability degraded");
escalate_status('WARNING');
}
elsif ($raw_value eq '0x05') {
- push(@error_messages, "Available
spare below threshold and NVM subsystem reliability degraded");
+ push(@warning_messages, "Available
spare below threshold and NVM subsystem reliability degraded");
escalate_status('WARNING');
}
elsif ($raw_value eq '0x06') {
- push(@error_messages, "Temperature is
above or below thresholds and NVM subsystem reliability degraded");
+ push(@warning_messages, "Temperature
is above or below thresholds and NVM subsystem reliability degraded");
escalate_status('WARNING');
}
elsif ($raw_value eq '0x07') {
- push(@error_messages, "Available
spare below threshold and Temperature is above or below thresholds and NVM
subsystem reliability degraded");
+ push(@warning_messages, "Available
spare below threshold and Temperature is above or below thresholds and NVM
subsystem reliability degraded");
escalate_status('WARNING');
}
elsif ($raw_value eq '0x08') {
- push(@error_messages, "Media in read
only mode");
+ push(@warning_messages, "Media in
read only mode");
escalate_status('WARNING');
}
elsif ($raw_value eq '0x09') {
- push(@error_messages, "Media in read
only mode and Available spare below threshold");
+ push(@warning_messages, "Media in
read only mode and Available spare below threshold");
escalate_status('WARNING');
}
elsif ($raw_value eq '0x0A') {
- push(@error_messages, "Media in read
only mode and Temperature is above or below thresholds");
+ push(@warning_messages, "Media in
read only mode and Temperature is above or below thresholds");
escalate_status('WARNING');
}
elsif ($raw_value eq '0x0B') {
- push(@error_messages, "Media in read
only mode and Temperature is above or below thresholds and Available spare
below threshold");
+ push(@warning_messages, "Media in
read only mode and Temperature is above or below thresholds and Available spare
below threshold");
escalate_status('WARNING');
}
elsif ($raw_value eq '0x0C') {
- push(@error_messages, "Media in read
only mode and NVM subsystem reliability degraded");
+ push(@warning_messages, "Media in
read only mode and NVM subsystem reliability degraded");
escalate_status('WARNING');
}
elsif ($raw_value eq '0x0D') {
- push(@error_messages, "Media in read
only mode and NVM subsystem reliability degraded and Available spare below
threshold");
+ push(@warning_messages, "Media in
read only mode and NVM subsystem reliability degraded and Available spare below
threshold");
escalate_status('WARNING');
}
elsif ($raw_value eq '0x0E') {
- push(@error_messages, "Media in read
only mode and NVM subsystem reliability degraded and Temperature is above or
below thresholds");
+ push(@warning_messages, "Media in
read only mode and NVM subsystem reliability degraded and Temperature is above
or below thresholds");
escalate_status('WARNING');
}
elsif ($raw_value eq '0x0F') {
- push(@error_messages, "Media in read
only mode and NVM subsystem reliability degraded and Temperature is above or
below thresholds");
+ push(@warning_messages, "Media in
read only mode and NVM subsystem reliability degraded and Temperature is above
or below thresholds");
escalate_status('WARNING');
}
elsif ($raw_value eq '0x10') {
- push(@error_messages, "Volatile
memory backup device failed");
+ push(@warning_messages, "Volatile
memory backup device failed");
escalate_status('WARNING');
}
}
@@ -589,14 +602,14 @@
# Check for warning thresholds
if ( ($warn_list{$attribute_name}) &&
($raw_value >= $warn_list{$attribute_name}) ) {
warn "(debug) $attribute_name is
non-zero ($raw_value)\n\n" if $opt_debug;
- push(@error_messages,
"$attribute_name is non-zero ($raw_value)");
+ push(@warning_messages,
"$attribute_name is non-zero ($raw_value)");
escalate_status('WARNING');
} elsif (
($warn_list{$attribute_name}) && ($raw_value < $warn_list{$attribute_name}) ) {
warn "(debug) $attribute_name is
non-zero ($raw_value) but less than $warn_list{$attribute_name}\n\n" if
$opt_debug;
- push(@error_messages,
"$attribute_name is non-zero ($raw_value) (but less than threshold
$warn_list{$attribute_name})");
+ push(@notice_messages,
"$attribute_name is non-zero ($raw_value) (but less than threshold
$warn_list{$attribute_name})");
} else {
warn "(debug) $attribute_name is
non-zero ($raw_value)\n\n" if $opt_debug;
- push(@error_messages,
"$attribute_name is non-zero ($raw_value)");
+ push(@warning_messages,
"$attribute_name is non-zero ($raw_value)");
escalate_status('WARNING');
}
} else {
@@ -627,19 +640,19 @@
if ($opt_b) {
push (@perfdata,
"defect_list=$defectlist;;$opt_b") if $opt_d;
if (($defectlist > 0) &&
($defectlist >= $opt_b)) {
- push(@error_messages,
"$defectlist Elements in grown defect list (threshold $opt_b)");
+ push(@warning_messages,
"$defectlist Elements in grown defect list (threshold $opt_b)");
escalate_status('WARNING');
warn "(debug) Elements
in grown defect list is non-zero ($defectlist)\n\n" if $opt_debug;
}
elsif (($defectlist > 0) &&
($defectlist < $opt_b)) {
- push(@error_messages,
"Note: $defectlist Elements in grown defect list");
+ push(@warning_messages,
"Note: $defectlist Elements in grown defect list");
warn "(debug) Elements
in grown defect list is non-zero ($defectlist) but less than $opt_b\n\n" if
$opt_debug;
}
}
else {
if ($defectlist > 0) {
push (@perfdata,
"defect_list=$defectlist") if $opt_d;
- push(@error_messages,
"$defectlist Elements in grown defect list");
+ push(@warning_messages,
"$defectlist Elements in grown defect list");
escalate_status('WARNING');
warn "(debug) Elements
in grown defect list is non-zero ($defectlist)\n\n" if $opt_debug;
}
@@ -667,7 +680,7 @@
push (@perfdata,
"start_stop=$current_start_stop;$max_start_stop") if $opt_d;
if($current_start_stop >
$max_start_stop){
warn "(debug) Disk start_stop
is greater than max ($current_start_stop > $max_start_stop)\n\n" if $opt_debug;
- push(@error_messages, 'Disk
start_stop is higher than maximum');
+ push(@warning_messages, 'Disk
start_stop is higher than maximum');
escalate_status('WARNING');
}
}
@@ -686,20 +699,39 @@
if($exit_status_local ne 'OK'){
if ($opt_g) {
$status_string = $label.join(', ', @error_messages);
+ $status_string .= $label.join(', ', @warning_messages);
+ $status_string .= $label.join(', ', @notice_messages);
}
else {
$drive_details = "Drive $model S/N $serial: ";
- $status_string = join(', ', @error_messages);
+ $status_string = join(', ', @error_messages, '');
+ $status_string .= join(', ', @warning_messages, '');
+ $status_string .= join(', ', @notice_messages);
+ }
+ if ($exit_status_local eq 'WARNING') {
+ push @drives_status_warning, $status_string;
+ } elsif ($exit_status_local eq 'CRITICAL') {
+ push @drives_status_critical, $status_string;
}
- push @drives_status_not_okay, $status_string;
- }
+ }
else {
if ($opt_g) {
$status_string = $label."Device is clean";
+ if (scalar(@error_messages) > 0) {
+ $status_string .= " ".$label.join(', ',
@error_messages);
+ }
+ if (scalar(@warning_messages) > 0) {
+ $status_string .= " ".$label.join(', ',
@warning_messages);
+ }
+ if (scalar(@notice_messages) > 0) {
+ $status_string .= " ".$label.join(', ',
@notice_messages);
+ }
}
else {
$drive_details = "Drive $model S/N $serial: no SMART
errors detected. ";
$status_string = join(', ', @error_messages);
+ $status_string .= join(', ', @warning_messages);
+ $status_string .= join(', ', @notice_messages);
}
push @drives_status_okay, $status_string;
}
@@ -710,6 +742,14 @@
my @msg_list = ($drive_details) if $drive_details;
+if (scalar(@drives_status_critical) > 0) {
+ push @drives_status_not_okay, @drives_status_critical;
+}
+
+if (scalar(@drives_status_warning) > 0) {
+ push @drives_status_not_okay, @drives_status_warning;
+}
+
if (@drives_status_not_okay) {
push @msg_list, grep { $_ } @drives_status_not_okay;
}
@@ -743,7 +783,7 @@
sub print_help {
print_revision($basename,$revision);
- print "\nUsage: $basename {-d=<block device>|-g=<block device glob>}
-i=(auto|ata|scsi|3ware,N|areca,N|hpt,L/M/N|cciss,N|megaraid,N) [-r list] [-w
list] [-b N] [-e list] [-E list] [--debug]\n\n";
+ print "\nUsage: $basename {-d=<block device>|-g=<block device glob>}
-i=(auto|ata|scsi|3ware,N|areca,N|hpt,L/M/N|aacraid,H,L,ID|cciss,N|megaraid,N)
[-r list] [-w list] [-b N] [-e list] [-E list] [--debug]\n\n";
print "At least one of the below. -d supersedes -g\n";
print " -d/--device: a physical block device to be SMART monitored,
eg /dev/sda. Pseudo-device /dev/bus/N is allowed.\n";
print " -g/--global: a glob pattern name of physical devices to be
SMART monitored\n";
@@ -753,7 +793,7 @@
print "Note that -g only works with a fixed interface (e.g. scsi, ata)
and megaraid,N.\n";
print "\n";
print "Other options\n";
- print " -i/--interface: device's interface type
(auto|ata|scsi|nvme|3ware,N|areca,N|hpt,L/M/N|cciss,N|megaraid,N)\n";
+ print " -i/--interface: device's interface type
(auto|ata|scsi|nvme|3ware,N|areca,N|hpt,L/M/N|aacraid,H,L,ID|cciss,N|megaraid,N)\n";
print " (See
http://www.smartmontools.org/wiki/Supported_RAID-Controllers for interface
convention)\n";
print " -r/--raw Comma separated list of ATA or NVMe attributes to
check\n";
print " ATA default:
Current_Pending_Sector,Reallocated_Sector_Ct,Program_Fail_Cnt_Total,Uncorrectable_Error_Cnt,Offline_Uncorrectable,Runtime_Bad_Block,Command_Timeout\n";
++++++ monitoring-plugins-smart-rpmlintrc ++++++
# the comment is used to have the package name in a comment for the sudo script
addFilter("macro-in-comment");