Thursday, June 17, 2021

Plots Per Day… CHIA that is.

GREP=/usr/bin/grep
ECHO=/usr/bin/echo
AWK=/usr/bin/awk
CAT=/usr/bin/cat
SORT=/usr/bin/sort
WC=/usr/bin/wc
YEAR=2021

FILE=/var/log/totalplots
TFILE=/var/log/totalplots.sorted

$CAT $FILE | $AWK -F- ‘{ print $4”.”$5”.”$3 }’ | $SORT -n > $TFILE

for MONTH in 01 02 03 04 05 06 07 08 09 10 11 12
do
for DAY in 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
do
X=`$CAT $TFILE |$GREP $MONTH.$DAY.$YEAR | $WC -l`
if ( test $X -ne 0)
then $ECHO $MONTH.$DAY.$YEAR” = “$X
fi
done
done

Wednesday, September 2, 2020

RAID STATS / Temperature to MRTG

MRTG wants 4 attributes.
In / Out / Uptime / Hostname.

So I put those 4 things into a file…. n4.$DRIVE
for each drive in the array. Then I’m going to use cron to run this
script (Below) which puts it on a samba share that has the server
that’s running MRTG. Which will also have a cron job that will be
polling that file every 5 minutes. Then running MRTG to grab that
data and store it in it’s log file.

Then It’ll give me out 5 sets of graphs with the temperature displayed
over the last 24 / 48 hours.

I used Drive Temp from SYSCTL
Raspberian Temperature to grab the CPU Temp (Which is an independent device from the drives)
as well as grabbing uptime and hostname…

root@nas4:~/bin# cat raidtemp.mrtg
#!/bin/bash
##########################################################
#
#    Use Smartctl to get drive temperature
#
##########################################################
GREP=/usr/bin/grep
CAT=/usr/bin/cat
ECHO=/usr/bin/echo
SCTL="/usr/sbin/smartctl --all"
FIND="ature_Cels"
DATE=`/usr/bin/date +"%m.%d.%y.%H.%M"`
AWK=/usr/bin/awk
CPUTEMP="/root/bin/temp"
FINDCPU="temp"
UPTIME=`/usr/bin/uptime`
HOSTNAME=`$CAT /etc/HOSTNAME`
FILELOC=/home/digitemp/n4

#
#  It'll ignore unfound drives, so list em all
#
DRIVES=(/dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf)
#
#
#
for i in "${DRIVES[@]}"
 do
   DRIVE=`$ECHO $i | $AWK -F/ '{print $3}'`
   TEMP=`$SCTL $i | $GREP $FIND | $AWK -F- '{print $2}' | $AWK '{print $1}'`
   CPUTMP=`$CPUTEMP | $GREP $FINDCPU | $AWK -F: '{print $2}' | $AWK -F. '{print $1}'`

   if [ ! -z "$TEMP" ]
   then
    $ECHO $TEMP > $FILELOC.$DRIVE
    $ECHO $CPUTMP >> $FILELOC.$DRIVE
    $ECHO $UPTIME >> $FILELOC.$DRIVE
    $ECHO $HOSTNAME >> $FILELOC.$DRIVE
   fi
 done

root@nas4:~/bin#

Getting temperature from the CPU is fairly simple / straightforward as well

root@nas4:~/bin# cat temp
#!/bin/bash

# SARPi Project : http://sarpi.fatdog.nl - cpu_status.sh
#
# Raspberry Pi 2, 3, 4 - CPU clock frequency and thermal status.
# This script outputs the current status of the CPU clock speed (MHz)
# and core temperature (Celsius) for monitoring or testing purposes
# while under load or idle.
#
# Usage -
# Default command:   watch ./cpu_status.sh     # 2 seconds refresh
# Timed refresh:     watch -n<number of seconds or 0> ./cpu_status.sh
# With highlights:   watch -d -n0 ./cpu_status.sh
# Perm highlights:   watch -d=cumulative -n0 ./cpu_status.sh
#
# Exaga : 15 Jan 2018 - progenitor
#         29 Jun 2019 - updated with rpi model & hw revision
#         03 Jul 2019 - updated with system uptime
#

# Get RPi model and hardware revision
RPiModel=$(dmesg | grep "Machine model:" | cut -d' ' -f10-16)
RPiHWRev=$(cat /proc/cpuinfo | grep Revision | cut -d' ' -f2)

