Initial capture from pfv-toolbox
This commit is contained in:
parent
fc76b8c518
commit
a5b5dd3e82
3
aliases
Normal file
3
aliases
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# See man 5 aliases for format
|
||||||
|
postmaster: root
|
||||||
|
root: prodtechopsalerts@turnsys.com
|
114
distro
Normal file
114
distro
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Detects which OS and if it is Linux then it will detect which Linux Distribution.
|
||||||
|
|
||||||
|
OS=`uname -s`
|
||||||
|
REV=`uname -r`
|
||||||
|
MACH=`uname -m`
|
||||||
|
|
||||||
|
if [ "${OS}" = "SunOS" ] ; then
|
||||||
|
OS=Solaris
|
||||||
|
ARCH=`uname -p`
|
||||||
|
OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
|
||||||
|
|
||||||
|
elif [ "${OS}" = "AIX" ] ; then
|
||||||
|
OSSTR="${OS} `oslevel` (`oslevel -r`)"
|
||||||
|
|
||||||
|
elif [ "${OS}" = "Linux" ] ; then
|
||||||
|
KERNEL=`uname -r`
|
||||||
|
|
||||||
|
if [ -f /etc/fedora-release ]; then
|
||||||
|
DIST=$(cat /etc/fedora-release | awk '{print $1}')
|
||||||
|
REV=`cat /etc/fedora-release | sed s/.*release\ // | sed s/\ .*//`
|
||||||
|
|
||||||
|
elif [ -f /etc/redhat-release ] ; then
|
||||||
|
DIST=$(cat /etc/redhat-release | awk '{print $1}')
|
||||||
|
if [ "${DIST}" = "CentOS" ]; then
|
||||||
|
DIST="CentOS"
|
||||||
|
elif [ "${DIST}" = "Mandriva" ]; then
|
||||||
|
DIST="Mandriva"
|
||||||
|
PSEUDONAME=`cat /etc/mandriva-release | sed s/.*\(// | sed s/\)//`
|
||||||
|
REV=`cat /etc/mandriva-release | sed s/.*release\ // | sed s/\ .*//`
|
||||||
|
elif [ -f /etc/oracle-release ]; then
|
||||||
|
DIST="Oracle"
|
||||||
|
else
|
||||||
|
DIST="RedHat"
|
||||||
|
fi
|
||||||
|
|
||||||
|
PSEUDONAME=`cat /etc/redhat-release | sed s/.*\(// | sed s/\)//`
|
||||||
|
REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//`
|
||||||
|
|
||||||
|
elif [ -f /etc/mandrake-release ] ; then
|
||||||
|
DIST='Mandrake'
|
||||||
|
PSEUDONAME=`cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//`
|
||||||
|
REV=`cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//`
|
||||||
|
|
||||||
|
elif [ -f /etc/devuan_version ] ; then
|
||||||
|
DIST="Devuan `cat /etc/devuan_version`"
|
||||||
|
REV=""
|
||||||
|
|
||||||
|
elif [ -f /etc/debian_version ] ; then
|
||||||
|
DIST="Debian `cat /etc/debian_version`"
|
||||||
|
REV=""
|
||||||
|
ID=`lsb_release -i | awk -F ':' '{print $2}' | sed 's/ //g'`
|
||||||
|
if [ "${ID}" = "Raspbian" ] ; then
|
||||||
|
DIST="Raspbian `cat /etc/debian_version`"
|
||||||
|
fi
|
||||||
|
|
||||||
|
elif [ -f /etc/gentoo-release ] ; then
|
||||||
|
DIST="Gentoo"
|
||||||
|
REV=$(tr -d '[[:alpha:]]' </etc/gentoo-release | tr -d " ")
|
||||||
|
|
||||||
|
elif [ -f /etc/arch-release ] ; then
|
||||||
|
DIST="Arch Linux"
|
||||||
|
REV="" # Omit version since Arch Linux uses rolling releases
|
||||||
|
IGNORE_LSB=1 # /etc/lsb-release would overwrite $REV with "rolling"
|
||||||
|
|
||||||
|
elif [ -f /etc/os-release ] ; then
|
||||||
|
DIST=$(grep '^NAME=' /etc/os-release | cut -d= -f2- | tr -d '"')
|
||||||
|
REV=$(grep '^VERSION_ID=' /etc/os-release | cut -d= -f2- | tr -d '"')
|
||||||
|
|
||||||
|
elif [ -f /etc/openwrt_version ] ; then
|
||||||
|
DIST="OpenWrt"
|
||||||
|
REV=$(cat /etc/openwrt_version)
|
||||||
|
|
||||||
|
elif [ -f /etc/pld-release ] ; then
|
||||||
|
DIST=$(cat /etc/pld-release)
|
||||||
|
REV=""
|
||||||
|
|
||||||
|
elif [ -f /etc/SuSE-release ] ; then
|
||||||
|
DIST=$(echo SLES $(grep VERSION /etc/SuSE-release | cut -d = -f 2 | tr -d " "))
|
||||||
|
REV=$(echo SP$(grep PATCHLEVEL /etc/SuSE-release | cut -d = -f 2 | tr -d " "))
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f /etc/lsb-release -a "${IGNORE_LSB}" != 1 ] ; then
|
||||||
|
LSB_DIST=$(lsb_release -si)
|
||||||
|
LSB_REV=$(lsb_release -sr)
|
||||||
|
if [ "$LSB_DIST" != "" ] ; then
|
||||||
|
DIST=$LSB_DIST
|
||||||
|
fi
|
||||||
|
if [ "$LSB_REV" != "" ] ; then
|
||||||
|
REV=$LSB_REV
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "`uname -a | awk '{print $(NF)}'`" = "DD-WRT" ] ; then
|
||||||
|
DIST="dd-wrt"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "${REV}" ]
|
||||||
|
then
|
||||||
|
OSSTR="${DIST} ${REV}"
|
||||||
|
else
|
||||||
|
OSSTR="${DIST}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
elif [ "${OS}" = "Darwin" ] ; then
|
||||||
|
if [ -f /usr/bin/sw_vers ] ; then
|
||||||
|
OSSTR=`/usr/bin/sw_vers|grep -v Build|sed 's/^.*:.//'| tr "\n" ' '`
|
||||||
|
fi
|
||||||
|
|
||||||
|
elif [ "${OS}" = "FreeBSD" ] ; then
|
||||||
|
OSSTR=`/usr/bin/uname -mior`
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ${OSSTR}
|
10
fixcpuperf.sh
Normal file
10
fixcpuperf.sh
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#Script to set performance.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cpufreq-set -r -g performance
|
||||||
|
cpupower frequency-set --governor performance
|
||||||
|
|
||||||
|
|
23
fixeth.sh
Normal file
23
fixeth.sh
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#magic to detect main int
|
||||||
|
echo "Determining management interface..."
|
||||||
|
#export MAIN_INT=$(brctl show $(netstat -rn|grep 0.0.0.0|head -n1|awk '{print $NF}') | awk '{print $NF}'|tail -1|awk -F '.' '{print $1}')
|
||||||
|
export MAIN_INT=$(brctl show|grep vmbr0|awk '{print $NF}'|awk -F '.' '{print $1}')
|
||||||
|
|
||||||
|
echo "Management interface is: $MAIN_INT"
|
||||||
|
|
||||||
|
#fix the issue
|
||||||
|
echo "Fixing management interface..."
|
||||||
|
ethtool -K $MAIN_INT tso off
|
||||||
|
ethtool -K $MAIN_INT gro off
|
||||||
|
ethtool -K $MAIN_INT gso off
|
||||||
|
ethtool -K $MAIN_INT tx off
|
||||||
|
ethtool -K $MAIN_INT rx off
|
||||||
|
|
||||||
|
#https://forum.proxmox.com/threads/e1000-driver-hang.58284/
|
||||||
|
#https://serverfault.com/questions/616485/e1000e-reset-adapter-unexpectedly-detected-hardware-unit-hang
|
||||||
|
|
||||||
|
|
8
installLynis.sh
Normal file
8
installLynis.sh
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
sudo wget -O - https://packages.cisofy.com/keys/cisofy-software-public.key | sudo apt-key add -
|
||||||
|
echo "deb https://packages.cisofy.com/community/lynis/deb/ stable main" | sudo tee /etc/apt/sources.list.d/cisofy-lynis.list
|
||||||
|
apt update
|
||||||
|
apt install lynis
|
||||||
|
lynis show version
|
||||||
|
|
10
k3spub
Normal file
10
k3spub
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#cnw key
|
||||||
|
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFb4pijULMJGGeNnb+MjdSp+Klf9DM6Tr+20k/fvUpYO7lDUCNGVyFi4PJoZYVWqtASSyiim1jIVFZSjOA400w/K+tTMs2miDOQdJVh2juXrqtIusyb0ecFGRZSH4XffA9Wul78V2QThztK18cI3ev7KaqF2cX2rOGuGJyVW6RG0Pt2TYywYuOP0kxGz7m1uQJ7MWw4zA/WUUCbZnkQLRn2Z8YlqYQI5GPvdTXjWvuAB0/zMVwCHOCVKhMs41RJX4BtpbuPGdfZwCGfCTbAVy86G+2UUIzLPd/cvOwmYHMbg6k2D6bqiN3pkRXCStgrfCJUCWoUBcfHKgLthcJ13Ul blink@ultix
|
||||||
|
|
||||||
|
#greyaxe key
|
||||||
|
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDsixPYk5uk7feocLDBpzkbaeb3hotqfZXyQySID/SlfH+YUzGsSgpq/MjcI+yZfUTAc8EfaAk2x6bwIEhMBYAUNQXiSW6nPRg/xRRLJ4tHXfQvqkQ+DGjWfiv6EWrqPWvFU/XUfkBQIItDD9TUkk/HZHtOCBCjhTMbwdMMH+lyDgFhPE6ozHoofH8rfYEbFhRgvruzKUFuo9q09t6nYNhPONtP8BGoBkkjgW+PCI+0u3QE2oKFb+ua0hmnUsJPUNZ5eO5m1ClVZzKx7kjl1NBPrQPvHlumYbcCTyTwBjjoQzQaPM4bumlDpq4eQvrIqh9fMlc/WkYfIliGQe7oOwuE2btj50cKpDzRfO/1ygPmrC6E0/NY9j9HPQBgHrUklJHG4QiGhbkWMgyhJYeR3bMbNgys+xE7rcfCQ4g1vw6xNATtUIPlMOd3e6e8uUETckury4xVunScO7XRjxzvMXk08enHsjErnjZdcfQcHzb+NSAJMlv3/Yv03zzwUHBe7o3ov1mYsNmSPJftt9qaHqwnRQaJ/7yD7v8c3c3txYnQ4vLSAcFlS6ocqDxi9OnUJ1IZTblX/MSZ0tJrRBo/zm459Gm5zwf+DqUx8p+bQeNKpOJ03TbwpF2ZOGb9IctRdI1eOKBq3Cn4FUm26Gb73lmhDiiu8r3ufzw3aUy6OMQiww==
|
||||||
|
|
||||||
|
|
||||||
|
#bkaplan key
|
||||||
|
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqieRkKL2ZgURGnV30W77y4BZvZwdzMBW1e+Vn23tDlU9q7deRMAfxDmYmeSwMxdw9TgLT+vP9p0yJT7d5S+whfw0AZ2uXjUGGpkNFsLiO2ZXbm8Rkrj6ioPFcqrYWuq4UOT85z+XBVmBlb0QbemEsjEO/KBF+qRMO4SZyjaYZVprZ6IAiMiQMTQzRlJm3/b438+kd3sLGk6+FkhpEj2XYE0X+YHLHC8YIACcmbYAw+Q/Ase2++BekGnQFOGnR+YzWsBEpoS2bwe/yZ5jaAd8pcNlxCNHXjHKNZqqIwL+eCFC47gMD8c5kSq8VKQYxFI9iOXW1k1CUqhX+ANZFgxNJ brianwk@Brians-MacBook-Pro.local
|
||||||
|
|
BIN
librenms.tar.gz
Normal file
BIN
librenms.tar.gz
Normal file
Binary file not shown.
114
librenms/distro
Normal file
114
librenms/distro
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Detects which OS and if it is Linux then it will detect which Linux Distribution.
|
||||||
|
|
||||||
|
OS=`uname -s`
|
||||||
|
REV=`uname -r`
|
||||||
|
MACH=`uname -m`
|
||||||
|
|
||||||
|
if [ "${OS}" = "SunOS" ] ; then
|
||||||
|
OS=Solaris
|
||||||
|
ARCH=`uname -p`
|
||||||
|
OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
|
||||||
|
|
||||||
|
elif [ "${OS}" = "AIX" ] ; then
|
||||||
|
OSSTR="${OS} `oslevel` (`oslevel -r`)"
|
||||||
|
|
||||||
|
elif [ "${OS}" = "Linux" ] ; then
|
||||||
|
KERNEL=`uname -r`
|
||||||
|
|
||||||
|
if [ -f /etc/fedora-release ]; then
|
||||||
|
DIST=$(cat /etc/fedora-release | awk '{print $1}')
|
||||||
|
REV=`cat /etc/fedora-release | sed s/.*release\ // | sed s/\ .*//`
|
||||||
|
|
||||||
|
elif [ -f /etc/redhat-release ] ; then
|
||||||
|
DIST=$(cat /etc/redhat-release | awk '{print $1}')
|
||||||
|
if [ "${DIST}" = "CentOS" ]; then
|
||||||
|
DIST="CentOS"
|
||||||
|
elif [ "${DIST}" = "Mandriva" ]; then
|
||||||
|
DIST="Mandriva"
|
||||||
|
PSEUDONAME=`cat /etc/mandriva-release | sed s/.*\(// | sed s/\)//`
|
||||||
|
REV=`cat /etc/mandriva-release | sed s/.*release\ // | sed s/\ .*//`
|
||||||
|
elif [ -f /etc/oracle-release ]; then
|
||||||
|
DIST="Oracle"
|
||||||
|
else
|
||||||
|
DIST="RedHat"
|
||||||
|
fi
|
||||||
|
|
||||||
|
PSEUDONAME=`cat /etc/redhat-release | sed s/.*\(// | sed s/\)//`
|
||||||
|
REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//`
|
||||||
|
|
||||||
|
elif [ -f /etc/mandrake-release ] ; then
|
||||||
|
DIST='Mandrake'
|
||||||
|
PSEUDONAME=`cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//`
|
||||||
|
REV=`cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//`
|
||||||
|
|
||||||
|
elif [ -f /etc/devuan_version ] ; then
|
||||||
|
DIST="Devuan `cat /etc/devuan_version`"
|
||||||
|
REV=""
|
||||||
|
|
||||||
|
elif [ -f /etc/debian_version ] ; then
|
||||||
|
DIST="Debian `cat /etc/debian_version`"
|
||||||
|
REV=""
|
||||||
|
ID=`lsb_release -i | awk -F ':' '{print $2}' | sed 's/ //g'`
|
||||||
|
if [ "${ID}" = "Raspbian" ] ; then
|
||||||
|
DIST="Raspbian `cat /etc/debian_version`"
|
||||||
|
fi
|
||||||
|
|
||||||
|
elif [ -f /etc/gentoo-release ] ; then
|
||||||
|
DIST="Gentoo"
|
||||||
|
REV=$(tr -d '[[:alpha:]]' </etc/gentoo-release | tr -d " ")
|
||||||
|
|
||||||
|
elif [ -f /etc/arch-release ] ; then
|
||||||
|
DIST="Arch Linux"
|
||||||
|
REV="" # Omit version since Arch Linux uses rolling releases
|
||||||
|
IGNORE_LSB=1 # /etc/lsb-release would overwrite $REV with "rolling"
|
||||||
|
|
||||||
|
elif [ -f /etc/os-release ] ; then
|
||||||
|
DIST=$(grep '^NAME=' /etc/os-release | cut -d= -f2- | tr -d '"')
|
||||||
|
REV=$(grep '^VERSION_ID=' /etc/os-release | cut -d= -f2- | tr -d '"')
|
||||||
|
|
||||||
|
elif [ -f /etc/openwrt_version ] ; then
|
||||||
|
DIST="OpenWrt"
|
||||||
|
REV=$(cat /etc/openwrt_version)
|
||||||
|
|
||||||
|
elif [ -f /etc/pld-release ] ; then
|
||||||
|
DIST=$(cat /etc/pld-release)
|
||||||
|
REV=""
|
||||||
|
|
||||||
|
elif [ -f /etc/SuSE-release ] ; then
|
||||||
|
DIST=$(echo SLES $(grep VERSION /etc/SuSE-release | cut -d = -f 2 | tr -d " "))
|
||||||
|
REV=$(echo SP$(grep PATCHLEVEL /etc/SuSE-release | cut -d = -f 2 | tr -d " "))
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f /etc/lsb-release -a "${IGNORE_LSB}" != 1 ] ; then
|
||||||
|
LSB_DIST=$(lsb_release -si)
|
||||||
|
LSB_REV=$(lsb_release -sr)
|
||||||
|
if [ "$LSB_DIST" != "" ] ; then
|
||||||
|
DIST=$LSB_DIST
|
||||||
|
fi
|
||||||
|
if [ "$LSB_REV" != "" ] ; then
|
||||||
|
REV=$LSB_REV
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "`uname -a | awk '{print $(NF)}'`" = "DD-WRT" ] ; then
|
||||||
|
DIST="dd-wrt"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "${REV}" ]
|
||||||
|
then
|
||||||
|
OSSTR="${DIST} ${REV}"
|
||||||
|
else
|
||||||
|
OSSTR="${DIST}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
elif [ "${OS}" = "Darwin" ] ; then
|
||||||
|
if [ -f /usr/bin/sw_vers ] ; then
|
||||||
|
OSSTR=`/usr/bin/sw_vers|grep -v Build|sed 's/^.*:.//'| tr "\n" ' '`
|
||||||
|
fi
|
||||||
|
|
||||||
|
elif [ "${OS}" = "FreeBSD" ] ; then
|
||||||
|
OSSTR=`/usr/bin/uname -mior`
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ${OSSTR}
|
25
librenms/ntp-client.sh
Normal file
25
librenms/ntp-client.sh
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
################################################################
|
||||||
|
# copy this script to somewhere like /opt and make chmod +x it #
|
||||||
|
# edit your snmpd.conf and include #
|
||||||
|
# extend ntp-client /opt/ntp-client.sh #
|
||||||
|
# restart snmpd and activate the app for desired host #
|
||||||
|
# please make sure you have the path/binaries below #
|
||||||
|
################################################################
|
||||||
|
# Binaries and paths required #
|
||||||
|
################################################################
|
||||||
|
BIN_NTPQ="$(command -v ntpq)"
|
||||||
|
BIN_GREP="$(command -v grep)"
|
||||||
|
BIN_TR="$(command -v tr)"
|
||||||
|
BIN_CUT="$(command -v cut)"
|
||||||
|
################################################################
|
||||||
|
# Don't change anything unless you know what are you doing #
|
||||||
|
################################################################
|
||||||
|
CMD1=`$BIN_NTPQ -c rv | $BIN_GREP 'jitter' | $BIN_TR '\n' ' '`
|
||||||
|
IFS=', ' read -r -a array <<< "$CMD1"
|
||||||
|
|
||||||
|
for value in 2 3 4 5 6
|
||||||
|
do
|
||||||
|
echo ${array["$value"]} | $BIN_CUT -d "=" -f 2
|
||||||
|
done
|
||||||
|
|
89
librenms/ntp-server.sh
Normal file
89
librenms/ntp-server.sh
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Please make sure the paths below are correct.
|
||||||
|
# Alternatively you can put them in $0.conf, meaning if you've named
|
||||||
|
# this script ntp-client.sh then it must go in ntp-client.sh.conf .
|
||||||
|
#
|
||||||
|
# NTPQV output version of "ntpq -c rv"
|
||||||
|
# p1 DD-WRT and some other outdated linux distros
|
||||||
|
# p11 FreeBSD 11 and any linux distro that is up to date
|
||||||
|
#
|
||||||
|
# If you are unsure, which to set, run this script and make sure that
|
||||||
|
# the JSON output variables match that in "ntpq -c rv".
|
||||||
|
#
|
||||||
|
BIN_NTPD='/usr/bin/env ntpd'
|
||||||
|
BIN_NTPQ='/usr/bin/env ntpq'
|
||||||
|
BIN_NTPDC='/usr/bin/env ntpdc'
|
||||||
|
BIN_GREP='/usr/bin/env grep'
|
||||||
|
BIN_TR='/usr/bin/env tr'
|
||||||
|
BIN_CUT='/usr/bin/env cut'
|
||||||
|
BIN_SED="/usr/bin/env sed"
|
||||||
|
BIN_AWK='/usr/bin/env awk'
|
||||||
|
NTPQV="p11"
|
||||||
|
################################################################
|
||||||
|
# Don't change anything unless you know what are you doing #
|
||||||
|
################################################################
|
||||||
|
CONFIG=$0".conf"
|
||||||
|
if [ -f $CONFIG ]; then
|
||||||
|
. $CONFIG
|
||||||
|
fi
|
||||||
|
VERSION=1
|
||||||
|
|
||||||
|
STRATUM=`$BIN_NTPQ -c rv | $BIN_GREP -Eow "stratum=[0-9]+" | $BIN_CUT -d "=" -f 2`
|
||||||
|
|
||||||
|
# parse the ntpq info that requires version specific info
|
||||||
|
NTPQ_RAW=`$BIN_NTPQ -c rv | $BIN_GREP jitter | $BIN_SED 's/[[:alpha:]=,_]/ /g'`
|
||||||
|
if [ $NTPQV = "p11" ]; then
|
||||||
|
OFFSET=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $3}'`
|
||||||
|
FREQUENCY=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $4}'`
|
||||||
|
SYS_JITTER=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $5}'`
|
||||||
|
CLK_JITTER=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $6}'`
|
||||||
|
CLK_WANDER=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $7}'`
|
||||||
|
fi
|
||||||
|
if [ $NTPQV = "p1" ]; then
|
||||||
|
OFFSET=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $2}'`
|
||||||
|
FREQUENCY=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $3}'`
|
||||||
|
SYS_JITTER=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $4}'`
|
||||||
|
CLK_JITTER=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $5}'`
|
||||||
|
CLK_WANDER=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $6}'`
|
||||||
|
fi
|
||||||
|
|
||||||
|
VER=`$BIN_NTPD --version`
|
||||||
|
if [ "$VER" = '4.2.6p5' ]; then
|
||||||
|
USECMD=`echo $BIN_NTPDC -c iostats`
|
||||||
|
else
|
||||||
|
USECMD=`echo $BIN_NTPQ -c iostats localhost`
|
||||||
|
fi
|
||||||
|
CMD2=`$USECMD | $BIN_TR -d ' ' | $BIN_CUT -d : -f 2 | $BIN_TR '\n' ' '`
|
||||||
|
|
||||||
|
TIMESINCERESET=`echo $CMD2 | $BIN_AWK -F ' ' '{print $1}'`
|
||||||
|
RECEIVEDBUFFERS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $2}'`
|
||||||
|
FREERECEIVEBUFFERS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $3}'`
|
||||||
|
USEDRECEIVEBUFFERS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $4}'`
|
||||||
|
LOWWATERREFILLS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $5}'`
|
||||||
|
DROPPEDPACKETS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $6}'`
|
||||||
|
IGNOREDPACKETS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $7}'`
|
||||||
|
RECEIVEDPACKETS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $8}'`
|
||||||
|
PACKETSSENT=`echo $CMD2 | $BIN_AWK -F ' ' '{print $9}'`
|
||||||
|
PACKETSENDFAILURES=`echo $CMD2 | $BIN_AWK -F ' ' '{print $10}'`
|
||||||
|
INPUTWAKEUPS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $11}'`
|
||||||
|
USEFULINPUTWAKEUPS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $12}'`
|
||||||
|
|
||||||
|
echo '{"data":{"offset":"'$OFFSET\
|
||||||
|
'","frequency":"'$FREQUENCY\
|
||||||
|
'","sys_jitter":"'$SYS_JITTER\
|
||||||
|
'","clk_jitter":"'$CLK_JITTER\
|
||||||
|
'","clk_wander":"'$CLK_WANDER\
|
||||||
|
'","stratum":"'$STRATUM\
|
||||||
|
'","time_since_reset":"'$TIMESINCERESET\
|
||||||
|
'","receive_buffers":"'$RECEIVEDBUFFERS\
|
||||||
|
'","free_receive_buffers":"'$FREERECEIVEBUFFERS\
|
||||||
|
'","used_receive_buffers":"'$USEDRECEIVEBUFFERS\
|
||||||
|
'","low_water_refills":"'$LOWWATERREFILLS\
|
||||||
|
'","dropped_packets":"'$DROPPEDPACKETS\
|
||||||
|
'","ignored_packets":"'$IGNOREDPACKETS\
|
||||||
|
'","received_packets":"'$RECEIVEDPACKETS\
|
||||||
|
'","packets_sent":"'$PACKETSSENT\
|
||||||
|
'","packet_send_failures":"'$PACKETSENDFAILURES\
|
||||||
|
'","input_wakeups":"'$PACKETSENDFAILURES\
|
||||||
|
'","useful_input_wakeups":"'$USEFULINPUTWAKEUPS\
|
||||||
|
'"},"error":"0","errorString":"","version":"'$VERSION'"}'
|
73
librenms/os-updates.sh
Normal file
73
librenms/os-updates.sh
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
################################################################
|
||||||
|
# copy this script to /etc/snmp/ and make it executable: #
|
||||||
|
# chmod +x /etc/snmp/os-updates.sh #
|
||||||
|
# ------------------------------------------------------------ #
|
||||||
|
# edit your snmpd.conf and include: #
|
||||||
|
# extend osupdate /opt/os-updates.sh #
|
||||||
|
#--------------------------------------------------------------#
|
||||||
|
# restart snmpd and activate the app for desired host #
|
||||||
|
#--------------------------------------------------------------#
|
||||||
|
# please make sure you have the path/binaries below #
|
||||||
|
################################################################
|
||||||
|
BIN_WC='/usr/bin/wc'
|
||||||
|
BIN_GREP='/bin/grep'
|
||||||
|
CMD_GREP='-c'
|
||||||
|
CMD_WC='-l'
|
||||||
|
BIN_ZYPPER='/usr/bin/zypper'
|
||||||
|
CMD_ZYPPER='-q lu'
|
||||||
|
BIN_YUM='/usr/bin/yum'
|
||||||
|
CMD_YUM='-q check-update'
|
||||||
|
BIN_DNF='/usr/bin/dnf'
|
||||||
|
CMD_DNF='-q check-update'
|
||||||
|
BIN_APT='/usr/bin/apt-get'
|
||||||
|
CMD_APT='-qq -s upgrade'
|
||||||
|
BIN_PACMAN='/usr/bin/pacman'
|
||||||
|
CMD_PACMAN='-Sup'
|
||||||
|
|
||||||
|
################################################################
|
||||||
|
# Don't change anything unless you know what are you doing #
|
||||||
|
################################################################
|
||||||
|
if [ -f $BIN_ZYPPER ]; then
|
||||||
|
# OpenSUSE
|
||||||
|
UPDATES=`$BIN_ZYPPER $CMD_ZYPPER | $BIN_WC $CMD_WC`
|
||||||
|
if [ $UPDATES -ge 2 ]; then
|
||||||
|
echo $(($UPDATES-2));
|
||||||
|
else
|
||||||
|
echo "0";
|
||||||
|
fi
|
||||||
|
elif [ -f $BIN_DNF ]; then
|
||||||
|
# Fedora
|
||||||
|
UPDATES=`$BIN_DNF $CMD_DNF | $BIN_WC $CMD_WC`
|
||||||
|
if [ $UPDATES -ge 1 ]; then
|
||||||
|
echo $(($UPDATES-1));
|
||||||
|
else
|
||||||
|
echo "0";
|
||||||
|
fi
|
||||||
|
elif [ -f $BIN_PACMAN ]; then
|
||||||
|
# Arch
|
||||||
|
UPDATES=`$BIN_PACMAN $CMD_PACMAN | $BIN_WC $CMD_WC`
|
||||||
|
if [ $UPDATES -ge 1 ]; then
|
||||||
|
echo $(($UPDATES-1));
|
||||||
|
else
|
||||||
|
echo "0";
|
||||||
|
fi
|
||||||
|
elif [ -f $BIN_YUM ]; then
|
||||||
|
# CentOS / Redhat
|
||||||
|
UPDATES=`$BIN_YUM $CMD_YUM | $BIN_WC $CMD_WC`
|
||||||
|
if [ $UPDATES -ge 1 ]; then
|
||||||
|
echo $(($UPDATES-1));
|
||||||
|
else
|
||||||
|
echo "0";
|
||||||
|
fi
|
||||||
|
elif [ -f $BIN_APT ]; then
|
||||||
|
# Debian / Devuan / Ubuntu
|
||||||
|
UPDATES=`$BIN_APT $CMD_APT | $BIN_GREP $CMD_GREP 'Inst'`
|
||||||
|
if [ $UPDATES -ge 1 ]; then
|
||||||
|
echo $UPDATES;
|
||||||
|
else
|
||||||
|
echo "0";
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "0";
|
||||||
|
fi
|
13
librenms/postfix-queues
Normal file
13
librenms/postfix-queues
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#Written by Valec 2006. Steal and share.
|
||||||
|
#Get postfix queue lengths
|
||||||
|
|
||||||
|
#extend mailq /opt/observer/scripts/getmailq.sh
|
||||||
|
|
||||||
|
QUEUES="incoming active deferred hold"
|
||||||
|
|
||||||
|
for i in $QUEUES; do
|
||||||
|
COUNT=`qshape $i | grep TOTAL | awk '{print $2}'`
|
||||||
|
printf "$COUNT\n"
|
||||||
|
done
|
545
librenms/postfixdetailed
Normal file
545
librenms/postfixdetailed
Normal file
@ -0,0 +1,545 @@
|
|||||||
|
#!/usr/bin/env perl
|
||||||
|
|
||||||
|
# add this to your snmpd.conf file as below
|
||||||
|
# extend postfixdetailed /etc/snmp/postfixdetailed
|
||||||
|
|
||||||
|
# The cache file to use.
|
||||||
|
my $cache='/var/cache/postfixdetailed';
|
||||||
|
|
||||||
|
# the location of pflogsumm
|
||||||
|
my $pflogsumm='/usr/bin/env pflogsumm';
|
||||||
|
|
||||||
|
#totals
|
||||||
|
# 847 received = received
|
||||||
|
# 852 delivered = delivered
|
||||||
|
# 0 forwarded = forwarded
|
||||||
|
# 3 deferred (67 deferrals)= deferred
|
||||||
|
# 0 bounced = bounced
|
||||||
|
# 593 rejected (41%) = rejected
|
||||||
|
# 0 reject warnings = rejectw
|
||||||
|
# 0 held = held
|
||||||
|
# 0 discarded (0%) = discarded
|
||||||
|
|
||||||
|
# 16899k bytes received = bytesr
|
||||||
|
# 18009k bytes delivered = bytesd
|
||||||
|
# 415 senders = senders
|
||||||
|
# 266 sending hosts/domains = sendinghd
|
||||||
|
# 15 recipients = recipients
|
||||||
|
# 9 recipient hosts/domains = recipienthd
|
||||||
|
|
||||||
|
######message deferral detail
|
||||||
|
#Connection refused = deferralcr
|
||||||
|
#Host is down = deferralhid
|
||||||
|
|
||||||
|
########message reject detail
|
||||||
|
#Client host rejected = chr
|
||||||
|
#Helo command rejected: need fully-qualified hostname = hcrnfqh
|
||||||
|
#Sender address rejected: Domain not found = sardnf
|
||||||
|
#Sender address rejected: not owned by user = sarnobu
|
||||||
|
#blocked using = bu
|
||||||
|
#Recipient address rejected: User unknown = raruu
|
||||||
|
#Helo command rejected: Invalid name = hcrin
|
||||||
|
#Sender address rejected: need fully-qualified address = sarnfqa
|
||||||
|
#Recipient address rejected: Domain not found = rardnf
|
||||||
|
#Recipient address rejected: need fully-qualified address = rarnfqa
|
||||||
|
#Improper use of SMTP command pipelining = iuscp
|
||||||
|
#Message size exceeds fixed limit = msefl
|
||||||
|
#Server configuration error = sce
|
||||||
|
#Server configuration problem = scp
|
||||||
|
#unknown reject reason = urr
|
||||||
|
|
||||||
|
my $old='';
|
||||||
|
|
||||||
|
#reads in the old data if it exists
|
||||||
|
if ( -f $cache ){
|
||||||
|
open(my $fh, "<", $cache) or die "Can't open '".$cache."'";
|
||||||
|
# if this is over 2048, something is most likely wrong
|
||||||
|
read($fh , $old , 2048);
|
||||||
|
close($fh);
|
||||||
|
}
|
||||||
|
|
||||||
|
my ( $received,
|
||||||
|
$delivered,
|
||||||
|
$forwarded,
|
||||||
|
$deferred,
|
||||||
|
$bounced,
|
||||||
|
$rejected,
|
||||||
|
$rejectw,
|
||||||
|
$held,
|
||||||
|
$discarded,
|
||||||
|
$bytesr,
|
||||||
|
$bytesd,
|
||||||
|
$senders,
|
||||||
|
$sendinghd,
|
||||||
|
$recipients,
|
||||||
|
$recipienthd,
|
||||||
|
$deferralcr,
|
||||||
|
$deferralhid,
|
||||||
|
$chr,
|
||||||
|
$hcrnfqh,
|
||||||
|
$sardnf,
|
||||||
|
$sarnobu,
|
||||||
|
$bu,
|
||||||
|
$raruu,
|
||||||
|
$hcrin,
|
||||||
|
$sarnfqa,
|
||||||
|
$rardnf,
|
||||||
|
$rarnfqa,
|
||||||
|
$iuscp,
|
||||||
|
$msefl,
|
||||||
|
$sce,
|
||||||
|
$scp,
|
||||||
|
$urr) = split ( /\n/, $old );
|
||||||
|
|
||||||
|
if ( ! defined( $received ) ){ $received=0; }
|
||||||
|
if ( ! defined( $delivered ) ){ $delivered=0; }
|
||||||
|
if ( ! defined( $forwarded ) ){ $forwarded=0; }
|
||||||
|
if ( ! defined( $deferred ) ){ $deferred=0; }
|
||||||
|
if ( ! defined( $bounced ) ){ $bounced=0; }
|
||||||
|
if ( ! defined( $rejected ) ){ $rejected=0; }
|
||||||
|
if ( ! defined( $rejectw ) ){ $rejectw=0; }
|
||||||
|
if ( ! defined( $held ) ){ $held=0; }
|
||||||
|
if ( ! defined( $discarded ) ){ $discarded=0; }
|
||||||
|
if ( ! defined( $bytesr ) ){ $bytesr=0; }
|
||||||
|
if ( ! defined( $bytesd ) ){ $bytesd=0; }
|
||||||
|
if ( ! defined( $senders ) ){ $senders=0; }
|
||||||
|
if ( ! defined( $sendinghd ) ){ $sendinghd=0; }
|
||||||
|
if ( ! defined( $recipients ) ){ $recipients=0; }
|
||||||
|
if ( ! defined( $recipienthd ) ){ $recipienthd=0; }
|
||||||
|
if ( ! defined( $deferralcr ) ){ $deferralcr=0; }
|
||||||
|
if ( ! defined( $deferralhid ) ){ $deferralhid=0; }
|
||||||
|
if ( ! defined( $chr ) ){ $chr=0; }
|
||||||
|
if ( ! defined( $hcrnfqh ) ){ $hcrnfqh=0; }
|
||||||
|
if ( ! defined( $sardnf ) ){ $sardnf=0; }
|
||||||
|
if ( ! defined( $sarnobu ) ){ $sarnobu=0; }
|
||||||
|
if ( ! defined( $bu ) ){ $bu=0; }
|
||||||
|
if ( ! defined( $raruu ) ){ $raruu=0; }
|
||||||
|
if ( ! defined( $hcrin ) ){ $hcrin=0; }
|
||||||
|
if ( ! defined( $sarnfqa ) ){ $sarnfqa=0; }
|
||||||
|
if ( ! defined( $rardnf ) ){ $rardnf=0; }
|
||||||
|
if ( ! defined( $rarnfqa ) ){ $rarnfqa=0; }
|
||||||
|
if ( ! defined( $iuscp ) ){ $iuscp=0; }
|
||||||
|
if ( ! defined( $msefl ) ){ $msefl=0; }
|
||||||
|
if ( ! defined( $sce ) ){ $sce=0; }
|
||||||
|
if ( ! defined( $scp ) ){ $scp=0; }
|
||||||
|
if ( ! defined( $urr ) ){ $urr=0; }
|
||||||
|
|
||||||
|
#init current variables
|
||||||
|
my $receivedC=0;
|
||||||
|
my $deliveredC=0;
|
||||||
|
my $forwardedC=0;
|
||||||
|
my $deferredC=0;
|
||||||
|
my $bouncedC=0;
|
||||||
|
my $rejectedC=0;
|
||||||
|
my $rejectwC=0;
|
||||||
|
my $heldC=0;
|
||||||
|
my $discardedC=0;
|
||||||
|
my $bytesrC=0;
|
||||||
|
my $bytesdC=0;
|
||||||
|
my $sendersC=0;
|
||||||
|
my $sendinghdC=0;
|
||||||
|
my $recipientsC=0;
|
||||||
|
my $recipienthdC=0;
|
||||||
|
my $deferralcrC=0;
|
||||||
|
my $deferralhidC=0;
|
||||||
|
my $chrC=0;
|
||||||
|
my $hcrnfqhC=0;
|
||||||
|
my $sardnfC=0;
|
||||||
|
my $sarnobuC=0;
|
||||||
|
my $buC=0;
|
||||||
|
my $raruuC=0;
|
||||||
|
my $hcrinC=0;
|
||||||
|
my $sarnfqaC=0;
|
||||||
|
my $rardnfC=0;
|
||||||
|
my $rarnfqaC=0;
|
||||||
|
my $iuscpC=0;
|
||||||
|
my $mseflC=0;
|
||||||
|
my $sceC=0;
|
||||||
|
my $scpC=0;
|
||||||
|
my $urrC=0;
|
||||||
|
|
||||||
|
sub newValue{
|
||||||
|
my $old=$_[0];
|
||||||
|
my $new=$_[1];
|
||||||
|
|
||||||
|
#if new is undefined, just default to 0... this should never happen
|
||||||
|
if ( !defined( $new ) ){
|
||||||
|
warn('New not defined');
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sets it to 0 if old is not defined
|
||||||
|
if ( !defined( $old ) ){
|
||||||
|
warn('Old not defined');
|
||||||
|
$old=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#make sure they are both numberic and if not set to zero
|
||||||
|
if( $old !~ /^[0123456789]*$/ ){
|
||||||
|
warn('Old not numeric');
|
||||||
|
$old=0;
|
||||||
|
}
|
||||||
|
if( $new !~ /^[0123456789]*$/ ){
|
||||||
|
warn('New not numeric');
|
||||||
|
$new=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#log rotation happened
|
||||||
|
if ( $old > $new ){
|
||||||
|
return $new;
|
||||||
|
};
|
||||||
|
|
||||||
|
return $new - $old;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
my $output=`$pflogsumm /var/log/mail.log`;
|
||||||
|
|
||||||
|
#holds client host rejected values till the end when it is compared to the old one
|
||||||
|
my $chrNew=0;
|
||||||
|
|
||||||
|
#holds RBL values till the end when it is compared to the old one
|
||||||
|
my $buNew=0;
|
||||||
|
|
||||||
|
# holds recipient address rejected values till the end when it is compared to the old one
|
||||||
|
my $raruuNew=0;
|
||||||
|
|
||||||
|
#holds the current values for checking later
|
||||||
|
my $current='';
|
||||||
|
|
||||||
|
my @outputA=split( /\n/, $output );
|
||||||
|
my $int=0;
|
||||||
|
while ( defined( $outputA[$int] ) ){
|
||||||
|
my $line=$outputA[$int];
|
||||||
|
|
||||||
|
$line=~s/^ *//;
|
||||||
|
$line=~s/ +/ /g;
|
||||||
|
$line=~s/\)$//;
|
||||||
|
|
||||||
|
my $handled=0;
|
||||||
|
|
||||||
|
#received line
|
||||||
|
if ( ( $line =~ /[0123456789] received$/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/ .*//;
|
||||||
|
$receivedC=$line;
|
||||||
|
$received=newValue( $received, $line );
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#delivered line
|
||||||
|
if ( ( $line =~ /[0123456789] delivered$/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/ .*//;
|
||||||
|
$deliveredC=$line;
|
||||||
|
$delivered=newValue( $delivered, $line );
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#forward line
|
||||||
|
if ( ( $line =~ /[0123456789] forwarded$/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/ .*//;
|
||||||
|
$forwardedC=$line;
|
||||||
|
$forwarded=newValue( $forwarded, $line );
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#defereed line
|
||||||
|
if ( ( $line =~ /[0123456789] deferred \(/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/ .*//;
|
||||||
|
$deferredC=$line;
|
||||||
|
$deferred=newValue( $deferred, $line );
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bounced line
|
||||||
|
if ( ( $line =~ /[0123456789] bounced$/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/ .*//;
|
||||||
|
$bouncedC=$line;
|
||||||
|
$bounced=newValue( $bounced, $line );
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#rejected line
|
||||||
|
if ( ( $line =~ /[0123456789] rejected \(/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/ .*//;
|
||||||
|
$rejectedC=$line;
|
||||||
|
$rejected=newValue( $rejected, $line );
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#reject warning line
|
||||||
|
if ( ( $line =~ /[0123456789] reject warnings/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/ .*//;
|
||||||
|
$rejectwC=$line;
|
||||||
|
$rejectw=newValue( $rejectw, $line );
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#held line
|
||||||
|
if ( ( $line =~ /[0123456789] held$/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/ .*//;
|
||||||
|
$heldC=$line;
|
||||||
|
$held=newValue( $held, $line );
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#discarded line
|
||||||
|
if ( ( $line =~ /[0123456789] discarded \(/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/ .*//;
|
||||||
|
$discardedC=$line;
|
||||||
|
$discarded=newValue( $discarded, $line );
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bytes received line
|
||||||
|
if ( ( $line =~ /[0123456789kM] bytes received$/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/ .*//;
|
||||||
|
$line=~s/k/000/;
|
||||||
|
$line=~s/M/000000/;
|
||||||
|
$bytesrC=$line;
|
||||||
|
$bytesr=newValue( $bytesr, $line );
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bytes delivered line
|
||||||
|
if ( ( $line =~ /[0123456789kM] bytes delivered$/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/ .*//;
|
||||||
|
$line=~s/k/000/;
|
||||||
|
$line=~s/M/000000/;
|
||||||
|
$bytesdC=$line;
|
||||||
|
$bytesd=newValue( $bytesd, $line );
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#senders line
|
||||||
|
if ( ( $line =~ /[0123456789] senders$/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/ .*//;
|
||||||
|
$sendersC=$line;
|
||||||
|
$senders=newValue( $senders, $line );
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sendering hosts/domains line
|
||||||
|
if ( ( $line =~ /[0123456789] sending hosts\/domains$/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/ .*//;
|
||||||
|
$sendinghdC=$line;
|
||||||
|
$sendinghd=newValue( $sendinghd, $line );
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#recipients line
|
||||||
|
if ( ( $line =~ /[0123456789] recipients$/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/ .*//;
|
||||||
|
$recipientsC=$line;
|
||||||
|
$recipients=newValue( $recipients, $line );
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#recipients line
|
||||||
|
if ( ( $line =~ /[0123456789] recipient hosts\/domains$/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/ .*//;
|
||||||
|
$recipienthdC=$line;
|
||||||
|
$recipienthd=newValue( $recipienthd, $line );
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
# deferrals connectios refused
|
||||||
|
if ( ( $line =~ /[0123456789] 25\: Connection refused$/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/ .*//;
|
||||||
|
$deferralcrC=$line;
|
||||||
|
$deferralcr=newValue( $deferralcr, $line );
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
# deferrals Host is down
|
||||||
|
if ( ( $line =~ /Host is down$/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/ .*//;
|
||||||
|
$deferralhidC=$line;
|
||||||
|
$deferralhid=newValue( $deferralhid, $line );
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Client host rejected
|
||||||
|
if ( ( $line =~ /Client host rejected/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/.*\: //g;
|
||||||
|
$chrNew=$chrNew + $line;
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#Helo command rejected: need fully-qualified hostname
|
||||||
|
if ( ( $line =~ /Helo command rejected\: need fully\-qualified hostname/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/.*\: //g;
|
||||||
|
$hcrnfqhC=$line;
|
||||||
|
$hcrnfqh=newValue( $hcrnfqh, $line );
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#Sender address rejected: Domain not found
|
||||||
|
if ( ( $line =~ /Sender address rejected\: Domain not found/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/.*\: //g;
|
||||||
|
$sardnfC=$line;
|
||||||
|
$sardnf=newValue( $sardnf, $line );
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#Sender address rejected: not owned by user
|
||||||
|
if ( ( $line =~ /Sender address rejected\: not owned by user/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/.*\: //g;
|
||||||
|
$sarnobuC=$line;
|
||||||
|
$sarnobu=newValue( $sarnobu, $line );
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#blocked using
|
||||||
|
# These lines are RBLs so there will be more than one.
|
||||||
|
# Use $buNew to add them all up.
|
||||||
|
if ( ( $line =~ /blocked using/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/.*\: //g;
|
||||||
|
$buNew=$buNew + $line;
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#Recipient address rejected: User unknown
|
||||||
|
if ( ( $line =~ /Recipient address rejected\: User unknown/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/.*\: //g;
|
||||||
|
$raruuNew=$raruuNew + $line;
|
||||||
|
$handled=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#Helo command rejected: Invalid name
|
||||||
|
if ( ( $line =~ /Helo command rejected\: Invalid name/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/.*\: //g;
|
||||||
|
$hcrinC=$line;
|
||||||
|
$hcrin=newValue( $hcrin, $line );
|
||||||
|
}
|
||||||
|
|
||||||
|
#Sender address rejected: need fully-qualified address
|
||||||
|
if ( ( $line =~ /Sender address rejected\: need fully-qualified address/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/.*\: //g;
|
||||||
|
$sarnfqaC=$line;
|
||||||
|
$sarnfqa=newValue( $sarnfqa, $line );
|
||||||
|
}
|
||||||
|
|
||||||
|
#Recipient address rejected: Domain not found
|
||||||
|
if ( ( $line =~ /Recipient address rejected\: Domain not found/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/.*\: //g;
|
||||||
|
$rardnfC=$line;
|
||||||
|
$rardnf=newValue( $rardnf, $line );
|
||||||
|
}
|
||||||
|
|
||||||
|
#Improper use of SMTP command pipelining
|
||||||
|
if ( ( $line =~ /Improper use of SMTP command pipelining/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/.*\: //g;
|
||||||
|
$iuoscpC=$line;
|
||||||
|
$iuoscp=newValue( $iuoscp, $line );
|
||||||
|
}
|
||||||
|
|
||||||
|
#Message size exceeds fixed limit
|
||||||
|
if ( ( $line =~ /Message size exceeds fixed limit/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/.*\: //g;
|
||||||
|
$mseflC=$line;
|
||||||
|
$msefl=newValue( $msefl, $line );
|
||||||
|
}
|
||||||
|
|
||||||
|
#Server configuration error
|
||||||
|
if ( ( $line =~ /Server configuration error/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/.*\: //g;
|
||||||
|
$sceC=$line;
|
||||||
|
$sce=newValue( $sce, $line );
|
||||||
|
}
|
||||||
|
|
||||||
|
#Server configuration problem
|
||||||
|
if ( ( $line =~ /Server configuration problem/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/.*\: //g;
|
||||||
|
$scpC=$line;
|
||||||
|
$scp=newValue( $scp, $line );
|
||||||
|
}
|
||||||
|
|
||||||
|
#unknown reject reason
|
||||||
|
if ( ( $line =~ /unknown reject reason/ ) && ( ! $handled ) ){
|
||||||
|
$line=~s/.*\: //g;
|
||||||
|
$urrC=$line;
|
||||||
|
$urr=newValue( $urr, $line );
|
||||||
|
}
|
||||||
|
$int++;
|
||||||
|
}
|
||||||
|
|
||||||
|
# final client host rejected total
|
||||||
|
$chr=newValue( $chr, $chrNew );
|
||||||
|
|
||||||
|
# final RBL total
|
||||||
|
$bu=newValue( $bu, $buNew );
|
||||||
|
|
||||||
|
# final recipient address rejected total
|
||||||
|
$raruu=newValue( $raruu, $raruuNew );
|
||||||
|
|
||||||
|
my $data=$received."\n".
|
||||||
|
$delivered."\n".
|
||||||
|
$forwarded."\n".
|
||||||
|
$deferred."\n".
|
||||||
|
$bounced."\n".
|
||||||
|
$rejected."\n".
|
||||||
|
$rejectw."\n".
|
||||||
|
$held."\n".
|
||||||
|
$discarded."\n".
|
||||||
|
$bytesr."\n".
|
||||||
|
$bytesd."\n".
|
||||||
|
$senders."\n".
|
||||||
|
$sendinghd."\n".
|
||||||
|
$recipients."\n".
|
||||||
|
$recipienthd."\n".
|
||||||
|
$deferralcr."\n".
|
||||||
|
$deferralhid."\n".
|
||||||
|
$chr."\n".
|
||||||
|
$hcrnfqh."\n".
|
||||||
|
$sardnf."\n".
|
||||||
|
$sarnobu."\n".
|
||||||
|
$bu."\n".
|
||||||
|
$raruu."\n".
|
||||||
|
$hcrin."\n".
|
||||||
|
$sarnfqa."\n".
|
||||||
|
$rardnf."\n".
|
||||||
|
$rarnfqa."\n".
|
||||||
|
$iuscp."\n".
|
||||||
|
$sce."\n".
|
||||||
|
$scp."\n".
|
||||||
|
$urr."\n";
|
||||||
|
$msefl."\n".
|
||||||
|
|
||||||
|
print $data;
|
||||||
|
|
||||||
|
my $current=$receivedC."\n".
|
||||||
|
$deliveredC."\n".
|
||||||
|
$forwardedC."\n".
|
||||||
|
$deferredC."\n".
|
||||||
|
$bouncedC."\n".
|
||||||
|
$rejectedC."\n".
|
||||||
|
$rejectwC."\n".
|
||||||
|
$heldC."\n".
|
||||||
|
$discardedC."\n".
|
||||||
|
$bytesrC."\n".
|
||||||
|
$bytesdC."\n".
|
||||||
|
$sendersC."\n".
|
||||||
|
$sendinghdC."\n".
|
||||||
|
$recipientsC."\n".
|
||||||
|
$recipienthdC."\n".
|
||||||
|
$deferralcrC."\n".
|
||||||
|
$deferralhidC."\n".
|
||||||
|
$chrNew."\n".
|
||||||
|
$hcrnfqhC."\n".
|
||||||
|
$sardnfC."\n".
|
||||||
|
$sarnobuC."\n".
|
||||||
|
$buNew."\n".
|
||||||
|
$raruuNew."\n".
|
||||||
|
$hcrinC."\n".
|
||||||
|
$sarnfqaC."\n".
|
||||||
|
$rardnfC."\n".
|
||||||
|
$rarnfqaC."\n".
|
||||||
|
$iuscpC."\n".
|
||||||
|
$mseflC."\n".
|
||||||
|
$sceC."\n".
|
||||||
|
$scpC."\n".
|
||||||
|
$urrC."\n";
|
||||||
|
|
||||||
|
open(my $fh, ">", $cache) or die "Can't open '".$cache."'";
|
||||||
|
print $fh $current;
|
||||||
|
close($fh);
|
363
librenms/smart
Normal file
363
librenms/smart
Normal file
@ -0,0 +1,363 @@
|
|||||||
|
#!/usr/bin/env perl
|
||||||
|
#Copyright (c) 2017, Zane C. Bowers-Hadley
|
||||||
|
#All rights reserved.
|
||||||
|
#
|
||||||
|
#Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
#are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer in the documentation
|
||||||
|
# and/or other materials provided with the distribution.
|
||||||
|
#
|
||||||
|
#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
#ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
#WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
#IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
#INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
#BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
#DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
#LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
#OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||||
|
#THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
=for comment
|
||||||
|
|
||||||
|
Add this to snmpd.conf like below.
|
||||||
|
|
||||||
|
extend smart /etc/snmp/smart
|
||||||
|
|
||||||
|
Then add to root's cron tab, if you have more than a few disks.
|
||||||
|
|
||||||
|
*/3 * * * * /etc/snmp/smart -u
|
||||||
|
|
||||||
|
You will also need to create the config file, which defaults to the same path as the script,
|
||||||
|
but with .config appended. So if the script is located at /etc/snmp/smart, the config file
|
||||||
|
will be /etc/snmp/smart.config. Alternatively you can also specific a config via -c.
|
||||||
|
|
||||||
|
Anything starting with a # is comment. The format for variables is $variable=$value. Empty
|
||||||
|
lines are ignored. Spaces and tabes at either the start or end of a line are ignored. Any
|
||||||
|
line with out a = or # are treated as a disk.
|
||||||
|
|
||||||
|
#This is a comment
|
||||||
|
cache=/var/cache/smart
|
||||||
|
smartctl=/usr/local/sbin/smartctl
|
||||||
|
useSN=0
|
||||||
|
ada0
|
||||||
|
ada1
|
||||||
|
|
||||||
|
The variables are as below.
|
||||||
|
|
||||||
|
cache = The path to the cache file to use. Default: /var/cache/smart
|
||||||
|
smartctl = The path to use for smartctl. Default: /usr/bin/env smartctl
|
||||||
|
useSN = If set to 1, it will use the disks SN for reporting instead of the device name.
|
||||||
|
1 is the default. 0 will use the device name.
|
||||||
|
|
||||||
|
If you want to guess at the configuration, call it with -g and it will print out what it thinks
|
||||||
|
it should be.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
##
|
||||||
|
## You should not need to touch anything below here.
|
||||||
|
##
|
||||||
|
use warnings;
|
||||||
|
use strict;
|
||||||
|
use Getopt::Std;
|
||||||
|
|
||||||
|
my $cache='/var/cache/smart';
|
||||||
|
my $smartctl='/usr/bin/env smartctl';
|
||||||
|
my @disks;
|
||||||
|
my $useSN=1;
|
||||||
|
|
||||||
|
$Getopt::Std::STANDARD_HELP_VERSION = 1;
|
||||||
|
sub main::VERSION_MESSAGE {
|
||||||
|
print "SMART SNMP extend 0.0.0\n";
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
sub main::HELP_MESSAGE {
|
||||||
|
print "\n".
|
||||||
|
"-u Update '".$cache."'\n".
|
||||||
|
"-g Guess at the config and print it to STDOUT.\n".
|
||||||
|
"-c <config> The config file to use.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
#gets the options
|
||||||
|
my %opts=();
|
||||||
|
getopts('ugc:', \%opts);
|
||||||
|
|
||||||
|
# guess if asked
|
||||||
|
if ( defined( $opts{g} ) ){
|
||||||
|
|
||||||
|
#get what path to use for smartctl
|
||||||
|
$smartctl=`which smartctl`;
|
||||||
|
chomp($smartctl);
|
||||||
|
if ( $? != 0 ){
|
||||||
|
warn("'which smartctl' failed with a exit code of $?");
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#try to touch the default cache location and warn if it can't be done
|
||||||
|
system('touch '.$cache.'>/dev/null');
|
||||||
|
if ( $? != 0 ){
|
||||||
|
$cache='#Could not touch '.$cache. "You will need to manually set it\n".
|
||||||
|
"cache=?\n";
|
||||||
|
}else{
|
||||||
|
$cache='cache='.$cache."\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
my %found_disks;
|
||||||
|
|
||||||
|
#check for drives named /dev/sd*
|
||||||
|
my @matches=glob('/dev/sd*');
|
||||||
|
@matches=grep(!/[0-9]/, @matches);
|
||||||
|
my $matches_int=0;
|
||||||
|
while ( defined( $matches[$matches_int] ) ){
|
||||||
|
my $device=$matches[$matches_int];
|
||||||
|
system( $smartctl.' -A '.$device.' > /dev/null' );
|
||||||
|
if ( $? == 0 ){
|
||||||
|
$device =~ s/\/dev\///;
|
||||||
|
$found_disks{$device}=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$matches_int++;
|
||||||
|
}
|
||||||
|
|
||||||
|
#check for drives named /dev/ada*
|
||||||
|
@matches=glob('/dev/ada*');
|
||||||
|
@matches=grep(!/[ps]/, @matches);
|
||||||
|
$matches_int=0;
|
||||||
|
while ( defined( $matches[$matches_int] ) ){
|
||||||
|
my $device=$matches[$matches_int];
|
||||||
|
system( $smartctl.' -A '.$device.' > /dev/null' );
|
||||||
|
if ( $? == 0 ){
|
||||||
|
$device =~ s/\/dev\///;
|
||||||
|
$found_disks{$device}=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$matches_int++;
|
||||||
|
}
|
||||||
|
|
||||||
|
#check for drives named /dev/da*
|
||||||
|
@matches=glob('/dev/da*');
|
||||||
|
@matches=grep(!/[ps]/, @matches);
|
||||||
|
$matches_int=0;
|
||||||
|
while ( defined( $matches[$matches_int] ) ){
|
||||||
|
my $device=$matches[$matches_int];
|
||||||
|
system( $smartctl.' -A '.$device.' > /dev/null' );
|
||||||
|
if ( $? == 0 ){
|
||||||
|
$device =~ s/\/dev\///;
|
||||||
|
$found_disks{$device}=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$matches_int++;
|
||||||
|
}
|
||||||
|
|
||||||
|
#have smartctl scan and see if it finds anythings not get found
|
||||||
|
my $scan_output=`$smartctl --scan-open`;
|
||||||
|
my @scan_outputA=split(/\n/, $scan_output);
|
||||||
|
@scan_outputA=grep(!/ses[0-9]/, @scan_outputA); # not a disk, but may or may not have SMART attributes
|
||||||
|
@scan_outputA=grep(!/pass[0-9]/, @scan_outputA); # very likely a duplicate and a disk under another name
|
||||||
|
$matches_int=0;
|
||||||
|
while ( defined( $scan_outputA[$matches_int] ) ){
|
||||||
|
my $device=$scan_outputA[$matches_int];
|
||||||
|
$device =~ s/ .*//;
|
||||||
|
system( $smartctl.' -A '.$device.' > /dev/null' );
|
||||||
|
if ( $? == 0 ){
|
||||||
|
$device =~ s/\/dev\///;
|
||||||
|
$found_disks{$device}=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$matches_int++;
|
||||||
|
}
|
||||||
|
|
||||||
|
print "useSN=0\n".'smartctl='.$smartctl."\n".
|
||||||
|
$cache.
|
||||||
|
join( "\n", keys(%found_disks) )."\n";
|
||||||
|
|
||||||
|
exit 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#get which config file to use
|
||||||
|
my $config=$0.'.config';
|
||||||
|
if ( defined( $opts{c} ) ){
|
||||||
|
$config=$opts{c};
|
||||||
|
}
|
||||||
|
|
||||||
|
#reads the config file, optionally
|
||||||
|
my $config_file='';
|
||||||
|
open(my $readfh, "<", $config) or die "Can't open '".$config."'";
|
||||||
|
read($readfh , $config_file , 1000000);
|
||||||
|
close($readfh);
|
||||||
|
|
||||||
|
#parse the config file and remove comments and empty lines
|
||||||
|
my @configA=split(/\n/, $config_file);
|
||||||
|
@configA=grep(!/^$/, @configA);
|
||||||
|
@configA=grep(!/^\#/, @configA);
|
||||||
|
@configA=grep(!/^[\s\t]*$/, @configA);
|
||||||
|
my $configA_int=0;
|
||||||
|
while ( defined( $configA[$configA_int] ) ){
|
||||||
|
my $line=$configA[$configA_int];
|
||||||
|
$line=~s/^[\t\s]+//;
|
||||||
|
$line=~s/[\t\s]+$//;
|
||||||
|
|
||||||
|
my ( $var, $val )=split(/=/, $line, 2);
|
||||||
|
|
||||||
|
if ( $var eq 'cache' ){
|
||||||
|
$cache=$val;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( $var eq 'smartctl' ){
|
||||||
|
$smartctl=$val;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( $var eq 'useSN' ){
|
||||||
|
$useSN=$val;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !defined( $val ) ){
|
||||||
|
push(@disks, $var);
|
||||||
|
}
|
||||||
|
|
||||||
|
$configA_int++;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if set to 1, no cache will be written and it will be printed instead
|
||||||
|
my $noWrite=0;
|
||||||
|
|
||||||
|
# if no -u, it means we are being called from snmped
|
||||||
|
if ( ! defined( $opts{u} ) ){
|
||||||
|
# if the cache file exists, print it, otherwise assume one is not being used
|
||||||
|
if ( -f $cache ){
|
||||||
|
my $old='';
|
||||||
|
open(my $readfh, "<", $cache) or die "Can't open '".$cache."'";
|
||||||
|
read($readfh , $old , 1000000);
|
||||||
|
close($readfh);
|
||||||
|
print $old;
|
||||||
|
exit 0;
|
||||||
|
}else{
|
||||||
|
$opts{u}=1;
|
||||||
|
$noWrite=1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
my $toReturn='';
|
||||||
|
my $int=0;
|
||||||
|
while ( defined($disks[$int]) ) {
|
||||||
|
my $disk=$disks[$int];
|
||||||
|
my $disk_sn=$disk;
|
||||||
|
my $output=`$smartctl -A /dev/$disk`;
|
||||||
|
|
||||||
|
my %IDs=( '5'=>'null',
|
||||||
|
'10'=>'null',
|
||||||
|
'173'=>'null',
|
||||||
|
'177'=>'null',
|
||||||
|
'183'=>'null',
|
||||||
|
'184'=>'null',
|
||||||
|
'187'=>'null',
|
||||||
|
'188'=>'null',
|
||||||
|
'190'=>'null',
|
||||||
|
'194'=>'null',
|
||||||
|
'196'=>'null',
|
||||||
|
'197'=>'null',
|
||||||
|
'198'=>'null',
|
||||||
|
'199'=>'null',
|
||||||
|
'231'=>'null',
|
||||||
|
'233'=>'null',
|
||||||
|
);
|
||||||
|
|
||||||
|
my @outputA=split( /\n/, $output );
|
||||||
|
my $outputAint=0;
|
||||||
|
while ( defined($outputA[$outputAint]) ) {
|
||||||
|
my $line=$outputA[$outputAint];
|
||||||
|
$line=~s/^ +//;
|
||||||
|
$line=~s/ +/ /g;
|
||||||
|
|
||||||
|
if ( $line =~ /^[0123456789]+ / ) {
|
||||||
|
my @lineA=split(/\ /, $line, 10);
|
||||||
|
my $raw=$lineA[9];
|
||||||
|
my $id=$lineA[0];
|
||||||
|
|
||||||
|
# single int raw values
|
||||||
|
if (
|
||||||
|
( $id == 5 ) ||
|
||||||
|
( $id == 10 ) ||
|
||||||
|
( $id == 173 ) ||
|
||||||
|
( $id == 177 ) ||
|
||||||
|
( $id == 183 ) ||
|
||||||
|
( $id == 184 ) ||
|
||||||
|
( $id == 187 ) ||
|
||||||
|
( $id == 196 ) ||
|
||||||
|
( $id == 197 ) ||
|
||||||
|
( $id == 198 ) ||
|
||||||
|
( $id == 199 ) ||
|
||||||
|
( $id == 231 ) ||
|
||||||
|
( $id == 233 )
|
||||||
|
) {
|
||||||
|
$IDs{$id}=$raw;
|
||||||
|
}
|
||||||
|
|
||||||
|
# 188, Command_Timeout
|
||||||
|
if ( $id == 188 ) {
|
||||||
|
my $total=0;
|
||||||
|
my @rawA=split( /\ /, $raw );
|
||||||
|
my $rawAint=0;
|
||||||
|
while ( defined( $rawA[$rawAint] ) ) {
|
||||||
|
$total=$total+$rawA[$rawAint];
|
||||||
|
$rawAint++;
|
||||||
|
}
|
||||||
|
$IDs{$id}=$total;
|
||||||
|
}
|
||||||
|
|
||||||
|
# 190, airflow temp
|
||||||
|
# 194, temp
|
||||||
|
if (
|
||||||
|
( $id == 190 ) ||
|
||||||
|
( $id == 194 )
|
||||||
|
) {
|
||||||
|
my ( $temp )=split(/\ /, $raw);
|
||||||
|
$IDs{$id}=$temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$outputAint++;
|
||||||
|
}
|
||||||
|
|
||||||
|
#get the selftest logs
|
||||||
|
$output=`$smartctl -l selftest /dev/$disk`;
|
||||||
|
@outputA=split( /\n/, $output );
|
||||||
|
my $completed=scalar grep(/Completed without error/, @outputA);
|
||||||
|
my $interrupted=scalar grep(/Interrupted/, @outputA);
|
||||||
|
my $read_failure=scalar grep(/read failure/, @outputA);
|
||||||
|
my $unknown_failure=scalar grep(/unknown failure/, @outputA);
|
||||||
|
my $extended=scalar grep(/Extended/, @outputA);
|
||||||
|
my $short=scalar grep(/Short/, @outputA);
|
||||||
|
my $conveyance=scalar grep(/Conveyance/, @outputA);
|
||||||
|
my $selective=scalar grep(/Selective/, @outputA);
|
||||||
|
|
||||||
|
# get the drive serial number, if needed
|
||||||
|
my $disk_id=$disk;
|
||||||
|
if ( $useSN ){
|
||||||
|
while (`$smartctl -i /dev/$disk` =~ /Serial Number:(.*)/g) {
|
||||||
|
$disk_id = $1;
|
||||||
|
$disk_id =~ s/^\s+|\s+$//g;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$toReturn=$toReturn.$disk_id.','.$IDs{'5'}.','.$IDs{'10'}.','.$IDs{'173'}.','.$IDs{'177'}.','.$IDs{'183'}.','.$IDs{'184'}.','.$IDs{'187'}.','.$IDs{'188'}
|
||||||
|
.','.$IDs{'190'} .','.$IDs{'194'}.','.$IDs{'196'}.','.$IDs{'197'}.','.$IDs{'198'}.','.$IDs{'199'}.','.$IDs{'231'}.','.$IDs{'233'}.','.
|
||||||
|
$completed.','.$interrupted.','.$read_failure.','.$unknown_failure.','.$extended.','.$short.','.$conveyance.','.$selective."\n";
|
||||||
|
|
||||||
|
$int++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ! $noWrite ){
|
||||||
|
open(my $writefh, ">", $cache) or die "Can't open '".$cache."'";
|
||||||
|
print $writefh $toReturn;
|
||||||
|
close($writefh);
|
||||||
|
}else{
|
||||||
|
print $toReturn;
|
||||||
|
}
|
3
librenms/smart.config
Normal file
3
librenms/smart.config
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
smartctl=/usr/sbin/smartctl
|
||||||
|
cache=/var/cache/smart
|
||||||
|
sda
|
32
librenms/snmpd.conf
Normal file
32
librenms/snmpd.conf
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
##########################################################################
|
||||||
|
# snmpd.conf
|
||||||
|
# Created by CNW on 11/3/2018 via snmpconf wizard and manual post tweaks
|
||||||
|
###########################################################################
|
||||||
|
# SECTION: Monitor Various Aspects of the Running Host
|
||||||
|
#
|
||||||
|
# The following check up on various aspects of a host.
|
||||||
|
|
||||||
|
# disk: Check for disk space usage of a partition.
|
||||||
|
# The agent can check the amount of available disk space, and make
|
||||||
|
# sure it is above a set limit.
|
||||||
|
#
|
||||||
|
load 3 3 3
|
||||||
|
rocommunity kn3lmgmt 10.253.3.99
|
||||||
|
syslocation PFV
|
||||||
|
syscontact prodtechopsalerts@turnsys.com
|
||||||
|
sysservices 76
|
||||||
|
|
||||||
|
|
||||||
|
#TSYS tweaks
|
||||||
|
#Temperature
|
||||||
|
#pass_persist .1.3.6.1.4.1.9.9.13.1.3 /usr/local/bin/temper-snmp
|
||||||
|
#Smart
|
||||||
|
extend smart /usr/local/librenms/smart
|
||||||
|
#NTP
|
||||||
|
extend ntp-client /usr/local/librenms/ntp-client.sh
|
||||||
|
#SMTP
|
||||||
|
extend mailq /usr/local/librenms/postfix-queues
|
||||||
|
#Distro Detection
|
||||||
|
extend .1.3.6.1.4.1.2021.7890.1 distro /usr/local/librenms/distro
|
||||||
|
#extend zfs /usr/local/bin/zfs
|
||||||
|
extend osupdate /usr/local/librenms/os-updates.sh
|
48
main.cf
Normal file
48
main.cf
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
|
||||||
|
|
||||||
|
|
||||||
|
# Debian specific: Specifying a file name will cause the first
|
||||||
|
# line of that file to be used as the name. The Debian default
|
||||||
|
# is /etc/mailname.
|
||||||
|
#myorigin = /etc/mailname
|
||||||
|
|
||||||
|
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
|
||||||
|
biff = no
|
||||||
|
|
||||||
|
# appending .domain is the MUA's job.
|
||||||
|
append_dot_mydomain = no
|
||||||
|
|
||||||
|
# Uncomment the next line to generate "delayed mail" warnings
|
||||||
|
#delay_warning_time = 4h
|
||||||
|
|
||||||
|
readme_directory = no
|
||||||
|
|
||||||
|
# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
|
||||||
|
# fresh installs.
|
||||||
|
compatibility_level = 2
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# TLS parameters
|
||||||
|
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
|
||||||
|
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
|
||||||
|
smtpd_tls_security_level=may
|
||||||
|
|
||||||
|
smtp_tls_CApath=/etc/ssl/certs
|
||||||
|
smtp_tls_security_level=may
|
||||||
|
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
|
||||||
|
|
||||||
|
|
||||||
|
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
|
||||||
|
myhostname = pfv-vpn.turnsys.net
|
||||||
|
alias_maps = hash:/etc/aliases
|
||||||
|
alias_database = hash:/etc/aliases
|
||||||
|
myorigin = /etc/mailname
|
||||||
|
mydestination = pfv-vpn.turnsys.net, $myhostname, pfv-vpn, localhost.localdomain, localhost
|
||||||
|
relayhost = pfv-toolbox.turnsys.net
|
||||||
|
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
|
||||||
|
mailbox_size_limit = 0
|
||||||
|
recipient_delimiter = +
|
||||||
|
inet_interfaces = all
|
||||||
|
inet_protocols = all
|
||||||
|
|
5
netdata-stream.conf
Normal file
5
netdata-stream.conf
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[stream]
|
||||||
|
enabled = yes
|
||||||
|
destination = pfv-toolbox.turnsys.net:19999
|
||||||
|
api key = 6ed9e20a-c819-4ebc-b894-322eb0710d03
|
||||||
|
|
256
newSrv.sh
Normal file
256
newSrv.sh
Normal file
@ -0,0 +1,256 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
|
||||||
|
# Standard strict mode and error handling boilderplate...
|
||||||
|
|
||||||
|
set -eEu
|
||||||
|
set -o pipefail
|
||||||
|
set -o functrace
|
||||||
|
|
||||||
|
export PS4='(${BASH_SOURCE}:${LINENO}): - [${SHLVL},${BASH_SUBSHELL},$?] $ '
|
||||||
|
|
||||||
|
function handle_failure() {
|
||||||
|
local lineno=$2
|
||||||
|
local fn=$3
|
||||||
|
local exitstatus=$4
|
||||||
|
local msg=$5
|
||||||
|
local lineno_fns=${1% 0}
|
||||||
|
if [[ "$lineno_fns" != "0" ]] ; then
|
||||||
|
lineno="${lineno} ${lineno_fns}"
|
||||||
|
fi
|
||||||
|
echo "${BASH_SOURCE[1]}: Function: ${fn} Line Number : [${lineno}] Failed with status ${exitstatus}: $msg"
|
||||||
|
}
|
||||||
|
|
||||||
|
trap 'handle_failure "${BASH_LINENO[*]}" "$LINENO" "${FUNCNAME[*]:-script}" "$?" "$BASH_COMMAND"' ERR
|
||||||
|
|
||||||
|
|
||||||
|
# Start actual script logic here...
|
||||||
|
|
||||||
|
|
||||||
|
function global-configureAptRepos()
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
echo "Now running $FUNCNAME...."
|
||||||
|
|
||||||
|
echo "deb http://download.webmin.com/download/repository sarge contrib" > /etc/apt/sources.list.d/webmin.list
|
||||||
|
curl --insecure -s https://www.webmin.com/jcameron-key.asc | gpg --dearmor >/etc/apt/trusted.gpg.d/jcameron-key.gpg
|
||||||
|
|
||||||
|
echo "deb https://packages.cisofy.com/community/lynis/deb/ stable main" > /etc/apt/sources.list.d/cisofy-lynis.list
|
||||||
|
curl --insecure -s https://packages.cisofy.com/keys/cisofy-software-public.key | apt-key add -
|
||||||
|
|
||||||
|
|
||||||
|
echo "Completed running $FUNCNAME"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function global-shellScripts()
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
echo "Now running $FUNCNAME...."
|
||||||
|
|
||||||
|
curl -s http://dl.turnsys.net/distro > /usr/local/bin/distro ; chmod +x /usr/local/bin/distro
|
||||||
|
curl -s http://dl.turnsys.net/upsnotify.sh > /usr/local/bin/upsnotify.sh ; chmod +x /usr/local/bin/upsnotify.sh
|
||||||
|
curl -s http://dl.turnsys.net/up2date.sh > /usr/local/bin/up2date.sh ; chmod +x /usr/local/bin/up2date.sh
|
||||||
|
|
||||||
|
echo "Completed running $FUNCNAME"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function global-profileScripts()
|
||||||
|
{
|
||||||
|
|
||||||
|
echo "Now running $FUNCNAME...."
|
||||||
|
|
||||||
|
curl -s http://dl.turnsys.net/profiled-tsys-shell.sh > /etc/profile.d/tsys-shell.sh
|
||||||
|
curl -s http://dl.turnsys.net/profiled-tmux.sh > /etc/profile.d/tmux.sh
|
||||||
|
curl -s http://dl.turnsys.net/profiled-notify-discord.sh > /etc/profile.d/login-notify-discord.sh
|
||||||
|
|
||||||
|
echo "Completed running $FUNCNAME"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function global-oam()
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
echo "Now running $FUNCNAME...."
|
||||||
|
|
||||||
|
rm -rf /usr/local/librenms-agent
|
||||||
|
curl -s http://dl.turnsys.net/librenms.tar.gz > /usr/local/librenms.tar.gz
|
||||||
|
cd /usr/local ; tar xfz librenms.tar.gz ; rm -f /usr/local/librenms.tar.gz
|
||||||
|
|
||||||
|
echo "Completed running $FUNCNAME"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if [[ ! -f /root/ntpserver ]]; then
|
||||||
|
curl -s http://dl.turnsys.net/ntp.conf > /etc/ntp.conf
|
||||||
|
export DEBIAN_FRONTEND="noninteractive" && apt-get -qq --yes -o Dpkg::Options::="--force-confold" install ntp ntpdate
|
||||||
|
systemctl stop ntp ; ntpdate pfv-dc-02.turnsys.net ; systemctl start ntp
|
||||||
|
fi
|
||||||
|
|
||||||
|
function global-systemServiceConfigurationFiles()
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
echo "Now running $FUNCNAME...."
|
||||||
|
|
||||||
|
|
||||||
|
curl -s http://dl.turnsys.net/aliases > /etc/aliases
|
||||||
|
curl -s http://dl.turnsys.net/rsyslog.conf > /etc/rsyslog.conf
|
||||||
|
#curl -s http://dl.turnsys.net/resolv.conf > /etc/resolv.conf
|
||||||
|
curl -s http://dl.turnsys.net/nsswitch.conf > /etc/nsswitch.conf
|
||||||
|
|
||||||
|
|
||||||
|
if [ ! -d /root/.ssh ]; then
|
||||||
|
mkdir /root/.ssh/
|
||||||
|
fi
|
||||||
|
curl -s http://dl.turnsys.net/ssh-authorized-keys > /root/.ssh/authorized_keys ; chmod 400 /root/.ssh/authorized_keys
|
||||||
|
|
||||||
|
echo "Completed running $FUNCNAME"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function global-installPackages()
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
echo "Now running $FUNCNAME...."
|
||||||
|
|
||||||
|
#
|
||||||
|
#Ensure system time is correct, otherwise can't install packages...
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#Patch the system
|
||||||
|
#
|
||||||
|
|
||||||
|
/usr/local/bin/up2date.sh
|
||||||
|
|
||||||
|
#
|
||||||
|
#Remove stuff we don't want, add stuff we do want
|
||||||
|
#
|
||||||
|
|
||||||
|
export DEBIAN_FRONTEND="noninteractive" && apt-get -qq --yes -o Dpkg::Options::="--force-confold" --purge remove nano
|
||||||
|
|
||||||
|
MAIL_HOST="$(hostname -f)"
|
||||||
|
debconf-set-selections <<< "postfix postfix/mailname string $MAIL_HOST"
|
||||||
|
debconf-set-selections <<< "postfix postfix/main_mailer_type string 'Internet with smarthost'"
|
||||||
|
debconf-set-selections <<< "postfix postfix/relayhost string 'pfv-toolbox.turnsys.net'"
|
||||||
|
|
||||||
|
export DEBIAN_FRONTEND="noninteractive" && apt-get -qq --yes -o Dpkg::Options::="--force-confold" install \
|
||||||
|
htop \
|
||||||
|
dstat \
|
||||||
|
snmpd \
|
||||||
|
ncdu \
|
||||||
|
iftop \
|
||||||
|
acct \
|
||||||
|
glances \
|
||||||
|
nethogs \
|
||||||
|
sysstat \
|
||||||
|
ngrep \
|
||||||
|
lsb-release \
|
||||||
|
screen \
|
||||||
|
tmux \
|
||||||
|
lldpd \
|
||||||
|
net-tools \
|
||||||
|
gpg \
|
||||||
|
molly-guard \
|
||||||
|
lshw \
|
||||||
|
sudo \
|
||||||
|
mailutils \
|
||||||
|
clamav \
|
||||||
|
sl \
|
||||||
|
rsyslog \
|
||||||
|
logwatch \
|
||||||
|
git \
|
||||||
|
rsync \
|
||||||
|
tshark \
|
||||||
|
tcpdump \
|
||||||
|
lynis \
|
||||||
|
qemu-guest-agent \
|
||||||
|
zsh \
|
||||||
|
sssd \
|
||||||
|
sssd-ad \
|
||||||
|
krb5-user \
|
||||||
|
samba \
|
||||||
|
autofs \
|
||||||
|
adcli \
|
||||||
|
telnet \
|
||||||
|
postfix \
|
||||||
|
webmin
|
||||||
|
|
||||||
|
|
||||||
|
bash <(curl -Ss https://my-netdata.io/kickstart.sh) --dont-wait
|
||||||
|
curl -s http://dl.turnsys.net/netdata-stream.conf > /etc/netdata/stream.conf ; systemctl stop netdata ; systemctl start netdata
|
||||||
|
|
||||||
|
echo "Completed running $FUNCNAME"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function global-postPackageConfiguration()
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
echo "Now running $FUNCNAME...."
|
||||||
|
|
||||||
|
###Post package deployment bits
|
||||||
|
systemctl stop snmpd ; /etc/init.d/snmpd stop
|
||||||
|
sed -i "s|-Lsd|-LS6d|" /lib/systemd/system/snmpd.service
|
||||||
|
curl -s http://dl.turnsys.net/snmpd.conf > /etc/snmp/snmpd.conf
|
||||||
|
systemctl daemon-reload ; systemctl restart snmpd ; /etc/init.d/snmpd restart
|
||||||
|
|
||||||
|
/etc/init.d/rsyslog stop ; /etc/init.d/rsyslog start ; logger "hi hi from $(hostname)"
|
||||||
|
|
||||||
|
systemctl restart ntp
|
||||||
|
systemctl restart postfix
|
||||||
|
|
||||||
|
accton on
|
||||||
|
|
||||||
|
echo "Completed running $FUNCNAME"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
##################################################
|
||||||
|
# Things todo on all TSYS systems
|
||||||
|
##################################################
|
||||||
|
|
||||||
|
####################################################################################################
|
||||||
|
#Download configs and support bits to onfigure things in the TSYS standard model
|
||||||
|
####################################################################################################
|
||||||
|
|
||||||
|
global-configureAptRepos
|
||||||
|
global-shellScripts
|
||||||
|
global-profileScripts
|
||||||
|
global-oam
|
||||||
|
global-systemServiceConfigurationFiles
|
||||||
|
|
||||||
|
|
||||||
|
####################################################################################################
|
||||||
|
#Install packages and preserve existing configs...
|
||||||
|
####################################################################################################
|
||||||
|
global-installPackages
|
||||||
|
global-postPackageConfiguration
|
||||||
|
|
||||||
|
|
||||||
|
##################################################
|
||||||
|
# Things todo on certain types of systems
|
||||||
|
##################################################
|
||||||
|
|
||||||
|
###
|
||||||
|
# Proxmox servers
|
||||||
|
###
|
||||||
|
|
||||||
|
###
|
||||||
|
# Raspberry Pi
|
||||||
|
###
|
||||||
|
|
||||||
|
###
|
||||||
|
# Jetson nano
|
||||||
|
###
|
256
newSrv.sh.txt
Normal file
256
newSrv.sh.txt
Normal file
@ -0,0 +1,256 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
|
||||||
|
# Standard strict mode and error handling boilderplate...
|
||||||
|
|
||||||
|
set -eEu
|
||||||
|
set -o pipefail
|
||||||
|
set -o functrace
|
||||||
|
|
||||||
|
export PS4='(${BASH_SOURCE}:${LINENO}): - [${SHLVL},${BASH_SUBSHELL},$?] $ '
|
||||||
|
|
||||||
|
function handle_failure() {
|
||||||
|
local lineno=$2
|
||||||
|
local fn=$3
|
||||||
|
local exitstatus=$4
|
||||||
|
local msg=$5
|
||||||
|
local lineno_fns=${1% 0}
|
||||||
|
if [[ "$lineno_fns" != "0" ]] ; then
|
||||||
|
lineno="${lineno} ${lineno_fns}"
|
||||||
|
fi
|
||||||
|
echo "${BASH_SOURCE[1]}: Function: ${fn} Line Number : [${lineno}] Failed with status ${exitstatus}: $msg"
|
||||||
|
}
|
||||||
|
|
||||||
|
trap 'handle_failure "${BASH_LINENO[*]}" "$LINENO" "${FUNCNAME[*]:-script}" "$?" "$BASH_COMMAND"' ERR
|
||||||
|
|
||||||
|
|
||||||
|
# Start actual script logic here...
|
||||||
|
|
||||||
|
|
||||||
|
function global-configureAptRepos()
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
echo "Now running $FUNCNAME...."
|
||||||
|
|
||||||
|
echo "deb http://download.webmin.com/download/repository sarge contrib" > /etc/apt/sources.list.d/webmin.list
|
||||||
|
curl --insecure -s https://www.webmin.com/jcameron-key.asc | gpg --dearmor >/etc/apt/trusted.gpg.d/jcameron-key.gpg
|
||||||
|
|
||||||
|
echo "deb https://packages.cisofy.com/community/lynis/deb/ stable main" > /etc/apt/sources.list.d/cisofy-lynis.list
|
||||||
|
curl --insecure -s https://packages.cisofy.com/keys/cisofy-software-public.key | apt-key add -
|
||||||
|
|
||||||
|
|
||||||
|
echo "Completed running $FUNCNAME"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function global-shellScripts()
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
echo "Now running $FUNCNAME...."
|
||||||
|
|
||||||
|
curl -s http://dl.turnsys.net/distro > /usr/local/bin/distro ; chmod +x /usr/local/bin/distro
|
||||||
|
curl -s http://dl.turnsys.net/upsnotify.sh > /usr/local/bin/upsnotify.sh ; chmod +x /usr/local/bin/upsnotify.sh
|
||||||
|
curl -s http://dl.turnsys.net/up2date.sh > /usr/local/bin/up2date.sh ; chmod +x /usr/local/bin/up2date.sh
|
||||||
|
|
||||||
|
echo "Completed running $FUNCNAME"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function global-profileScripts()
|
||||||
|
{
|
||||||
|
|
||||||
|
echo "Now running $FUNCNAME...."
|
||||||
|
|
||||||
|
curl -s http://dl.turnsys.net/profiled-tsys-shell.sh > /etc/profile.d/tsys-shell.sh
|
||||||
|
curl -s http://dl.turnsys.net/profiled-tmux.sh > /etc/profile.d/tmux.sh
|
||||||
|
curl -s http://dl.turnsys.net/profiled-notify-discord.sh > /etc/profile.d/login-notify-discord.sh
|
||||||
|
|
||||||
|
echo "Completed running $FUNCNAME"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function global-oam()
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
echo "Now running $FUNCNAME...."
|
||||||
|
|
||||||
|
rm -rf /usr/local/librenms-agent
|
||||||
|
curl -s http://dl.turnsys.net/librenms.tar.gz > /usr/local/librenms.tar.gz
|
||||||
|
cd /usr/local ; tar xfz librenms.tar.gz ; rm -f /usr/local/librenms.tar.gz
|
||||||
|
|
||||||
|
echo "Completed running $FUNCNAME"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if [[ ! -f /root/ntpserver ]]; then
|
||||||
|
curl -s http://dl.turnsys.net/ntp.conf > /etc/ntp.conf
|
||||||
|
export DEBIAN_FRONTEND="noninteractive" && apt-get -qq --yes -o Dpkg::Options::="--force-confold" install ntp ntpdate
|
||||||
|
systemctl stop ntp ; ntpdate pfv-dc-02.turnsys.net ; systemctl start ntp
|
||||||
|
fi
|
||||||
|
|
||||||
|
function global-systemServiceConfigurationFiles()
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
echo "Now running $FUNCNAME...."
|
||||||
|
|
||||||
|
|
||||||
|
curl -s http://dl.turnsys.net/aliases > /etc/aliases
|
||||||
|
curl -s http://dl.turnsys.net/rsyslog.conf > /etc/rsyslog.conf
|
||||||
|
#curl -s http://dl.turnsys.net/resolv.conf > /etc/resolv.conf
|
||||||
|
curl -s http://dl.turnsys.net/nsswitch.conf > /etc/nsswitch.conf
|
||||||
|
|
||||||
|
|
||||||
|
if [ ! -d /root/.ssh ]; then
|
||||||
|
mkdir /root/.ssh/
|
||||||
|
fi
|
||||||
|
curl -s http://dl.turnsys.net/ssh-authorized-keys > /root/.ssh/authorized_keys ; chmod 400 /root/.ssh/authorized_keys
|
||||||
|
|
||||||
|
echo "Completed running $FUNCNAME"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function global-installPackages()
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
echo "Now running $FUNCNAME...."
|
||||||
|
|
||||||
|
#
|
||||||
|
#Ensure system time is correct, otherwise can't install packages...
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#Patch the system
|
||||||
|
#
|
||||||
|
|
||||||
|
/usr/local/bin/up2date.sh
|
||||||
|
|
||||||
|
#
|
||||||
|
#Remove stuff we don't want, add stuff we do want
|
||||||
|
#
|
||||||
|
|
||||||
|
export DEBIAN_FRONTEND="noninteractive" && apt-get -qq --yes -o Dpkg::Options::="--force-confold" --purge remove nano
|
||||||
|
|
||||||
|
MAIL_HOST="$(hostname -f)"
|
||||||
|
debconf-set-selections <<< "postfix postfix/mailname string $MAIL_HOST"
|
||||||
|
debconf-set-selections <<< "postfix postfix/main_mailer_type string 'Internet with smarthost'"
|
||||||
|
debconf-set-selections <<< "postfix postfix/relayhost string 'pfv-toolbox.turnsys.net'"
|
||||||
|
|
||||||
|
export DEBIAN_FRONTEND="noninteractive" && apt-get -qq --yes -o Dpkg::Options::="--force-confold" install \
|
||||||
|
htop \
|
||||||
|
dstat \
|
||||||
|
snmpd \
|
||||||
|
ncdu \
|
||||||
|
iftop \
|
||||||
|
acct \
|
||||||
|
glances \
|
||||||
|
nethogs \
|
||||||
|
sysstat \
|
||||||
|
ngrep \
|
||||||
|
lsb-release \
|
||||||
|
screen \
|
||||||
|
tmux \
|
||||||
|
lldpd \
|
||||||
|
net-tools \
|
||||||
|
gpg \
|
||||||
|
molly-guard \
|
||||||
|
lshw \
|
||||||
|
sudo \
|
||||||
|
mailutils \
|
||||||
|
clamav \
|
||||||
|
sl \
|
||||||
|
rsyslog \
|
||||||
|
logwatch \
|
||||||
|
git \
|
||||||
|
rsync \
|
||||||
|
tshark \
|
||||||
|
tcpdump \
|
||||||
|
lynis \
|
||||||
|
qemu-guest-agent \
|
||||||
|
zsh \
|
||||||
|
sssd \
|
||||||
|
sssd-ad \
|
||||||
|
krb5-user \
|
||||||
|
samba \
|
||||||
|
autofs \
|
||||||
|
adcli \
|
||||||
|
telnet \
|
||||||
|
postfix \
|
||||||
|
webmin
|
||||||
|
|
||||||
|
|
||||||
|
bash <(curl -Ss https://my-netdata.io/kickstart.sh) --dont-wait
|
||||||
|
curl -s http://dl.turnsys.net/netdata-stream.conf > /etc/netdata/stream.conf ; systemctl stop netdata ; systemctl start netdata
|
||||||
|
|
||||||
|
echo "Completed running $FUNCNAME"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function global-postPackageConfiguration()
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
echo "Now running $FUNCNAME...."
|
||||||
|
|
||||||
|
###Post package deployment bits
|
||||||
|
systemctl stop snmpd ; /etc/init.d/snmpd stop
|
||||||
|
sed -i "s|-Lsd|-LS6d|" /lib/systemd/system/snmpd.service
|
||||||
|
curl -s http://dl.turnsys.net/snmpd.conf > /etc/snmp/snmpd.conf
|
||||||
|
systemctl daemon-reload ; systemctl restart snmpd ; /etc/init.d/snmpd restart
|
||||||
|
|
||||||
|
/etc/init.d/rsyslog stop ; /etc/init.d/rsyslog start ; logger "hi hi from $(hostname)"
|
||||||
|
|
||||||
|
systemctl restart ntp
|
||||||
|
systemctl restart postfix
|
||||||
|
|
||||||
|
accton on
|
||||||
|
|
||||||
|
echo "Completed running $FUNCNAME"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
##################################################
|
||||||
|
# Things todo on all TSYS systems
|
||||||
|
##################################################
|
||||||
|
|
||||||
|
####################################################################################################
|
||||||
|
#Download configs and support bits to onfigure things in the TSYS standard model
|
||||||
|
####################################################################################################
|
||||||
|
|
||||||
|
global-configureAptRepos
|
||||||
|
global-shellScripts
|
||||||
|
global-profileScripts
|
||||||
|
global-oam
|
||||||
|
global-systemServiceConfigurationFiles
|
||||||
|
|
||||||
|
|
||||||
|
####################################################################################################
|
||||||
|
#Install packages and preserve existing configs...
|
||||||
|
####################################################################################################
|
||||||
|
global-installPackages
|
||||||
|
global-postPackageConfiguration
|
||||||
|
|
||||||
|
|
||||||
|
##################################################
|
||||||
|
# Things todo on certain types of systems
|
||||||
|
##################################################
|
||||||
|
|
||||||
|
###
|
||||||
|
# Proxmox servers
|
||||||
|
###
|
||||||
|
|
||||||
|
###
|
||||||
|
# Raspberry Pi
|
||||||
|
###
|
||||||
|
|
||||||
|
###
|
||||||
|
# Jetson nano
|
||||||
|
###
|
22
nsswitch.conf
Normal file
22
nsswitch.conf
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#
|
||||||
|
# Example configuration of GNU Name Service Switch functionality.
|
||||||
|
# If you have the `glibc-doc-reference' and `info' packages installed, try:
|
||||||
|
# `info libc "Name Service Switch"' for information about this file.
|
||||||
|
|
||||||
|
passwd: compat sss
|
||||||
|
group: compat sss
|
||||||
|
shadow: compat sss
|
||||||
|
gshadow: files
|
||||||
|
|
||||||
|
hosts: files dns
|
||||||
|
networks: files
|
||||||
|
|
||||||
|
protocols: db files
|
||||||
|
services: db files sss
|
||||||
|
ethers: db files
|
||||||
|
rpc: db files
|
||||||
|
|
||||||
|
netgroup: nis sss
|
||||||
|
sudoers: files
|
||||||
|
|
||||||
|
|
6
ntp.conf
Normal file
6
ntp.conf
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
driftfile /var/lib/ntp/ntp.drift
|
||||||
|
leapfile /usr/share/zoneinfo/leap-seconds.list
|
||||||
|
server 10.251.33.6
|
||||||
|
server 10.251.33.7
|
||||||
|
restrict 127.0.0.1
|
||||||
|
restrict ::1
|
32
omsa.sh
Normal file
32
omsa.sh
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#curl -s http://dl.turnsys.net/omsa.sh|/bin/bash
|
||||||
|
|
||||||
|
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-key 1285491434D8786F
|
||||||
|
gpg -a --export 1285491434D8786F | apt-key add -
|
||||||
|
echo "deb http://linux.dell.com/repo/community/openmanage/930/bionic bionic main" > /etc/apt/sources.list.d/linux.dell.com.sources.list
|
||||||
|
wget http://archive.ubuntu.com/ubuntu/pool/universe/o/openwsman/libwsman-curl-client-transport1_2.6.5-0ubuntu3_amd64.deb
|
||||||
|
wget http://archive.ubuntu.com/ubuntu/pool/universe/o/openwsman/libwsman-client4_2.6.5-0ubuntu3_amd64.deb
|
||||||
|
wget http://archive.ubuntu.com/ubuntu/pool/universe/o/openwsman/libwsman1_2.6.5-0ubuntu3_amd64.deb
|
||||||
|
wget http://archive.ubuntu.com/ubuntu/pool/universe/o/openwsman/libwsman-server1_2.6.5-0ubuntu3_amd64.deb
|
||||||
|
wget http://archive.ubuntu.com/ubuntu/pool/universe/s/sblim-sfcc/libcimcclient0_2.2.8-0ubuntu2_amd64.deb
|
||||||
|
wget http://archive.ubuntu.com/ubuntu/pool/universe/o/openwsman/openwsman_2.6.5-0ubuntu3_amd64.deb
|
||||||
|
wget http://archive.ubuntu.com/ubuntu/pool/multiverse/c/cim-schema/cim-schema_2.48.0-0ubuntu1_all.deb
|
||||||
|
wget http://archive.ubuntu.com/ubuntu/pool/universe/s/sblim-sfc-common/libsfcutil0_1.0.1-0ubuntu4_amd64.deb
|
||||||
|
wget http://archive.ubuntu.com/ubuntu/pool/multiverse/s/sblim-sfcb/sfcb_1.4.9-0ubuntu5_amd64.deb
|
||||||
|
wget http://archive.ubuntu.com/ubuntu/pool/universe/s/sblim-cmpi-devel/libcmpicppimpl0_2.0.3-0ubuntu2_amd64.deb
|
||||||
|
dpkg -i libwsman-curl-client-transport1_2.6.5-0ubuntu3_amd64.deb
|
||||||
|
dpkg -i libwsman-client4_2.6.5-0ubuntu3_amd64.deb
|
||||||
|
dpkg -i libwsman1_2.6.5-0ubuntu3_amd64.deb
|
||||||
|
dpkg -i libwsman-server1_2.6.5-0ubuntu3_amd64.deb
|
||||||
|
dpkg -i libcimcclient0_2.2.8-0ubuntu2_amd64.deb
|
||||||
|
dpkg -i openwsman_2.6.5-0ubuntu3_amd64.deb
|
||||||
|
dpkg -i cim-schema_2.48.0-0ubuntu1_all.deb
|
||||||
|
dpkg -i libsfcutil0_1.0.1-0ubuntu4_amd64.deb
|
||||||
|
dpkg -i sfcb_1.4.9-0ubuntu5_amd64.deb
|
||||||
|
dpkg -i libcmpicppimpl0_2.0.3-0ubuntu2_amd64.deb
|
||||||
|
|
||||||
|
apt update
|
||||||
|
apt -y install srvadmin-all
|
||||||
|
touch /opt/dell/srvadmin/lib64/openmanage/IGNORE_GENERATION
|
||||||
|
/opt/dell/srvadmin/sbin/srvadmin-services.sh enable && /opt/dell/srvadmin/sbin/srvadmin-services.sh start &&
|
9
profiled-notify-discord.sh
Normal file
9
profiled-notify-discord.sh
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
WEBHOOK_URL="https://discord.com/api/webhooks/829537026285109278/8sxWSbvowBR_Lyf48c8UaUyppzOd9PdqTFkzSFBl9uEV1YnuB76WnbS1S0qT9kY6OuJf"
|
||||||
|
CLIENT_IP=$(echo $SSH_CONNECTION | awk '{print $1}')
|
||||||
|
MESSAGE="You aren't alone.... **$USER** has logged in to **$(hostname)** at $(date) from **$CLIENT_IP**"
|
||||||
|
JSON="{\"content\": \"$MESSAGE\"}"
|
||||||
|
|
||||||
|
curl -d "$JSON" -H "Content-Type: application/json" "$WEBHOOK_URL"
|
||||||
|
|
4
profiled-tmux.sh
Normal file
4
profiled-tmux.sh
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
|
||||||
|
tmux a -t default || exec tmux new -s default && exit;
|
||||||
|
fi
|
||||||
|
|
3
profiled-tsys-shell.sh
Normal file
3
profiled-tsys-shell.sh
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
set -o vi
|
||||||
|
export HISTTIMEFORMAT="%m/%d/%Y %T "
|
||||||
|
|
13
prox.sh
Normal file
13
prox.sh
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
rm -f /etc/apt/sources.list.d/*
|
||||||
|
echo "deb http://download.proxmox.com/debian/pve buster pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list
|
||||||
|
wget http://download.proxmox.com/debian/proxmox-ve-release-6.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg
|
||||||
|
chmod +r /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg # optional, if you have a non-default umask
|
||||||
|
apt update && apt -y full-upgrade
|
||||||
|
apt-get -y install ifupdown2 ipmitool ethtool net-tools lshw
|
||||||
|
|
||||||
|
curl -s http://dl.turnsys.net/newSrv.sh|/bin/bash
|
||||||
|
|
||||||
|
|
||||||
|
|
13
prox7.sh
Normal file
13
prox7.sh
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
rm -f /etc/apt/sources.list.d/*
|
||||||
|
echo "deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list
|
||||||
|
wget http://download.proxmox.com/debian/proxmox-ve-release-6.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg
|
||||||
|
chmod +r /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg # optional, if you have a non-default umask
|
||||||
|
apt update && apt -y full-upgrade
|
||||||
|
apt-get -y install ifupdown2 ipmitool ethtool net-tools lshw
|
||||||
|
|
||||||
|
#curl -s http://dl.turnsys.net/newSrv.sh|/bin/bash
|
||||||
|
|
||||||
|
|
||||||
|
|
4
resolv.conf
Normal file
4
resolv.conf
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
nameserver 10.251.33.6
|
||||||
|
nameserver 10.251.33.7
|
||||||
|
domain turnsys.net
|
||||||
|
search turnsys.net
|
17
rsyslog.conf
Normal file
17
rsyslog.conf
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# /etc/rsyslog.conf configuration file for rsyslog
|
||||||
|
#
|
||||||
|
# For more information install rsyslog-doc and see
|
||||||
|
# /usr/share/doc/rsyslog-doc/html/configuration/index.html
|
||||||
|
|
||||||
|
|
||||||
|
#################
|
||||||
|
#### MODULES ####
|
||||||
|
#################
|
||||||
|
|
||||||
|
module(load="imuxsock") # provides support for local system logging
|
||||||
|
module(load="imklog") # provides kernel logging support
|
||||||
|
#module(load="immark") # provides --MARK-- message capability
|
||||||
|
|
||||||
|
*.* @pfv-toolbox.turnsys.net:514
|
||||||
|
EOF
|
||||||
|
|
40
snmpd.conf
Normal file
40
snmpd.conf
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
##########################################################################
|
||||||
|
# snmpd.conf
|
||||||
|
# Created by CNW on 11/3/2018 via snmpconf wizard and manual post tweaks
|
||||||
|
###########################################################################
|
||||||
|
# SECTION: Monitor Various Aspects of the Running Host
|
||||||
|
#
|
||||||
|
|
||||||
|
# disk: Check for disk space usage of a partition.
|
||||||
|
# The agent can check the amount of available disk space, and make
|
||||||
|
# sure it is above a set limit.
|
||||||
|
#
|
||||||
|
load 3 3 3
|
||||||
|
rocommunity kn3lmgmt 10.251.37.1
|
||||||
|
sysservices 76
|
||||||
|
|
||||||
|
#syslocation Rack, Room, Building, City, Country [Lat, Lon]
|
||||||
|
syslocation R5, Prod Center, HQ, Pflugervile, Unite States
|
||||||
|
syscontact prodtechopsalerts@turnsys.com
|
||||||
|
|
||||||
|
#NTP
|
||||||
|
extend ntp-client /usr/local/librenms/ntp-client.sh
|
||||||
|
|
||||||
|
#SMTP
|
||||||
|
extend mailq /usr/local/librenms/postfix-queues
|
||||||
|
extend postfixdetailed /usr/local/librenms/postfixdetailed
|
||||||
|
|
||||||
|
#OS Distribution Detection
|
||||||
|
extend distro /usr/local/librenms/distro
|
||||||
|
extend osupdate /usr/local/librenms/os-updates.sh
|
||||||
|
|
||||||
|
|
||||||
|
#Hardware Detection
|
||||||
|
# (uncomment for x86 platforms)
|
||||||
|
extend manufacturer '/bin/cat /sys/devices/virtual/dmi/id/sys_vendor'
|
||||||
|
extend hardware '/bin/cat /sys/devices/virtual/dmi/id/product_name'
|
||||||
|
extend serial '/bin/cat /sys/devices/virtual/dmi/id/product_serial'
|
||||||
|
|
||||||
|
|
||||||
|
# Allow Systems Management Data Engine SNMP to connect to snmpd using SMUX
|
||||||
|
smuxpeer .1.3.6.1.4.1.674.10892.1
|
8
ssh-authorized-keys
Normal file
8
ssh-authorized-keys
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#Charles N Wyble ssh key (putty windows 10 surface)
|
||||||
|
|
||||||
|
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCnhDjA004vIMMIwFSFv5K0mj0avk997fVdiVtqoSMAAe/OabK/yuFNF3/LRMtWeTG8r859cmdvs+9z+l9jcXIDRgMVW+hR8exysk5JtQgGwSijdwYz9yRmoT3apNSvwFN0g0HkhAWLTQWmafTYCR9CQWJTfPWZN/ypW7Vm/ZHcl9UxLUnT6LWpOL7usEN4OLT6NRwQDaYOtR3OFm62UqIaIFQXAnMg0qbDICllpXatPWtlkN7CU6xHhSwD0GycuJbX1/KBNcQ4msoIMGCUaA8yTWZfqAg6KDE3ojoZJh1w14ABHZPb6imz5jzQEG6eOUVOAlKwv/Ry5RxNfP3Vz9Ld rsa-key-20210828
|
||||||
|
|
||||||
|
|
||||||
|
#Librenms/openvas/rundeck key
|
||||||
|
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGIzki6Xxyyih5HWMXR/uWLGgJprDGEBWC3JX8G7562zcx3eKDl0GKmZv4cl0AZZUwLATvpks8w2Bk6BL7cDvgUkmgpawHgGeRCjLi19/gG8t6M7k+U/rw6uu5SeaFXy5q22zkkE2TDTotWsoa6NE59Gc5/dNgQkYC0r1adD/J2+A6XgxoHdAEVX7gkFhBhXJKTkCYgatDzyE1IUoWLYAQpnMPcBUwK/i7qrcrVYqz0IS6p3MuYYS1+hr1MbMd5bX+Gm6PB6zf/CKhJkUFvaYS+QkVCMzQKrxNRuCs7ULyYvvi9EfxcCow06LuYvslMpEMIfJp8zKX9rhlvu9tuOkF
|
||||||
|
|
15
sssd.conf
Normal file
15
sssd.conf
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
[sssd]
|
||||||
|
services = nss, pam
|
||||||
|
config_file_version = 2
|
||||||
|
domains = TURNSYS.NET
|
||||||
|
|
||||||
|
[domain/TURNSYS.NET]
|
||||||
|
id_provider = ad
|
||||||
|
access_provider = ad
|
||||||
|
enumerate = true
|
||||||
|
ldap_id_mapping = true
|
||||||
|
krb5_validate = false
|
||||||
|
dns_discovery_domain = turnsys.net
|
||||||
|
|
||||||
|
override_homedir = /home/%u
|
||||||
|
override_shell = /bin/bash
|
16
up2date.sh
Normal file
16
up2date.sh
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "Running apt-get update"
|
||||||
|
export DEBIAN_FRONTEND="noninteractive" && apt-get -qq --yes update
|
||||||
|
|
||||||
|
echo "Running apt-get dist-upgrade"
|
||||||
|
export DEBIAN_FRONTEND="noninteractive" && apt-get -qq --yes dist-upgrade
|
||||||
|
|
||||||
|
echo "Running apt-get upgrade"
|
||||||
|
export DEBIAN_FRONTEND="noninteractive" && apt-get -qq --yes upgrade
|
||||||
|
|
||||||
|
|
||||||
|
echo "Running apt-get purge"
|
||||||
|
export DEBIAN_FRONTEND="noninteractive" && apt-get -qq --purge autoremove --yes
|
||||||
|
export DEBIAN_FRONTEND="noninteractive" && apt-get -qq autoclean --yes
|
||||||
|
|
Loading…
Reference in New Issue
Block a user