infra/ansible/roles/general/files/etc/update-motd.d/20-banner
2025-05-30 13:24:38 -05:00

235 lines
6 KiB
Bash
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -e
# Define some colours
BOLD=""
FBLK=""
FRED=""
FGRN=""
FYLW=""
FBLU=""
FPPL=""
FCYN=""
FWHT=""
F_ORANGE=""
F_ORANGE2=""
F_PURPLE=""
F_TEAL=""
F_SEA=""
F_YELLOW=""
F_GREEN=""
F_GREEN2=""
F_RED=""
F_CYAN=""
F_DARKBLUE=""
F_DARKPURPLE=""
F_PURPLE=""
F_DARKGREY=""
F_MIDGREY=""
F_MIDGREY2=""
F_BLUE=""
F_LIGHTBLUE=""
F_GOLD=""
F_LIGHTCYAN=""
F_LIGHTYELLOW=""
B_DARKBLUE=""
F_BRIGHTYELLOW=""
F_DARKGREY=""
F_BRIGHTGREEN=""
F_BRIGHTORANGE=""
F_MIDGREEN=""
F_PINK=""
F_BRIGHTPINK=""
F_VIOLET=""
F_DARKRED=""
F_STEEL=""
CLR=""
BRED=""
BGRN=""
#ARROW="►"
ARROW=">"
PRIMARY_COLOUR="${F_BRIGHTYELLOW}"
COLON="${F_DARKGREY}:${CLR}"
NA="${F_DARKGREY}N/A${CLR}"
section() {
TITLE="$1"
TEXT="$2"
#ARROW_COLOUR="${F_LIGHTYELLOW}"
ARROW_COLOUR=""
TITLE_COLOUR="${F_LIGHTCYAN}"
echo " ${ARROW_COLOUR}${ARROW}${CLR} ${TITLE_COLOUR}${TITLE}${CLR}|${TEXT}"
}
subsection() {
TEXT="$1"
echo " ${F_DARKGREY}>${CLR}|${TEXT}"
}
format() {
COLOUR="$1"
TEXT="$2"
echo "${COLOUR}${TEXT}${CLR}"
}
in_brackets() {
TEXT="$1"
echo "${F_DARKGREY}(${CLR}${TEXT}${F_DARKGREY})${CLR}"
}
prefix() {
COLOUR="$1"
PREFIX="$2"
TEXT="$3"
echo "${COLOUR}${PREFIX}${COLON} ${TEXT}"
}
show_hostname() {
HOSTNAME="$(format ${F_BRIGHTYELLOW} $(hostname -f))"
section "Host" "${HOSTNAME}"
}
show_os() {
OS_DESCRIPTION=$(lsb_release -s -d)
COLOUR_1=${F_BRIGHTORANGE}
COLOUR_2=${F_ORANGE2}
COLOUR_3=${F_ORANGE}
DESCRIPTION=$(format ${COLOUR_1} "${OS_DESCRIPTION}")
RELEASE=$(format ${COLOUR_2} "$(lsb_release -s -r)")
CODENAME=$(format ${COLOUR_2} "$(lsb_release -s -c)")
KERNEL=$(format ${COLOUR_2} "$(uname -r)")
ARCH=$(format ${COLOUR_2} "$(uname -m)")
OS_RELEASE=$(prefix ${COLOUR_3} Release "${RELEASE}")
OS_CODENAME=$(in_brackets ${CODENAME})
OS_KERNEL=$(prefix ${COLOUR_3} "Kernel " "${KERNEL}")
OS_ARCH=$(in_brackets ${ARCH})
section "OS" "${DESCRIPTION}"
subsection "${OS_RELEASE} ${OS_CODENAME}"
subsection "${OS_KERNEL} ${OS_ARCH}"
}
show_net() {
INET_DEFAULT=$(ip ro show default | grep -Po "dev \w+" | head -n1 | awk '{ print $2 }')
INET6_DEFAULT=$(ip -6 ro show default | grep -Po "dev \w+" | head -n1 | awk '{ print $2 }')
MAC_ADDR=$(ip addr show dev ${INET_DEFAULT} | grep "link/ether" | awk '{ print $2 }')
INET_ADDR=$(ip addr show dev ${INET_DEFAULT} | grep "inet " | grep "scope global" | awk '{ print $2 }' | head -n1)
INET6_ADDR=$(ip addr show dev ${INET6_DEFAULT} | grep "inet6 " | grep "scope global" | awk '{ print $2 }' | head -n1)
if [[ -z ${INET6_ADDR} ]]; then
INET6_ADDR=${NA}
fi
PRIMARY_IFACE="$(format ${F_LIGHTBLUE} ${INET_DEFAULT})"
PRIMARY_IP4="$(format ${F_LIGHTBLUE} ${INET_ADDR})"
PRIMARY_IP6="$(format ${F_LIGHTBLUE} ${INET6_ADDR})"
PRIMARY_MAC="$(format ${F_LIGHTBLUE} ${MAC_ADDR})"
PRIMARY="$(prefix ${F_STEEL} NIC ${PRIMARY_IFACE})"
MAC="$(in_brackets ${PRIMARY_MAC})"
section "Net" "${PRIMARY} ${MAC}"
subsection "$(prefix ${F_STEEL} IP4 ${PRIMARY_IP4})"
subsection "$(prefix ${F_STEEL} IP6 ${PRIMARY_IP6})"
}
show_hardware() {
if [[ "$(lsb_release -i)" =~ "Raspbian" ]]; then
SYSINFO="$(pinout | egrep -o '(Pi Model [0-9][A-Z]\+?\s? V[0-9]\.[0-9])')"
SYSTEM=$(format ${F_VIOLET} "${SYSINFO}")
else
MANUFACTURER=$(dmidecode -s system-manufacturer)
PRODUCT_NAME=$(dmidecode -s system-product-name)
SYSINFO=$(format ${F_VIOLET} "${MANUFACTURER}")
if [[ -z ${MANUFACTURER} ]]; then
SYSTEM=${NA}
else
if [[ ! -z ${PRODUCT_NAME} ]]; then
PRODUCT=$(format ${F_VIOLET} "${PRODUCT_NAME}")
PRODUCT_DISPLAY=$(in_brackets "${PRODUCT}")
SYSINFO="${SYSINFO} ${PRODUCT_DISPLAY}"
fi
SYSTEM=$(format ${F_VIOLET} "${SYSINFO}")
fi
fi
MEM_B=$(cat /proc/meminfo | grep MemTotal | awk '{ print $2 }')
let MEM_MB="${MEM_B}/1024"
MEMORY=$(format ${F_VIOLET} "${MEM_MB}M")
PROCESSOR=$(format ${F_VIOLET} "$(cat /proc/cpuinfo | grep 'model name' | head -n1 | awk -F': ' '{ print $2 }')")
CPUS=$(in_brackets $(format ${F_VIOLET} x$(cat /proc/cpuinfo | grep processor | wc -l)))
DISKS=$(lsblk | grep disk | awk '{ print $1"|"$4 }')
STORAGE=""
for DISK in ${DISKS}; do
DEVICE=$(format ${F_VIOLET} $(echo ${DISK} | cut -f1 -d"|"))
SIZE=$(in_brackets $(format ${F_VIOLET} $(echo ${DISK} | cut -f2 -d"|")))
STORAGE="${STORAGE}${DEVICE} ${SIZE} "
done
if [[ -z ${STORAGE} ]]; then
STORAGE=${NA}
fi
SYS=$(prefix ${F_BRIGHTPINK} Sys "${SYSTEM}")
CPU=$(prefix ${F_BRIGHTPINK} CPU "${PROCESSOR} ${CPUS}")
MEM=$(prefix ${F_BRIGHTPINK} Mem "${MEMORY}")
DSK=$(prefix ${F_BRIGHTPINK} Disk "${STORAGE}")
section "H/w" "${SYS}"
subsection "${CPU}"
subsection "${MEM} ${DSK}"
}
show_uptime() {
COLOUR_1=${F_BRIGHTGREEN}
COLOUR_2=${F_GREEN2}
COLOUR_3=${F_GREEN}
AGO=$(format ${COLOUR_1} "$(uptime -p | cut -c4-)")
BOOT=$(format ${COLOUR_2} "$(uptime -s)")
BUILT=$(format ${COLOUR_2} "$(stat / | grep "Birth" | sed 's/Birth: //g' | cut -b 2-20)")
BOOT_DATE=$(prefix ${COLOUR_3} Booted "${BOOT}")
BUILT_DATE=$(prefix ${COLOUR_3} "Built " "${BUILT}")
section "Up" "${AGO}"
subsection "${BOOT_DATE}"
subsection "${BUILT_DATE}"
}
sections() {
show_hostname
show_os
show_uptime
show_net
show_hardware
}
cat <<EOF
  northstar networks*  https://nsnw.ca/ 
 support@nsnw.ca · +1 403 808 9371 
--System----------------------------------------------------------------------
$(sections | column -t -s "|")
EOF