################################" # # 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 () { 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 () { 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 = ; 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 ;)