All pastes #403795 Raw Edit

Someone

public text v1 · immutable
·published 2007-03-20 17:12 UTC
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

;)