# Get cpu_status function
cpu_status () {
# Get current CPU frequency (All 4 cores)
CPU0freq=$(cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq)
cpuFreq0=$(($CPU0freq/1000))
if [ -f /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_cur_freq ]; then
CPU1freq=$(cat /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_cur_freq)
cpuFreq1=$(($CPU1freq/1000))
CPU2freq=$(cat /sys/devices/system/cpu/cpu2/cpufreq/cpuinfo_cur_freq)
cpuFreq2=$(($CPU2freq/1000))
CPU3freq=$(cat /sys/devices/system/cpu/cpu3/cpufreq/cpuinfo_cur_freq)
cpuFreq3=$(($CPU3freq/1000))
fi

# Ouput RPi model/version and system uptime to terminal
echo Device": "$RPiModel
echo HW Rev": "$RPiHWRev
echo
echo Uptime":"$(uptime)
echo

# Output CPU clock status to terminal
echo CPU Clock Speed
echo CPU 0 freq": "$cpuFreq0"MHz"
if [ -f /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_cur_freq ]; then
echo CPU 1 freq": "$cpuFreq1"MHz"
echo CPU 2 freq": "$cpuFreq2"MHz"
echo CPU 3 freq": "$cpuFreq3"MHz"
fi
echo

# Get CPU thermal status and output to terminal
echo CPU Thermal Status
cpuTemp0=$(cat /sys/class/thermal/thermal_zone0/temp)
cpuTemp1=$(($cpuTemp0/1000))
cpuTemp2=$(($cpuTemp0/100))
cpuTempM=$(($cpuTemp2 % $cpuTemp1))
echo CPU temp": "$cpuTemp1"."$cpuTempM"°C"

# Output exit method to terminal
echo && echo && echo && echo
echo "[Press CTRL+C to exit.]"
}

# Roll cpu_status function
cpu_status

exit 0

#eofroot@nas4:~/bin#

And the Finished Product:


Friday, July 31, 2020

starting my own ddns.

have my own vm with westhost… barilin.com

using cron.

# Updated 2/9/19
2,7,12,17,22,27,32,37,42,47,52,57 * * * * /root/bin/reportipaddress &> /dev/null

I have it running the foloowing every 5 minutes…
pushing the IP Address up to my VM

root@cp1:~/bin# cat reportipaddress
DATE=/usr/bin/date
QUERY=""
QUERY="/usr/bin/curl http://barilin.com/whatipaddressami"
$QUERY
if [ "$QUERY" != "" ]; then
  $ECHO $DATE >> /var/log/reportipaddress.log
fi;
root@cp1:~/bin#

I have it report into my vm and have it query a non exsistant url..
Then I parse the logs every 5 mintues with cron

5,10,15,20,25,30,35,40,45,50,55,59 * * * * ~/bin/5minutes.sh

cron calls a script

[uscopley@sl-508-21 bin]$ cat 5minutes.sh
CAT=/usr/bin/cat
FILE="/home/uscopley/access-logs/barilin.com"
HEADHTML="/home/uscopley/bin/5minutes.head"
TAILHTML="/home/uscopley/bin/5minutes.tail"
GREP=/usr/bin/grep
TAIL="/usr/bin/tail -10"
STRING=whatipaddressami
REPORT="/home/uscopley/www/reportipaddress.html"
#
#
#
$CAT $HEADHTML > $REPORT
$CAT $FILE | $GREP $STRING | $TAIL >> $REPORT
$CAT $TAILHTML >> $REPORT
#
#
#

#cat ~/access-logs/barilin.com | grep whatipaddressami | tail -3 > ~/www/reportipaddress.html

The next part hasn’t been written yet. I’m going to grab that ip address that’s reported
and shove it into dns… With my home A name.

Thursday, July 30, 2020

whole lotta pies / Download config on reboot

So, I like to have all my pies download a set of configs at boot. Allows me to make a change
a centeralized location and push it out to everyone (When they reboot)

All pies get this in their /etc/rc.d/rc.local

/home/zero/updates/update.sh
#
/etc/sethostalias.sh > /etc/hostalias
#
/usr/sbin/netdate ntp1 >> /home/netdate/n3.netdate.log
#
sleep 20;
/etc/rc.d/rc.ntpd restart
#

and then of course /etc/fstab has a samba mounted share with the following

//cp1/zero      /home/zero      cifs      user=timc,pass=[password]       0   0

and the /home/zero/updates/update.sh has the following

#
#  Setup some variables
#
CP="/usr/bin/cp"
DIR="/home/zero/updates"
MKDIR="/usr/bin/mkdir"
#
#  Updatre aliases and hosts and profiles from CP1
#
$CP $DIR/sethostalias.sh /etc
$CP $DIR/hosts /etc
$CP $DIR/profile /etc
$CP $DIR/alias /etc
#
#  Make a bin directory for root on host
#
EDIR="/root/bin"
if [ ! -d $EDIR ]; then
  $MKDIR $EDIR
  $CP $DIR/bin/ $EDIR
fi
#
#  Couple files for Serial stuff on PI's
#
$CP $DIR/config.txt /root
$CP $DIR/cmdline.txt /root
$CP $DIR/inittab /root
#
# Couple fixes for snmp / ntp
$CP $DIR/rc.M /etc/rc.d/
$CP $DIR/snmpd.conf /etc/snmp/
$CP $DIR/ntp.conf /etc/

with all the appropiate file goodies. This seems to fluctuate based upon what I’m doing…