You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
290 lines
14 KiB
290 lines
14 KiB
#!/bin/bash
|
|
|
|
# Config
|
|
MOTD="/etc/motd2"
|
|
INSTPATH="/etc/bmotd.sh"
|
|
CACHEPATH="/var/cache/bmotd"
|
|
|
|
# The different colours as variables
|
|
C1="\033[01;35m" # Purple
|
|
C2="\033[00;92m" # Green
|
|
C3="\033[01;97m" # White
|
|
X="\033[00;0m" # Reset
|
|
|
|
main () {
|
|
# print help
|
|
if [ $# -lt 1 ]; then
|
|
printHelp
|
|
fi
|
|
|
|
# check if root
|
|
if ! isRoot; then
|
|
echo 'Script needs root privileges to alter motd. Re-run with sudo.'
|
|
exit 1
|
|
fi
|
|
|
|
# check arguments
|
|
case "$1" in
|
|
enable)
|
|
echo -e "\nEnabling bmotd.sh"
|
|
|
|
# copy to INSTPATH
|
|
cp "$(readlink -f $0)" "$INSTPATH"
|
|
|
|
# check if crontab present
|
|
if ! command -v crontab >/dev/null 2>&1; then
|
|
echo "Error: couldn't find crontab. Exiting..."
|
|
exit 1
|
|
fi
|
|
|
|
# Check if motd writable
|
|
if ! test -w $MOTD; then
|
|
echo "Unable to write $MOTD . To enable update permissions. Exiting..."
|
|
exit 1
|
|
fi
|
|
|
|
# Check if script is already in crontab, if not add itself
|
|
CRON_ENTRY="* * * * * $INSTPATH update"
|
|
crontab -l 2>/dev/null | grep -q "$CRON_ENTRY" || ( crontab -l 2>/dev/null; echo "$CRON_ENTRY" ) | crontab -
|
|
|
|
echo -e "Success! Check it yourself with crontab -l"
|
|
|
|
echo "Exiting."
|
|
exit 0
|
|
;;
|
|
disable)
|
|
echo -e "\nDisabling BetterMOTD"
|
|
( crontab -l 2>/dev/null | egrep -v "$INSTPATH update$"; ) | crontab -
|
|
rm $INSTPATH
|
|
exit 0
|
|
;;
|
|
update)
|
|
update
|
|
exit 0
|
|
;;
|
|
*)
|
|
printHelp
|
|
esac
|
|
}
|
|
|
|
update() {
|
|
# Gather information
|
|
HOSTNAME=$(hostname -s)
|
|
FQDN=$(hostname -f)
|
|
OSID=$(cat /etc/*-release 2>/dev/null | awk -F'=' '/^ID=/ { print $2; count++ } END { if (!count) print "Unknown" }')
|
|
KERNEL=$(uname -r)
|
|
EXTERNAL=$(dig TXT +time=3 +tries=2 +short o-o.myaddr.l.google.com @ns1.google.com | tr -d '"')
|
|
|
|
# Check if pkg number cache exists
|
|
test -f "$CACHEPATH/pkg_count" || PKG_REFRESH=1
|
|
|
|
# Check if pkg number cache is outdate
|
|
LASTMODIFICATION=$(date +%s -r "$CACHEPATH/pkg_count")
|
|
CURRENTTIME=$(date +%s)
|
|
UPDATEDAGO=$((CURRENTTIME - LASTMODIFICATION))
|
|
[ "$UPDATEDAGO" -gt "86400" ] && PKG_REFRESH=1
|
|
|
|
# If cache old or non existent, get number of updates awaiting
|
|
if [ $PKG_REFRESH ]; then
|
|
case "$OSID" in
|
|
debian|osmc|linuxmint)
|
|
PKG_NU=$(apt-get --just-print upgrade | awk '/^[0-9]/ { print $1; exit }')
|
|
;;
|
|
arch|archarm)
|
|
PKG_NU=$(pacman -Qu | wc -l)
|
|
;;
|
|
*)
|
|
PKG_NU="-1"
|
|
esac
|
|
mkdir -p "$CACHEPATH"
|
|
echo $PKG_NU > "$CACHEPATH/pkg_count"
|
|
fi
|
|
PKG_NU=$(cat $CACHEPATH/pkg_count)
|
|
# Test if /etc/motd writable and run motd generator if so
|
|
test -w $MOTD && motdGen
|
|
}
|
|
|
|
function printHelp {
|
|
printf "./$0 update | disable | enable"
|
|
exit 0;
|
|
}
|
|
|
|
function prettyPrint {
|
|
declare -A a
|
|
height=5
|
|
a["32,0"]='$';a["32,1"]='$';a["32,2"]='$';a["32,3"]='$';a["32,4"]='$';
|
|
a["33,0"]=' _ ';a["33,1"]='| |';a["33,2"]='|_|';a["33,3"]='(_)';a["33,4"]=' ';
|
|
a["34,0"]=' _ _ ';a["34,1"]='( | )';a["34,2"]=' V V ';a["34,3"]=' $ ';a["34,4"]=' ';
|
|
a["35,0"]=' _ _ ';a["35,1"]=' _| | |_ ';a["35,2"]='|_ . _|';a["35,3"]='|_ _|';a["35,4"]=' |_|_| ';
|
|
a["36,0"]=' ';a["36,1"]=' ||_';a["36,2"]='(_-<';a["36,3"]='/ _/';a["36,4"]=' || ';
|
|
a["37,0"]=' _ __ ';a["37,1"]='(_)/ / ';a["37,2"]=' / /_ ';a["37,3"]=' /_/(_)';a["37,4"]=' ';
|
|
a["38,0"]=' __ ';a["38,1"]='/ _|___ ';a["38,2"]='> _|_ _|';a["38,3"]='\_____| ';a["38,4"]=' ';
|
|
a["39,0"]=' _ ';a["39,1"]='( )';a["39,2"]='|/ ';a["39,3"]=' $ ';a["39,4"]=' ';
|
|
a["40,0"]=' __';a["40,1"]=' / /';a["40,2"]='| | ';a["40,3"]='| | ';a["40,4"]=' \_\';
|
|
a["41,0"]='__ ';a["41,1"]='\ \ ';a["41,2"]=' | |';a["41,3"]=' | |';a["41,4"]='/_/ ';
|
|
a["42,0"]=' ';a["42,1"]='_/\_';a["42,2"]='> <';a["42,3"]=' \/ ';a["42,4"]=' ';
|
|
a["43,0"]=' _ ';a["43,1"]=' _| |_ ';a["43,2"]='|_ _|';a["43,3"]=' |_| ';a["43,4"]=' ';
|
|
a["44,0"]=' ';a["44,1"]=' ';a["44,2"]=' _ ';a["44,3"]='( )';a["44,4"]='|/ ';
|
|
a["45,0"]=' ';a["45,1"]=' ___ ';a["45,2"]='|___|';a["45,3"]=' $ ';a["45,4"]=' ';
|
|
a["46,0"]=' ';a["46,1"]=' ';a["46,2"]=' _ ';a["46,3"]='(_)';a["46,4"]=' ';
|
|
a["47,0"]=' __';a["47,1"]=' / /';a["47,2"]=' / / ';a["47,3"]='/_/ ';a["47,4"]=' ';
|
|
a["48,0"]=' __ ';a["48,1"]=' / \ ';a["48,2"]='| () |';a["48,3"]=' \__/ ';a["48,4"]=' ';
|
|
a["49,0"]=' _ ';a["49,1"]='/ |';a["49,2"]='| |';a["49,3"]='|_|';a["49,4"]=' ';
|
|
a["50,0"]=' ___ ';a["50,1"]='|_ )';a["50,2"]=' / / ';a["50,3"]='/___|';a["50,4"]=' ';
|
|
a["51,0"]=' ____';a["51,1"]='|__ /';a["51,2"]=' |_ \';a["51,3"]='|___/';a["51,4"]=' ';
|
|
a["52,0"]=' _ _ ';a["52,1"]='| | | ';a["52,2"]='|_ _|';a["52,3"]=' |_| ';a["52,4"]=' ';
|
|
a["53,0"]=' ___ ';a["53,1"]='| __|';a["53,2"]='|__ \';a["53,3"]='|___/';a["53,4"]=' ';
|
|
a["54,0"]=' __ ';a["54,1"]=' / / ';a["54,2"]='/ _ \';a["54,3"]='\___/';a["54,4"]=' ';
|
|
a["55,0"]=' ____ ';a["55,1"]='|__ |';a["55,2"]=' / / ';a["55,3"]=' /_/ ';a["55,4"]=' ';
|
|
a["56,0"]=' ___ ';a["56,1"]='( _ )';a["56,2"]='/ _ \';a["56,3"]='\___/';a["56,4"]=' ';
|
|
a["57,0"]=' ___ ';a["57,1"]='/ _ \';a["57,2"]='\_, /';a["57,3"]=' /_/ ';a["57,4"]=' ';
|
|
a["58,0"]=' _ ';a["58,1"]='(_)';a["58,2"]=' _ ';a["58,3"]='(_)';a["58,4"]=' ';
|
|
a["59,0"]=' _ ';a["59,1"]='(_)';a["59,2"]=' _ ';a["59,3"]='( )';a["59,4"]='|/ ';
|
|
a["60,0"]=' __';a["60,1"]=' / /';a["60,2"]='< < ';a["60,3"]=' \_\';a["60,4"]=' ';
|
|
a["61,0"]=' ';a["61,1"]=' ___ ';a["61,2"]='|___|';a["61,3"]='|___|';a["61,4"]=' ';
|
|
a["62,0"]='__ ';a["62,1"]='\ \ ';a["62,2"]=' > >';a["62,3"]='/_/ ';a["62,4"]=' ';
|
|
a["63,0"]=' ___ ';a["63,1"]='|__ \';a["63,2"]=' /_/';a["63,3"]=' (_) ';a["63,4"]=' ';
|
|
a["64,0"]=' ____ ';a["64,1"]=' / __ \ ';a["64,2"]='/ / _` |';a["64,3"]='\ \__,_|';a["64,4"]=' \____/ ';
|
|
a["65,0"]=' _ ';a["65,1"]=' /_\ ';a["65,2"]=' / _ \ ';a["65,3"]='/_/ \_\';a["65,4"]=' ';
|
|
a["66,0"]=' ___ ';a["66,1"]='| _ )';a["66,2"]='| _ \';a["66,3"]='|___/';a["66,4"]=' ';
|
|
a["67,0"]=' ___ ';a["67,1"]=' / __|';a["67,2"]='| (__ ';a["67,3"]=' \___|';a["67,4"]=' ';
|
|
a["68,0"]=' ___ ';a["68,1"]='| \ ';a["68,2"]='| |) |';a["68,3"]='|___/ ';a["68,4"]=' ';
|
|
a["69,0"]=' ___ ';a["69,1"]='| __|';a["69,2"]='| _| ';a["69,3"]='|___|';a["69,4"]=' ';
|
|
a["70,0"]=' ___ ';a["70,1"]='| __|';a["70,2"]='| _| ';a["70,3"]='|_| ';a["70,4"]=' ';
|
|
a["71,0"]=' ___ ';a["71,1"]=' / __|';a["71,2"]='| (_ |';a["71,3"]=' \___|';a["71,4"]=' ';
|
|
a["72,0"]=' _ _ ';a["72,1"]='| || |';a["72,2"]='| __ |';a["72,3"]='|_||_|';a["72,4"]=' ';
|
|
a["73,0"]=' ___ ';a["73,1"]='|_ _|';a["73,2"]=' | | ';a["73,3"]='|___|';a["73,4"]=' ';
|
|
a["74,0"]=' _ ';a["74,1"]=' _ | |';a["74,2"]='| || |';a["74,3"]=' \__/ ';a["74,4"]=' ';
|
|
a["75,0"]=' _ __';a["75,1"]='| |/ /';a["75,2"]='| '"'"' < ';a["75,3"]='|_|\_\';a["75,4"]=' ';
|
|
a["76,0"]=' _ ';a["76,1"]='| | ';a["76,2"]='| |__ ';a["76,3"]='|____|';a["76,4"]=' ';
|
|
a["77,0"]=' __ __ ';a["77,1"]='| \/ |';a["77,2"]='| |\/| |';a["77,3"]='|_| |_|';a["77,4"]=' ';
|
|
a["78,0"]=' _ _ ';a["78,1"]='| \| |';a["78,2"]='| .` |';a["78,3"]='|_|\_|';a["78,4"]=' ';
|
|
a["79,0"]=' ___ ';a["79,1"]=' / _ \ ';a["79,2"]='| (_) |';a["79,3"]=' \___/ ';a["79,4"]=' ';
|
|
a["80,0"]=' ___ ';a["80,1"]='| _ \';a["80,2"]='| _/';a["80,3"]='|_| ';a["80,4"]=' ';
|
|
a["81,0"]=' ___ ';a["81,1"]=' / _ \ ';a["81,2"]='| (_) |';a["81,3"]=' \__\_\';a["81,4"]=' ';
|
|
a["82,0"]=' ___ ';a["82,1"]='| _ \';a["82,2"]='| /';a["82,3"]='|_|_\';a["82,4"]=' ';
|
|
a["83,0"]=' ___ ';a["83,1"]='/ __|';a["83,2"]='\__ \';a["83,3"]='|___/';a["83,4"]=' ';
|
|
a["84,0"]=' _____ ';a["84,1"]='|_ _|';a["84,2"]=' | | ';a["84,3"]=' |_| ';a["84,4"]=' ';
|
|
a["85,0"]=' _ _ ';a["85,1"]='| | | |';a["85,2"]='| |_| |';a["85,3"]=' \___/ ';a["85,4"]=' ';
|
|
a["86,0"]='__ __';a["86,1"]='\ \ / /';a["86,2"]=' \ V / ';a["86,3"]=' \_/ ';a["86,4"]=' ';
|
|
a["87,0"]='__ __';a["87,1"]='\ \ / /';a["87,2"]=' \ \/\/ / ';a["87,3"]=' \_/\_/ ';a["87,4"]=' ';
|
|
a["88,0"]='__ __';a["88,1"]='\ \/ /';a["88,2"]=' > < ';a["88,3"]='/_/\_\';a["88,4"]=' ';
|
|
a["89,0"]='__ __';a["89,1"]='\ \ / /';a["89,2"]=' \ V / ';a["89,3"]=' |_| ';a["89,4"]=' ';
|
|
a["90,0"]=' ____';a["90,1"]='|_ /';a["90,2"]=' / / ';a["90,3"]='/___|';a["90,4"]=' ';
|
|
a["91,0"]=' __ ';a["91,1"]='| _|';a["91,2"]='| | ';a["91,3"]='| | ';a["91,4"]='|__|';
|
|
a["92,0"]='__ ';a["92,1"]='\ \ ';a["92,2"]=' \ \ ';a["92,3"]=' \_\';a["92,4"]=' ';
|
|
a["93,0"]=' __ ';a["93,1"]='|_ |';a["93,2"]=' | |';a["93,3"]=' | |';a["93,4"]='|__|';
|
|
a["94,0"]=' /\ ';a["94,1"]='|/\|';a["94,2"]=' $ ';a["94,3"]=' $ ';a["94,4"]=' ';
|
|
a["95,0"]=' ';a["95,1"]=' ';a["95,2"]=' ';a["95,3"]=' ___ ';a["95,4"]='|___|';
|
|
a["96,0"]=' _ ';a["96,1"]='( )';a["96,2"]=' \|';a["96,3"]=' $ ';a["96,4"]=' ';
|
|
a["97,0"]=' ';a["97,1"]=' __ _ ';a["97,2"]='/ _` |';a["97,3"]='\__,_|';a["97,4"]=' ';
|
|
a["98,0"]=' _ ';a["98,1"]='| |__ ';a["98,2"]='| '"'"'_ \';a["98,3"]='|_.__/';a["98,4"]=' ';
|
|
a["99,0"]=' ';a["99,1"]=' __ ';a["99,2"]='/ _|';a["99,3"]='\__|';a["99,4"]=' ';
|
|
a["100,0"]=' _ ';a["100,1"]=' __| |';a["100,2"]='/ _` |';a["100,3"]='\__,_|';a["100,4"]=' ';
|
|
a["101,0"]=' ';a["101,1"]=' ___ ';a["101,2"]='/ -_)';a["101,3"]='\___|';a["101,4"]=' ';
|
|
a["102,0"]=' __ ';a["102,1"]=' / _|';a["102,2"]='| _|';a["102,3"]='|_| ';a["102,4"]=' ';
|
|
a["103,0"]=' ';a["103,1"]=' __ _ ';a["103,2"]='/ _` |';a["103,3"]='\__, |';a["103,4"]='|___/ ';
|
|
a["104,0"]=' _ ';a["104,1"]='| |_ ';a["104,2"]='| '"'"' \ ';a["104,3"]='|_||_|';a["104,4"]=' ';
|
|
a["105,0"]=' _ ';a["105,1"]='(_)';a["105,2"]='| |';a["105,3"]='|_|';a["105,4"]=' ';
|
|
a["106,0"]=' _ ';a["106,1"]=' (_)';a["106,2"]=' | |';a["106,3"]=' _/ |';a["106,4"]='|__/ ';
|
|
a["107,0"]=' _ ';a["107,1"]='| |__';a["107,2"]='| / /';a["107,3"]='|_\_\';a["107,4"]=' ';
|
|
a["108,0"]=' _ ';a["108,1"]='| |';a["108,2"]='| |';a["108,3"]='|_|';a["108,4"]=' ';
|
|
a["109,0"]=' ';a["109,1"]=' _ __ ';a["109,2"]='| '"'"' \ ';a["109,3"]='|_|_|_|';a["109,4"]=' ';
|
|
a["110,0"]=' ';a["110,1"]=' _ _ ';a["110,2"]='| '"'"' \ ';a["110,3"]='|_||_|';a["110,4"]=' ';
|
|
a["111,0"]=' ';a["111,1"]=' ___ ';a["111,2"]='/ _ \';a["111,3"]='\___/';a["111,4"]=' ';
|
|
a["112,0"]=' ';a["112,1"]=' _ __ ';a["112,2"]='| '"'"'_ \';a["112,3"]='| .__/';a["112,4"]='|_| ';
|
|
a["113,0"]=' ';a["113,1"]=' __ _ ';a["113,2"]='/ _` |';a["113,3"]='\__, |';a["113,4"]=' |_|';
|
|
a["114,0"]=' ';a["114,1"]=' _ _ ';a["114,2"]='| '"'"'_|';a["114,3"]='|_| ';a["114,4"]=' ';
|
|
a["115,0"]=' ';a["115,1"]=' ___';a["115,2"]='(_-<';a["115,3"]='/__/';a["115,4"]=' ';
|
|
a["116,0"]=' _ ';a["116,1"]='| |_ ';a["116,2"]='| _|';a["116,3"]=' \__|';a["116,4"]=' ';
|
|
a["117,0"]=' ';a["117,1"]=' _ _ ';a["117,2"]='| || |';a["117,3"]=' \_,_|';a["117,4"]=' ';
|
|
a["118,0"]=' ';a["118,1"]='__ __';a["118,2"]='\ V /';a["118,3"]=' \_/ ';a["118,4"]=' ';
|
|
a["119,0"]=' ';a["119,1"]='__ __ __';a["119,2"]='\ V V /';a["119,3"]=' \_/\_/ ';a["119,4"]=' ';
|
|
a["120,0"]=' ';a["120,1"]='__ __';a["120,2"]='\ \ /';a["120,3"]='/_\_\';a["120,4"]=' ';
|
|
a["121,0"]=' ';a["121,1"]=' _ _ ';a["121,2"]='| || |';a["121,3"]=' \_, |';a["121,4"]=' |__/ ';
|
|
a["122,0"]=' ';a["122,1"]=' ___';a["122,2"]='|_ /';a["122,3"]='/__|';a["122,4"]=' ';
|
|
|
|
str=$1
|
|
strarr=()
|
|
for (( i=0; i<${#str}; i++ )); do
|
|
strarr+=($(printf '%d\n' "'${str:$i:1}"))
|
|
done
|
|
for ((i=0;i<height;i++)) do
|
|
echo -n ' '
|
|
for j in "${strarr[@]}"; do
|
|
printf "%s" "${a["$j,$i"]}"
|
|
done
|
|
printf "\n"
|
|
done
|
|
}
|
|
|
|
|
|
function parse_ip() {
|
|
i=0;
|
|
for dev in $(ip a | egrep "^[0-9]" | grep -v "lo" | awk '{ print $2 }'); do
|
|
if [ $(ip a s dev "$dev" | grep -c "inet ") -gt 0 ]; then
|
|
arr[i]=$dev' '
|
|
for inet in $(ip a s dev "$dev" | grep "inet " | awk '{ print $2 }'); do
|
|
arr[i]=${arr[i]}$inet' '
|
|
done;
|
|
arr[i]=${arr[i]}' ';
|
|
i=$i+1
|
|
fi;
|
|
done;
|
|
}
|
|
|
|
|
|
function parse_ifconfig() {
|
|
i=0
|
|
for dev in $(sudo ifconfig | egrep "^[a-z0-9]" | grep -v "lo" | awk '{ print $1 }'); do
|
|
if [ $(sudo ifconfig ${dev%?} | grep -c "inet ") -gt 0 ]; then
|
|
arr[i]=$dev' '
|
|
for inet in $(sudo ifconfig ${dev%?} | grep "inet " | awk '{ print $2 }'); do
|
|
arr[i]=${arr[i]}$inet' '
|
|
done;
|
|
arr[i]=${arr[i]}' ';
|
|
i=$i+1
|
|
fi;
|
|
done;
|
|
}
|
|
|
|
function isRoot() {
|
|
! (( ${EUID:-0} || $(id -u) ))
|
|
}
|
|
|
|
motdGen() {
|
|
# Collect useful information about your system
|
|
LASTLOGIN="$(date --date "$(lastlog -u $USER | tail -n 1 | tr -s ' ' | cut -d" " -f4-)" "+%a %e %b %Y, %H:%M:%S")$C3 from$C1 $(lastlog -u $USER | tail -n 1 | tr -s ' ' | cut -d" " -f3)"
|
|
UPTIME_EXT=`uptime | sed -n 's/^.*\(up.*\),[0-9 ]*user.*\(load average.*\)/\1, \2/p'`
|
|
|
|
|
|
LBT='╔══════════════════════════════════════════════════════════╾╌╌╌╌╌╌╌┈┈┄┄┄┄┄┄┄┄┄'
|
|
LBB='╚══════════════════════════════════════╾╌╌╌╌╌╌╌┈┈┄┄┄┄┄┄┄┄┄'
|
|
|
|
command -v ip >/dev/null 2>&1 && parse_ip
|
|
command -v ip >/dev/null 2>&1 || parse_ifconfig
|
|
|
|
clear > $MOTD # to clear the screen when showing up
|
|
echo -e "$C2" >> $MOTD
|
|
prettyPrint $HOSTNAME >> $MOTD
|
|
echo -e " $C3$LBT" >> $MOTD
|
|
echo -e " $C3║$C2 • FQDN...............$C3: $C1 $FQDN" >> $MOTD
|
|
echo -e " $C3║$C2 • Last Login.........$C3: $C1 $LASTLOGIN" >> $MOTD
|
|
echo -e " $C3║$C2 • Pkg to update......$C3: $C1 $PKG_NU" >> $MOTD
|
|
echo -e " $C3║$C2 • Uptime,Load........$C3: $C1 $UPTIME_EXT" >> $MOTD
|
|
echo -e " $C3║$C2 • Kernel.............$C3: $C1 $KERNEL" >> $MOTD
|
|
echo -e " $C3║$C2 • External IP........$C3: $C1 $EXTERNAL" >> $MOTD
|
|
for (( i=0; i<${#arr[@]}; i++ )); do
|
|
if [ $i -eq 0 ]; then
|
|
echo -e "$C3 ║$C2 • Network Interfaces.$C3: $C1 ${arr[$i]}" >> $MOTD
|
|
else
|
|
echo -e "$C3 ║$C2 $C1 ${arr[$i]}" >> $MOTD
|
|
fi
|
|
done
|
|
echo -e " $C3$LBB" >> $MOTD
|
|
echo -e "$X" >> $MOTD
|
|
}
|
|
|
|
|
|
main "$@"
|
|
|
|
|