rendered paste body################################"
#
# Version: 0.8.9
# Change Logs:
#
# 0.8.9
#
# - fix for multiple IP on 2.6 kernel
# - fix scsi.pl script for mpt-status v1.2
# - soft raid added
# - move scsi.pl from daily to hour scripts
#
# 0.8.8
#
# - Added Gentoo Servers
# - Fix For Xeons and Ips
#
#!/bin/bash
export LANG="C"
if [ -e "/etc/gentoo-release" ]; then
gensync ovh
emerge rtm
exit
fi
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH
export PATH
VERSION="0.8.9"
DIR="/usr/local/rtm"
DIR_SCRIPTS_DAILY="${DIR}/scripts/daily"
DIR_SCRIPTS_MIN="${DIR}/scripts/min"
DIR_SCRIPTS_HOUR="${DIR}/scripts/hour"
PCIIDS_LINK="ftp://ftp.ovh.net/made-in-ovh/rtm/pci.ids"
HDDTEMPDB_LINK="ftp://ftp.ovh.net/made-in-ovh/rtm/hddtemp.db"
HDDTEMP_LINK="ftp://ftp.ovh.net/made-in-ovh/rtm/hddtemp-0.3-beta12.tar.bz2"
DMIDECODE_LINK="ftp://ftp.ovh.net/made-in-ovh/rtm/dmidecode-2.4.tar.gz"
DNSSERVER="213.186.33.99"
if [ ! -e "$DIR" ]; then mkdir -p $DIR; fi
if [ ! -e "$DIR_SCRIPTS_DAILY" ]; then mkdir -p "$DIR_SCRIPTS_DAILY"; fi
if [ ! -e "$DIR_SCRIPTS_MIN" ]; then mkdir -p "$DIR_SCRIPTS_MIN"; fi
if [ ! -e "$DIR_SCRIPTS_HOUR" ]; then mkdir -p "$DIR_SCRIPTS_HOUR"; fi
if [ ! -e "$DIR/bin" ]; then mkdir -p "$DIR/bin"; fi
RTM_PL=$DIR/bin/rtm-${VERSION}.pl
RTM_SH=$DIR/bin/rtm
GREP=`which grep`
WHICH=`which which|$GREP -v alias`
IFCONFIG=`$WHICH ifconfig`
AWK=`$WHICH awk`
MV="`$WHICH mv|$GREP -v alias`"
LN="`$WHICH ln|$GREP -v alias`"
CAT=`$WHICH cat`
CUT=`$WHICH cut`
CHMOD=`$WHICH chmod`
CHOWN=`$WHICH chown`
MKDIR=`$WHICH mkdir`
MAKE=`$WHICH make`
FIND=`$WHICH find`
LYNX=`$WHICH lynx`
SED=`$WHICH sed`
SLEEP=`$WHICH sleep`
LS="`$WHICH ls|$GREP -v alias`"
CP="`$WHICH cp|$GREP -v alias`"
PS=`$WHICH ps`
TR=`$WHICH tr`
TAIL=`$WHICH tail`
RM="`$WHICH rm|$GREP -v alias`"
SEQ=`$WHICH seq`
TAR=`$WHICH tar`
WGET=`$WHICH wget`
LSPCI=`$WHICH lspci`
HOSTNAME=`$WHICH hostname`
CRONTAB=`$WHICH crontab`
KILLALL=`$WHICH killall`
SCREENDIR=`$WHICH screen`
if [ "$SCREENDIR" != "" ]; then SCREEN="$SCREENDIR -d -m"; fi
NETSTAT=`$WHICH netstat`
SMARTCTL=`$WHICH smartctl`
SCRIPTDIR="$DIR/scripts"
MPTSTATUS=`$WHICH mpt-status 2>/dev/null`
HDDTEMP=`$WHICH hddtemp`
DMIDECODE=`$WHICH dmidecode`
upgrade=$1
if [ "$upgrade" != "-u" ]; then
if [ -z "$HDDTEMP" -o -z "$DMIDECODE" ]; then
upgrade=""
fi
fi
if [ -z "`$WHICH bzip2`" ]; then
echo "bzip2 not found!!"
echo "Please install bzip2."
exit
fi
ips1=`$IFCONFIG eth0 | $GREP 'inet ad' | $AWK '{print $2}' | $CUT -f2 -d':'`
ips2=`$IFCONFIG eth1 | $GREP 'inet ad' | $AWK '{print $2}' | $CUT -f2 -d':'`
if [ "$ips2" != "" -a "$ips1" != "" ]; then
if [ "`echo $ips2| $SED "s/\./ /g" | $AWK '{print $3}'`" -lt "`echo $ips1| $SED "s/\./ /g"| $AWK '{print $3}'`" ]; then
ips=$ips2
else
ips=$ips1
fi
elif [ "$ips1" != "" ]; then
ips=$ips1
elif [ "$ips2" != "" ]; then
ips=$ips2
fi
arpa=`echo "$ips" | $SED "s/\./ /g" | $AWK '{print $3"."$2"."$1}'`;
arpa_response=`host -t A mrtg.$arpa.in-addr.arpa $DNSSERVER 2>/dev/null | grep 'has address' | $CUT -f 2,3 -d" "`;
if [ "$arpa_response" != "has address" ]; then
echo "No IP from OVH network !"
exit;
fi
hostname=`$HOSTNAME`
CWD=`pwd`
echo "Updating pci.ids"
# pci.ids
pciids=`$FIND /usr/share/ -name pci.ids`
if [ -n "$pciids" -a -e "$pciids" ]; then
# WGET pci.ids -O $pciids
$WGET $PCIIDS_LINK -O $pciids
else
echo "Problems with updating pci.ids file"
sleep 3
fi
if [ "$update" != "-u" ]; then
# hddtemp
$MKDIR -p /rpms /usr/share/misc/;
$WGET $HDDTEMPDB_LINK -O /usr/share/misc/hddtemp.db;
cd /rpms/;
$WGET $HDDTEMP_LINK -O /rpms/hddtemp-0.3-beta12.tar.bz2;
$TAR xfj hddtemp-0.3-beta12.tar.bz2;
cd hddtemp-0.3-beta12;
./configure;
$MAKE;
$MAKE install;
HDDTEMP=`$WHICH hddtemp`
# dmidecode
cd /rpms/;
$WGET $DMIDECODE_LINK -O dmidecode-2.4.tar.gz;
$TAR xfz dmidecode-2.4.tar.gz ;
cd dmidecode-2.4;
$MAKE;
$MAKE install;
DMIDECODE=`$WHICH dmidecode`
fi
echo "Checking for mpt-status ..."
if [ -z "$MPTSTATUS" ]; then
MPTADAPTERS=`dmesg | grep "MPT" | grep "mptbase:" | cut -f2 -d" "`
if [ -n "$MPTADAPTERS" -a "$MPTADAPTERS" != "0" ]; then
echo "Installing mpt-status ...";
$WGET ftp://ftp.ovh.net/made-in-ovh/dedie/mpt-status-rh7.2 -O /usr/sbin/mpt-status
chmod 700 /usr/sbin/mpt-status
fi
fi
cd $CWD
# Generate $DIR_SCRIPTS_MIN/check.pl file
echo "Generating $DIR_SCRIPTS_MIN/check.pl ..."
$CAT <<'EOF' > $DIR_SCRIPTS_MIN/check.pl
#!/usr/bin/perl
if (`dmesg | grep -i "allocation failed"`) {
print "mCHECK_vm|1\n";
} else {
print "mCHECK_vm|\n";
}
if (`dmesg | grep -i "Oops"`) {
print "mCHECK_oops|1\n";
} else {
print "mCHECK_oops|\n";
}
EOF
$CHMOD 755 $DIR_SCRIPTS_MIN/check.pl
# Generate /scripts/hour/scsi.pl file
echo "Generating $DIR_SCRIPTS_HOUR/scsi.pl ..."
$CAT <<'EOF' > $DIR_SCRIPTS_HOUR/scsi.pl
#!/usr/bin/perl
use strict;
my $GREP=`which grep`;
chomp($GREP);
my $WHICH=`which which | grep -v alias`;
chomp($WHICH);
my $MDADM=`which mdadm 2>/dev/null`;
chomp($MDADM);
my $MPTSTATUS = `$WHICH mpt-status 2>/dev/null`;
my $dmesg = `dmesg`;
my ($line, @mptInfo, @twCliInfo, $controler);
#SOFT RAID
my $mdstat;
if ( $MDADM ne "" && -e "/proc/mdstat" && `cat /proc/mdstat | grep md` ne "") {
open(FILE, "/proc/mdstat");
my $matrix;
foreach $line (<FILE>) {
if ( $line =~ /(md\d+)\s+:\s+([^\s]+)\s+([^\s]+)/ ) {
$matrix = $1;
$mdstat->{$matrix}{status} = $2;
$mdstat->{$matrix}{type} = $3;
}
if ( $line =~ /^\s+(\d+)/ ) {
$mdstat->{$matrix}{capacity} = $1;
}
}
close(FILE);
foreach $matrix (keys %{$mdstat}) {
open(IN, "$MDADM -D /dev/$matrix |");
foreach $line (<IN>) {
if ( $line =~ /\s+\d+\s+\d+\s+\d+\s+(\d+)\s+(\w+)\s+(\w+)\s+\/dev\/(\w+)/ ) {
$mdstat->{$matrix}{device}{$1}{state} = $2;
$mdstat->{$matrix}{device}{$1}{flags} = $3;
$mdstat->{$matrix}{device}{$1}{drive} = $4;
}
if ( $line =~ /^\s+State\s+:\s+([^\s]+)/ ) {
$mdstat->{$matrix}{state} = $1;
}
}
close(IN);
print "hHW_SCSIRAID_UNIT_$matrix\_vol0_capacity|".sprintf("%.1f", $mdstat->{$matrix}{capacity}/1024/1024)." GB\n";
print "hHW_SCSIRAID_UNIT_$matrix\_vol0_phys|".(keys %{$mdstat})."\n";
print "hHW_SCSIRAID_UNIT_$matrix\_vol0_type|$mdstat->{$matrix}{type}\n";
print "hHW_SCSIRAID_UNIT_$matrix\_vol0_status|$mdstat->{$matrix}{status}\n";
print "hHW_SCSIRAID_UNIT_$matrix\_vol0_flags|$mdstat->{$matrix}{state}\n";
open(FILE, "/proc/partitions");
my @file = <FILE>;
close(FILE);
foreach my $device (keys %{$mdstat->{$matrix}{device}}) {
foreach $line (@file) {
if ( $line =~ /\s+\d+\s+\d+\s+(\d+)\s+$mdstat->{$matrix}{device}{$device}{drive}/ ) {
$mdstat->{$matrix}{device}{$device}{capacity} = $1;
}
}
print "hHW_SCSIRAID_PORT_$matrix\_vol0\_$mdstat->{$matrix}{device}{$device}{drive}\_capacity|".sprintf("%.1f", $mdstat->{$matrix}{device}{$device}{capacity}/1024/1024)." GB\n";
# print "hHW_SCSIRAID_PORT_$matrix_vol0\_$device_model|$4 $5\n";
print "hHW_SCSIRAID_PORT_$matrix\_vol0\_$mdstat->{$matrix}{device}{$device}{drive}\_status|$mdstat->{$matrix}{device}{$device}{state}\n";
print "hHW_SCSIRAID_PORT_$matrix\_vol0\_$mdstat->{$matrix}{device}{$device}{drive}\_flags|$mdstat->{$matrix}{device}{$device}{flags}\n";
}
}
}
#SCSI-RAID
if ($MPTSTATUS ne "") {
my $vol;
@mptInfo = `$MPTSTATUS`;
foreach $line (@mptInfo) {
if ( $line =~ m/(^[^\s]+)\s+([^\s]+)\s+(\d+)\s+type\s+([^,]+),\s+(\d+)\s+phy,\s+(\d+)\s+GB,\s+flags\s+([^,]+),\s+state\s+(.+)/) {
print "hHW_SCSIRAID_UNIT_$1_$2$3_capacity|$6 GB\n";
print "hHW_SCSIRAID_UNIT_$1_$2$3_phys|$5\n";
print "hHW_SCSIRAID_UNIT_$1_$2$3_type|$4\n";
print "hHW_SCSIRAID_UNIT_$1_$2$3_status|$8\n";
print "hHW_SCSIRAID_UNIT_$1_$2$3_flags|$7\n";
$vol = "$2$3";
next;
} elsif ( $line =~ m/(^[^\s]+)\s+([^\s]+)\s+(\d+)\s+type\s+([^,]+),\s+(\d+)\s+phy,\s+(\d+)\s+GB,\s+state\s+(.+),\s+flags\s+([^,]+)\n/) {
print "hHW_SCSIRAID_UNIT_$1_$2$3_capacity|$6 GB\n";
print "hHW_SCSIRAID_UNIT_$1_$2$3_phys|$5\n";
print "hHW_SCSIRAID_UNIT_$1_$2$3_type|$4\n";
print "hHW_SCSIRAID_UNIT_$1_$2$3_status|$8\n";
print "hHW_SCSIRAID_UNIT_$1_$2$3_flags|$7\n";
$vol = "$2$3";
next;
}
if ( $line =~ m/(^[^\s]+)\s+([^\s]+)\s+(\d+)\s+scsi_id\s+\d+\s+([^\s]+)\s+([^\s]+)[^,]+,\s+(\d+)[^,]+,\s+state\s+(.+), flags\s+(.+)/ ) {
print "hHW_SCSIRAID_PORT_$1_$vol\_$2$3_capacity|$6 GB\n";
print "hHW_SCSIRAID_PORT_$1_$vol\_$2$3_model|$4 $5\n";
print "hHW_SCSIRAID_PORT_$1_$vol\_$2$3_status|$7\n";
print "hHW_SCSIRAID_PORT_$1_$vol\_$2$3_flags|$8\n";
} elsif ( $line =~ m/(^[^\s]+)\s+([^\s]+)\s+(\d+)\s+([^\s]+)\s+([^\s]+)[^,]+,\s+(\d+)[^,]+,\s+state\s+(.+), flags\s+(.+)/ ) {
print "hHW_SCSIRAID_PORT_$1_$vol\_$2$3_capacity|$6 GB\n";
print "hHW_SCSIRAID_PORT_$1_$vol\_$2$3_model|$4 $5\n";
print "hHW_SCSIRAID_PORT_$1_$vol\_$2$3_status|$7\n";
print "hHW_SCSIRAID_PORT_$1_$vol\_$2$3_flags|$8\n";
}
if ( $line =~ m/(^[^\s]+)\s+([^\s]+)\s+(\d+)\s+([^\s]+)\s+([^\s]+)[^,]+,\s+(\d+)[^,]+,\s+flags\s+([^,]+),\s+state\s+(.+)/ ) {
print "hHW_SCSIRAID_PORT_$1_$vol\_$2$3_capacity|$6 GB\n";
print "hHW_SCSIRAID_PORT_$1_$vol\_$2$3_model|$4 $5\n";
print "hHW_SCSIRAID_PORT_$1_$vol\_$2$3_status|$8\n";
print "hHW_SCSIRAID_PORT_$1_$vol\_$2$3_flags|$7\n";
}
}
}
#3Ware
if (( $dmesg =~ m/3w-xxxx: scsi/) || ( $dmesg =~ m/scsi. : Found a 3ware/)) {
my (%units, @controlers);
my $TWCLI = `$WHICH tw_cli`;
chomp($TWCLI);
if ($TWCLI ne "") {
@twCliInfo = `$TWCLI info`;
foreach $line (@twCliInfo) {
usw usw usw
;)