diff --git a/scripts/98-motd.sh b/scripts/98-motd.sh index d3a0224..27483e3 100644 --- a/scripts/98-motd.sh +++ b/scripts/98-motd.sh @@ -1,23 +1,14 @@ +#!/usr/bin/env bash +set -euo pipefail +source ./lib.sh + +log "MOTD installieren …" +install -d /usr/local/bin cat >/usr/local/bin/mw-motd <<'SH' #!/usr/bin/env bash -# bewusst KEIN "set -e"; MOTD soll nie hart abbrechen -set -u - -# Farben -NC="\033[0m"; CY="\033[1;36m"; GR="\033[1;32m"; YE="\033[1;33m"; RD="\033[1;31m"; GY="\033[0;90m"; WH="\033[1;37m" - -# Installer-Variablen (optional) -UI_HOST=""; WEBMAIL_HOST=""; MAIL_HOSTNAME=""; LE_EMAIL=""; PROXY_MODE=""; NPM_IP="" -[ -r /etc/mailwolt/installer.env ] && . /etc/mailwolt/installer.env || true -# Aus .env (falls vorhanden) -if [ -r /var/www/mailwolt/.env ]; then - LE_EMAIL="${LE_EMAIL:-$(grep -E '^LE_EMAIL=' /var/www/mailwolt/.env 2>/dev/null | sed 's/^LE_EMAIL=//')}" - PROXY_MODE="${PROXY_MODE:-$(grep -E '^PROXY_MODE=' /var/www/mailwolt/.env 2>/dev/null | sed 's/^PROXY_MODE=//')}" - NPM_IP="${NPM_IP:-$(grep -E '^NPM_IP=' /var/www/mailwolt/.env 2>/dev/null | sed 's/^NPM_IP=//')}" -fi - -# Header -printf "${CY}" +set -euo pipefail +NC="\033[0m"; CY="\033[1;36m"; GR="\033[1;32m"; YE="\033[1;33m"; RD="\033[1;31m"; GY="\033[0;90m" +printf "\033[1;36m" cat <<'ASCII' :::: :::: ::: ::::::::::: ::: ::: ::: :::::::: ::: ::::::::::: +:+:+: :+:+:+ :+: :+: :+: :+: :+: :+: :+: :+: :+: :+: @@ -27,113 +18,59 @@ cat <<'ASCII' #+# #+# #+# #+# #+# #+# #+#+# #+#+# #+# #+# #+# #+# ### ### ### ### ########### ########## ### ### ######## ########## ### ASCII -printf "${NC}\n" - -# Safe-Helfer (niemals Script killen) -grab() { eval "$1" 2>/dev/null || true; } -line() { printf "${GY}%-7s:${NC} %s\n" "$1" "$2"; } - -# Systemdaten -now="$(date '+%Y-%m-%d %H:%M:%S %Z' 2>/dev/null || echo -n '-')" -fqdn="$(hostname -f 2>/dev/null || hostname 2>/dev/null || echo -n '-')" -ip_int="$(hostname -I 2>/dev/null | awk '{print $1}' 2>/dev/null || true)" -ip_ext="$(curl -fsS --max-time 1 https://ifconfig.me 2>/dev/null || true)" -upt="$(uptime -p 2>/dev/null || echo -n '-')" -cores="$(nproc 2>/dev/null || echo -n '-')" -load="$(awk '{print $1" / "$2" / "$3}' /proc/loadavg 2>/dev/null || echo -n '-')" - -# RAM/SWAP (MiB) -mem_total="$(awk '/MemTotal/ {print int($2/1024)}' /proc/meminfo 2>/dev/null || echo -n '-')" -mem_avail="$(awk '/MemAvailable/ {print int($2/1024)}' /proc/meminfo 2>/dev/null || echo -n '0')" -mem_used=$(( ${mem_total:-0}-${mem_avail:-0} )) -swap_total="$(awk '/SwapTotal/ {print int($2/1024)}' /proc/meminfo 2>/dev/null || echo -n '-')" -swap_free="$(awk '/SwapFree/ {print int($2/1024)}' /proc/meminfo 2>/dev/null || echo -n '0')" -swap_used=$(( ${swap_total:-0}-${swap_free:-0} )) - -# Disks -disk_line(){ df -hP "$1" 2>/dev/null | awk 'NR==2{printf "%s/%s (%s used)", $3,$2,$5}'; } -disk_root="$(disk_line /)" -disk_var="$(disk_line /var)" - -svc_state(){ - local unit="$1" - if systemctl is-active --quiet "$unit"; then - printf "${GR}OK${NC}" - else - printf "${RD}FAIL${NC}" - fi -} - -# Ausgabe +printf "\033[0m\n" +now="$(date '+%Y-%m-%d %H:%M:%S %Z')" +fqdn="$(hostname -f 2>/dev/null || hostname)" +ip_int="$(hostname -I 2>/dev/null | awk '{print $1}')" +ip_ext=""; command -v curl >/dev/null 2>&1 && ip_ext="$(curl -s --max-time 1 https://ifconfig.me || true)" +upt="$(uptime -p 2>/dev/null || true)" +cores="$(nproc 2>/dev/null || echo -n '?')" +load="$(awk '{print $1" / "$2" / "$3}' /proc/loadavg 2>/dev/null)" +svc(){ systemctl is-active --quiet "$1" && echo -e "${GR}OK${NC}" || echo -e "${RD}FAIL${NC}"; } printf "${CY}Information as of:${NC} ${YE}%s${NC}\n" "$now" -line "FQDN" "$fqdn" -if [ -n "$ip_ext" ]; then - printf "${GY}%-7s:${NC} %s ${GY}(ext:${NC} %s${GY})${NC}\n" "IP" "${ip_int:--}" "$ip_ext" -else - line "IP" "${ip_int:--}" -fi -line "Uptime" "$upt" -printf "${GY}%-7s:${NC} %s cores, load %s (1/5/15)\n" "CPU" "$cores" "$load" -printf "${GY}%-7s:${NC} %s MiB used / %s MiB total\n" "RAM" "$mem_used" "$mem_total" -printf "${GY}%-7s:${NC} %s MiB used / %s MiB total\n" "SWAP" "$swap_used" "$swap_total" -line "Disk /" "${disk_root:-'-'}" -line "Disk/var" "${disk_var:-'-'}" - -# App/Installer Infos -[ -n "${LE_EMAIL:-}" ] && line "LE Mail" "$LE_EMAIL" -[ -n "${UI_HOST:-}" ] && line "UI" "$UI_HOST" -[ -n "${WEBMAIL_HOST:-}" ] && line "Webmail" "$WEBMAIL_HOST" -[ -n "${MAIL_HOSTNAME:-}" ]&& line "MX" "$MAIL_HOSTNAME" -if [ -n "${PROXY_MODE:-}" ]; then - if [ "$PROXY_MODE" = "1" ]; then - line "Proxy" "ja (NPM: ${NPM_IP:-unbekannt})" - elif [ "$PROXY_MODE" = "dev" ]; then - line "Proxy" "Entwicklungsmodus" - else - line "Proxy" "nein" - fi -fi - -# Services -printf "${WH}\nServices:${NC}\n" -printf " nginx … %b\n" "$(svc_state nginx)" -printf " mariadb … %b\n" "$(svc_state mariadb)" -printf " redis-server … %b\n" "$(svc_state redis-server)" -printf " postfix … %b\n" "$(svc_state postfix)" -printf " dovecot … %b\n" "$(svc_state dovecot)" -printf " mailwolt-ws … %b\n" "$(svc_state mailwolt-ws)" -printf " mailwolt-queue … %b\n" "$(svc_state mailwolt-queue)" -printf " mailwolt-schedule … %b\n" "$(svc_state mailwolt-schedule)" - -# Zertifikatskurzinfo (nur wenn vorhanden) -show_cert_exp(){ - local name="$1" path="$2" - if [ -r "$path" ]; then - local exp - exp="$(openssl x509 -in "$path" -noout -enddate 2>/dev/null | sed 's/notAfter=//')" - [ -n "$exp" ] && printf "${GY}%s cert:${NC} expires %s\n" "$name" "$exp" - fi -} -show_cert_exp "UI" "/etc/ssl/ui/fullchain.pem" -show_cert_exp "Webmail" "/etc/ssl/webmail/fullchain.pem" -show_cert_exp "MX" "/etc/ssl/mail/fullchain.pem" - -exit 0 +printf "${GY}FQDN :${NC} %s\n" "$fqdn" +if [ -n "$ip_ext" ]; then printf "${GY}IP :${NC} %s ${GY}(ext:${NC} %s${GY})${NC}\n" "${ip_int:-?}" "$ip_ext"; else printf "${GY}IP :${NC} %s\n" "${ip_int:-?}"; fi +printf "${GY}Uptime :${NC} %s\n" "${upt:-?}" +printf "${GY}Cores :${NC} %s\n" "$cores" +printf "${GY}Load :${NC} %s (1/5/15)\n" "${load:-?}" +printf "${GY}Svc :${NC} postfix: $(svc postfix) dovecot: $(svc dovecot) nginx: $(svc nginx) mariadb: $(svc mariadb) redis: $(svc redis)\n" SH -chmod 755 /usr/local/bin/mw-motd +chmod +x /usr/local/bin/mw-motd +if [[ -d /etc/update-motd.d ]]; then + cat >/etc/update-motd.d/10-mailwolt <<'SH' +#!/usr/bin/env bash +/usr/local/bin/mw-motd +SH + chmod +x /etc/update-motd.d/10-mailwolt + [[ -f /etc/update-motd.d/50-motd-news ]] && chmod -x /etc/update-motd.d/50-motd-news || true +else + cat >/etc/profile.d/10-mailwolt-motd.sh <<'SH' +case "$-" in *i*) /usr/local/bin/mw-motd ;; esac +SH +fi +: > /etc/motd 2>/dev/null || true -##!/usr/bin/env bash -#set -euo pipefail -#source ./lib.sh -# -#log "MOTD installieren …" -#install -d /usr/local/bin #cat >/usr/local/bin/mw-motd <<'SH' ##!/usr/bin/env bash -#set -euo pipefail -#NC="\033[0m"; CY="\033[1;36m"; GR="\033[1;32m"; YE="\033[1;33m"; RD="\033[1;31m"; GY="\033[0;90m" -#printf "\033[1;36m" +## bewusst KEIN "set -e"; MOTD soll nie hart abbrechen +#set -u +# +## Farben +#NC="\033[0m"; CY="\033[1;36m"; GR="\033[1;32m"; YE="\033[1;33m"; RD="\033[1;31m"; GY="\033[0;90m"; WH="\033[1;37m" +# +## Installer-Variablen (optional) +#UI_HOST=""; WEBMAIL_HOST=""; MAIL_HOSTNAME=""; LE_EMAIL=""; PROXY_MODE=""; NPM_IP="" +#[ -r /etc/mailwolt/installer.env ] && . /etc/mailwolt/installer.env || true +## Aus .env (falls vorhanden) +#if [ -r /var/www/mailwolt/.env ]; then +# LE_EMAIL="${LE_EMAIL:-$(grep -E '^LE_EMAIL=' /var/www/mailwolt/.env 2>/dev/null | sed 's/^LE_EMAIL=//')}" +# PROXY_MODE="${PROXY_MODE:-$(grep -E '^PROXY_MODE=' /var/www/mailwolt/.env 2>/dev/null | sed 's/^PROXY_MODE=//')}" +# NPM_IP="${NPM_IP:-$(grep -E '^NPM_IP=' /var/www/mailwolt/.env 2>/dev/null | sed 's/^NPM_IP=//')}" +#fi +# +## Header +#printf "${CY}" #cat <<'ASCII' #:::: :::: ::: ::::::::::: ::: ::: ::: :::::::: ::: ::::::::::: #+:+:+: :+:+:+ :+: :+: :+: :+: :+: :+: :+: :+: :+: :+: @@ -143,35 +80,97 @@ chmod 755 /usr/local/bin/mw-motd ##+# #+# #+# #+# #+# #+# #+#+# #+#+# #+# #+# #+# #+# #### ### ### ### ########### ########## ### ### ######## ########## ### #ASCII -#printf "\033[0m\n" -#now="$(date '+%Y-%m-%d %H:%M:%S %Z')" -#fqdn="$(hostname -f 2>/dev/null || hostname)" -#ip_int="$(hostname -I 2>/dev/null | awk '{print $1}')" -#ip_ext=""; command -v curl >/dev/null 2>&1 && ip_ext="$(curl -s --max-time 1 https://ifconfig.me || true)" -#upt="$(uptime -p 2>/dev/null || true)" -#cores="$(nproc 2>/dev/null || echo -n '?')" -#load="$(awk '{print $1" / "$2" / "$3}' /proc/loadavg 2>/dev/null)" -#svc(){ systemctl is-active --quiet "$1" && echo -e "${GR}OK${NC}" || echo -e "${RD}FAIL${NC}"; } -#printf "${CY}Information as of:${NC} ${YE}%s${NC}\n" "$now" -#printf "${GY}FQDN :${NC} %s\n" "$fqdn" -#if [ -n "$ip_ext" ]; then printf "${GY}IP :${NC} %s ${GY}(ext:${NC} %s${GY})${NC}\n" "${ip_int:-?}" "$ip_ext"; else printf "${GY}IP :${NC} %s\n" "${ip_int:-?}"; fi -#printf "${GY}Uptime :${NC} %s\n" "${upt:-?}" -#printf "${GY}Cores :${NC} %s\n" "$cores" -#printf "${GY}Load :${NC} %s (1/5/15)\n" "${load:-?}" -#printf "${GY}Svc :${NC} postfix: $(svc postfix) dovecot: $(svc dovecot) nginx: $(svc nginx) mariadb: $(svc mariadb) redis: $(svc redis)\n" -#SH -#chmod +x /usr/local/bin/mw-motd +#printf "${NC}\n" # -#if [[ -d /etc/update-motd.d ]]; then -# cat >/etc/update-motd.d/10-mailwolt <<'SH' -##!/usr/bin/env bash -#/usr/local/bin/mw-motd -#SH -# chmod +x /etc/update-motd.d/10-mailwolt -# [[ -f /etc/update-motd.d/50-motd-news ]] && chmod -x /etc/update-motd.d/50-motd-news || true +## Safe-Helfer (niemals Script killen) +#grab() { eval "$1" 2>/dev/null || true; } +#line() { printf "${GY}%-7s:${NC} %s\n" "$1" "$2"; } +# +## Systemdaten +#now="$(date '+%Y-%m-%d %H:%M:%S %Z' 2>/dev/null || echo -n '-')" +#fqdn="$(hostname -f 2>/dev/null || hostname 2>/dev/null || echo -n '-')" +#ip_int="$(hostname -I 2>/dev/null | awk '{print $1}' 2>/dev/null || true)" +#ip_ext="$(curl -fsS --max-time 1 https://ifconfig.me 2>/dev/null || true)" +#upt="$(uptime -p 2>/dev/null || echo -n '-')" +#cores="$(nproc 2>/dev/null || echo -n '-')" +#load="$(awk '{print $1" / "$2" / "$3}' /proc/loadavg 2>/dev/null || echo -n '-')" +# +## RAM/SWAP (MiB) +#mem_total="$(awk '/MemTotal/ {print int($2/1024)}' /proc/meminfo 2>/dev/null || echo -n '-')" +#mem_avail="$(awk '/MemAvailable/ {print int($2/1024)}' /proc/meminfo 2>/dev/null || echo -n '0')" +#mem_used=$(( ${mem_total:-0}-${mem_avail:-0} )) +#swap_total="$(awk '/SwapTotal/ {print int($2/1024)}' /proc/meminfo 2>/dev/null || echo -n '-')" +#swap_free="$(awk '/SwapFree/ {print int($2/1024)}' /proc/meminfo 2>/dev/null || echo -n '0')" +#swap_used=$(( ${swap_total:-0}-${swap_free:-0} )) +# +## Disks +#disk_line(){ df -hP "$1" 2>/dev/null | awk 'NR==2{printf "%s/%s (%s used)", $3,$2,$5}'; } +#disk_root="$(disk_line /)" +#disk_var="$(disk_line /var)" +# +#svc_state(){ +# local unit="$1" +# if systemctl is-active --quiet "$unit"; then +# printf "${GR}OK${NC}" +# else +# printf "${RD}FAIL${NC}" +# fi +#} +# +## Ausgabe +#printf "${CY}Information as of:${NC} ${YE}%s${NC}\n" "$now" +#line "FQDN" "$fqdn" +#if [ -n "$ip_ext" ]; then +# printf "${GY}%-7s:${NC} %s ${GY}(ext:${NC} %s${GY})${NC}\n" "IP" "${ip_int:--}" "$ip_ext" #else -# cat >/etc/profile.d/10-mailwolt-motd.sh <<'SH' -#case "$-" in *i*) /usr/local/bin/mw-motd ;; esac -#SH +# line "IP" "${ip_int:--}" #fi -#: > /etc/motd 2>/dev/null || true \ No newline at end of file +#line "Uptime" "$upt" +#printf "${GY}%-7s:${NC} %s cores, load %s (1/5/15)\n" "CPU" "$cores" "$load" +#printf "${GY}%-7s:${NC} %s MiB used / %s MiB total\n" "RAM" "$mem_used" "$mem_total" +#printf "${GY}%-7s:${NC} %s MiB used / %s MiB total\n" "SWAP" "$swap_used" "$swap_total" +#line "Disk /" "${disk_root:-'-'}" +#line "Disk/var" "${disk_var:-'-'}" +# +## App/Installer Infos +#[ -n "${LE_EMAIL:-}" ] && line "LE Mail" "$LE_EMAIL" +#[ -n "${UI_HOST:-}" ] && line "UI" "$UI_HOST" +#[ -n "${WEBMAIL_HOST:-}" ] && line "Webmail" "$WEBMAIL_HOST" +#[ -n "${MAIL_HOSTNAME:-}" ]&& line "MX" "$MAIL_HOSTNAME" +#if [ -n "${PROXY_MODE:-}" ]; then +# if [ "$PROXY_MODE" = "1" ]; then +# line "Proxy" "ja (NPM: ${NPM_IP:-unbekannt})" +# elif [ "$PROXY_MODE" = "dev" ]; then +# line "Proxy" "Entwicklungsmodus" +# else +# line "Proxy" "nein" +# fi +#fi +# +## Services +#printf "${WH}\nServices:${NC}\n" +#printf " nginx … %b\n" "$(svc_state nginx)" +#printf " mariadb … %b\n" "$(svc_state mariadb)" +#printf " redis-server … %b\n" "$(svc_state redis-server)" +#printf " postfix … %b\n" "$(svc_state postfix)" +#printf " dovecot … %b\n" "$(svc_state dovecot)" +#printf " mailwolt-ws … %b\n" "$(svc_state mailwolt-ws)" +#printf " mailwolt-queue … %b\n" "$(svc_state mailwolt-queue)" +#printf " mailwolt-schedule … %b\n" "$(svc_state mailwolt-schedule)" +# +## Zertifikatskurzinfo (nur wenn vorhanden) +#show_cert_exp(){ +# local name="$1" path="$2" +# if [ -r "$path" ]; then +# local exp +# exp="$(openssl x509 -in "$path" -noout -enddate 2>/dev/null | sed 's/notAfter=//')" +# [ -n "$exp" ] && printf "${GY}%s cert:${NC} expires %s\n" "$name" "$exp" +# fi +#} +#show_cert_exp "UI" "/etc/ssl/ui/fullchain.pem" +#show_cert_exp "Webmail" "/etc/ssl/webmail/fullchain.pem" +#show_cert_exp "MX" "/etc/ssl/mail/fullchain.pem" +# +#exit 0 +#SH +#chmod 755 /usr/local/bin/mw-motd \ No newline at end of file