/usr/lib/sitesummary/nagios-plugins/check_kernel_status is in sitesummary-client 0.1.28+deb9u1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | #!/usr/bin/perl
# check_kernel_status : check if the running kernel is the latest installed
# By Toni Van Remortel [toni.van.remortel@p-ops.be]
# 2008-07-28
# GPLv2
# Downloaded from
# http://www.monitoringexchange.org/attachment/download/Check-Plugins/Operating-Systems/Linux/Running-kernel-compared-to-installed-kernel-version/check_kernel_status
use strict;
use warnings;
my $OK = 0;
my $WARN = 1;
my $CRIT = 2;
my $UNKN = 3;
my $sig;
my @running_version;
my @installed_version;
# First, find the current running kernel version
if ( -e '/proc/version_signature' )
{
# Likely Ubuntu
$sig = `cat /proc/version_signature`;
if ( $sig =~ /.* (\d+)\.(\d+)\.(\d+)-(\d+)\.(\d+)-[generic|server]/ )
{
@running_version = ($1, $2, $3, $4, $5, 0);
}
else
{
print "UNKNOWN - Cannot find running Ubuntu kernel version\n";
exit $UNKN;
}
}
elsif ( -e '/proc/version' )
{
# Likely Debian
$sig = `cat /proc/version`;
if (
# New format in kernel package version 3.2.32-1, match first to also work with
# kernel 3.13 and later in Debian.
$sig =~ / Debian (\d+)\.(\d+)\.(\d+)-(\d+)/
|| $sig =~ / Debian (\d+)\.(\d+)\.(\d+)-ckt(\d+)-(\d+)/
|| $sig =~ /\(Debian (\d+)\.(\d+)\.(\d+)\.dfsg\.(\d+)-(\d+)\)/
|| $sig =~ /\(Debian (\d+)\.(\d+)\.(\d+)\.dfsg\.(\d+)-(\d+)\w+(\d+)\)/
|| $sig =~ /\(Debian (\d+)\.(\d+)\.(\d+)-(\d+).+?(\d+).+?(\d+)\)/
|| $sig =~ /\(Debian (\d+)\.(\d+)\.(\d+)-(\d+)lenny(\d+)\)/
)
{
@running_version = ($1, $2, $3, $4, $5 || 0, $6 || 0);
}
else
{
print "UNKNOWN - Cannot find running Debian kernel version\n";
exit $UNKN;
}
}
else
{
print "UNKNOWN - Cannot extract running kernel info\n";
exit $UNKN;
}
# Next, find the installed kernel version
# Yes, as you can see, it is limited to 2.6 and 3.X kernels here.
# But I assume that you don't need reboots anymore when this major
# version has passed.
my $dpkg_list = `COLUMNS=1024 dpkg -l`;
my $dpkg;
for my $line (split("\n", $dpkg_list)) {
chomp $line;
$dpkg = $line if ($line =~ m/^ii.+linux-image-(2.6|3.\d|4.\d)/);
}
# Now, which OS is it, and which footprint do they use?
if ( $dpkg =~ /(\d+)\.(\d+)\.(\d+)-(\d+)\.(\d+)/ )
{
# Ubuntu
@installed_version = ($1, $2, $3, $4, $5, 0);
}
elsif ( $dpkg =~ /(\d+)\.(\d+)\.(\d+)\.dfsg\.(\d+)-(\d+)\w+(\d+)/ )
{
# Debian Etch and older
@installed_version = ($1, $2, $3, $4, $5, $6);
}
elsif ( $dpkg =~ /(\d+)\.(\d+)\.(\d+)\.dfsg\.(\d+)-(\d+) / )
{
# Debian Etch and older
@installed_version = ($1, $2, $3, $4, $5, 0);
}
elsif ( $dpkg =~ /(\d+)\.(\d+)\.(\d+)-(\d+)\~.+?(\d+).+?(\d+)/ )
{
# Debian Etch and older
@installed_version = ($1, $2, $3, $4, $5, $6);
}
elsif ( $dpkg =~ /Debian (\d+)\.(\d+)\.(\d+)\+(\d+)\+lenny(\d+)/ )
{
# Debian Lenny
@installed_version = ($1, $2, $3, $4, $5, 0);
}
elsif ( $dpkg =~ /(\d+)\.(\d+)\.(\d+)-(\d+)lenny(\d+)/ )
{
# Debian Lenny
@installed_version = ($1, $2, $3, $4, $5, 0);
}
elsif ( $dpkg =~ / (\d+)\.(\d+)\.(\d+)-(\d+)/ )
{
# Debian Lenny
@installed_version = ($1, $2, $3, $4, 0, 0);
}
elsif( $dpkg =~ / (\d+)\.(\d+)\.(\d+)-ckt(\d+)-(\d+)/ )
{
@installed_version = ($1, $2, $3, $4, $5, 0);
}
else
{
print "UNKNOWN - Could not determine installed version ($dpkg).\n";
exit $UNKN;
}
# Calculate sums for easy comparison
my $running_version_sum = sprintf("%02d%02d%02d%02d%02d%02d", @running_version);
my $installed_version_sum = sprintf("%02d%02d%02d%02d%02d%02d", @installed_version);
# And some readable format
my $print_running_version = sprintf("%d.%d.%d-%d.%d.%d", @running_version);
my $print_installed_version = sprintf("%d.%d.%d-%d.%d.%d", @installed_version);
# Do we need a reboot?
if ( $running_version_sum < $installed_version_sum )
{
print "WARNING - Reboot required : running kernel = $print_running_version, installed kernel = $print_installed_version\n";
exit $WARN;
}
else
{
print "OK - running kernel = $print_running_version, installed kernel = $print_installed_version\n";
exit $OK;
}
|