#!/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 # MOTD – MailWolt # bewusst KEIN "set -e" und KEIN pipefail; MOTD darf nie hart abbrechen set -u # ---------- Farben ---------- NC="\033[0m"; WH="\033[1;37m"; CY="\033[1;36m"; GY="\033[0;90m" GR="\033[1;32m"; YE="\033[1;33m"; RD="\033[1;31m" # ---------- Breite / Zentrierung ---------- W=110 term_cols=$(tput cols 2>/dev/null || echo $W) [ "$term_cols" -gt "$W" ] && pad=$(( (term_cols - W)/2 )) || pad=0 sp(){ [ "$1" -gt 0 ] && printf "%${1}s" " " || true; } center() { local s="$1"; local n=$(( (W - ${#s})/2 )); sp $((pad+n)); printf "%s\n" "$s"; } rule(){ sp "$pad"; printf "%0.s=" $(seq 1 "$W"); printf "\n"; } title(){ sp "$pad"; local t="$1"; local lf=$(( (W - ${#t} - 2)/2 )); local rf=$(( W - ${#t} - 2 - lf )); \ printf "%s" "$(printf '─%.0s' $(seq 1 $lf))"; printf " %s " "$t"; printf "%s\n" "$(printf '─%.0s' $(seq 1 $rf))"; } kv(){ sp "$pad"; printf "%-12s: %s\n" "$1" "$2"; } # ---------- Installer-/App-Variablen ---------- UI_HOST=""; WEBMAIL_HOST=""; MAIL_HOSTNAME="" [ -r /etc/mailwolt/installer.env ] && . /etc/mailwolt/installer.env || true # ---------- Systemdaten ---------- now="$(date '+%Y-%m-%d %H:%M:%S %Z' 2>/dev/null || echo '-')" upt="$(uptime -p 2>/dev/null || echo '-')" cores="$(nproc 2>/dev/null || echo 1)" load_raw="$(awk '{printf "%s / %s / %s",$1,$2,$3}' /proc/loadavg 2>/dev/null || echo '0.00 / 0.00 / 0.00')" load1="$(awk '{print $1}' /proc/loadavg 2>/dev/null || echo 0)" # RAM/SWAP mem_total="$(awk '/MemTotal/ {print int($2/1024)}' /proc/meminfo 2>/dev/null || echo 0)" mem_avail="$(awk '/MemAvailable/ {print int($2/1024)}' /proc/meminfo 2>/dev/null || echo 0)" mem_used=$(( mem_total - mem_avail )) swap_total="$(awk '/SwapTotal/ {print int($2/1024)}' /proc/meminfo 2>/dev/null || echo 0)" swap_free="$(awk '/SwapFree/ {print int($2/1024)}' /proc/meminfo 2>/dev/null || echo 0)" swap_used=$(( swap_total - swap_free )) pct(){ local u="$1" t="$2"; [ "$t" -gt 0 ] || { echo 0; return; }; awk -v u="$u" -v t="$t" 'BEGIN{printf "%d",(u*100)/t}' ; } ram_pct=$(pct "$mem_used" "$mem_total") swap_pct=$(pct "$swap_used" "$swap_total") # Disks df_line(){ df -hP "$1" 2>/dev/null | awk 'NR==2{printf "%s / %s (%s)",$3,$2,$5}'; } df_pct(){ df -P "$1" 2>/dev/null | awk 'NR==2{gsub("%","",$5);print $5+0}'; } disk_root="$(df_line /)"; pct_root="$(df_pct /)" disk_var="$(df_line /var 2>/dev/null)"; [ -n "$disk_var" ] || disk_var="-" pct_var="$(df_pct /var 2>/dev/null)"; [ -n "$pct_var" ] || pct_var=0 # IPs (int/ext) ipv4_int="$(hostname -I 2>/dev/null | awk '{for(i=1;i<=NF;i++) if($i!~/:/){print $i;exit}}')" ipv6_int="$(hostname -I 2>/dev/null | awk '{for(i=1;i<=NF;i++) if($i~/:/){print $i;exit}}')" ipv4_ext="$(curl -4fsS --max-time 1 https://ifconfig.me 2>/dev/null || true)" ipv6_ext="$(curl -6fsS --max-time 1 https://ifconfig.me 2>/dev/null || true)" # ---------- Status-Farben ---------- mark(){ # value thresholdY thresholdR local v="$1" y="$2" r="$3" if [ "$v" -ge "$r" ]; then printf "${RD}[HIGH]${NC}" elif [ "$v" -ge "$y" ]; then printf "${YE}[WARN]${NC}" else printf "${GR}[OK]${NC}" fi } # Load/CPU-Schwellen (pro Core) load_pct=$(awk -v l="$load1" -v c="$cores" 'BEGIN{if(c<1)c=1; printf "%d", (l/c)*100}') m_load="$(mark "$load_pct" 70 100)" m_ram="$(mark "$ram_pct" 75 90)" m_swap="$(mark "$swap_pct" 10 50)" m_root="$(mark "$pct_root" 75 90)" m_var="$(mark "$pct_var" 75 90)" # ---------- Header ---------- rule center "" center ":::: :::: ::: ::::::::::: ::: ::: ::: :::::::: ::: :::::::::::" center ":+:+:+ :+:+:+ :+: :+: :+: :+: :+: :+: :+: :+: :+: :+: " center ":+: +:+:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ " center "+#+ +:+ +#+ +#++:++#++: +#+ +#+ +#+ +:+ +#+ +#+ +:+ +#+ +#+ " center "+#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+#+ +#+ +#+ +#+ +#+ +#+ " center "#+# #+# #+# #+# #+# #+# #+#+# #+#+# #+# #+# #+# #+# " center "### ### ### ### ########### ########## ### ### ######## ########## ### " center "" rule # ---------- System ---------- kv "Date / Time" "${YE}${now}${NC}" sp "$pad"; printf "%-12s: int %-40s ext %s\n" "IPv4" "${ipv4_int:--}" "${ipv4_ext:--}" sp "$pad"; printf "%-12s: int %-40s ext %s\n" "IPv6" "${ipv6_int:--}" "${ipv6_ext:--}" kv "Uptime" "$upt" sp "$pad"; printf "%-12s: %s cores, load %s %b\n" "CPU" "$cores" "$load_raw" "$m_load" sp "$pad"; printf "%-12s: %s MiB / %s MiB (%d%%) %b %-5s %s MiB / %s MiB (%d%%) %b\n" \ "RAM" "$mem_used" "$mem_total" "$ram_pct" "$m_ram" "SWAP:" "$swap_used" "$swap_total" "$swap_pct" "$m_swap" sp "$pad"; printf "%-12s: / %s %b %-5s %s %b\n" \ "Disk" "$disk_root" "$m_root" "/var:" "$disk_var" "$m_var" echo # ---------- Domains ---------- title "Domains" [ -n "${UI_HOST:-}" ] && kv "UI" "${UI_HOST}" [ -n "${WEBMAIL_HOST:-}" ] && kv "Webmail" "${WEBMAIL_HOST}" [ -n "${MAIL_HOSTNAME:-}" ]&& kv "MX" "${MAIL_HOSTNAME}" echo # ---------- Services (4 Spalten, bündig) ---------- title "Services" svc_state(){ systemctl is-active --quiet "$1" && printf "${GR}[OK]${NC}" || printf "${RD}[FAIL]${NC}"; } SVC=( nginx mariadb redis-server postfix dovecot rspamd opendkim opendmarc clamav-daemon fail2ban mailwolt-ws mailwolt-queue mailwolt-schedule ) i=0; line="" for s in "${SVC[@]}"; do st="$(svc_state "$s")" seg="$(printf "%-18s %-7s" "$s" "$st")" line="$line$seg" i=$((i+1)) if [ $((i%4)) -eq 0 ]; then sp "$pad"; echo "$line"; line=""; else line="$line "; fi done [ -n "$line" ] && { sp "$pad"; echo "$line"; } echo exit 0 SH chmod 755 /usr/local/bin/mw-motd # update-motd Hook 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 # Fallback für Systeme ohne dynamic MOTD 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 log "[✓] MOTD installiert." ##!/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}" #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 "${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 #SH #chmod 755 /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 # # # ##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" ##cat <<'ASCII' ##:::: :::: ::: ::::::::::: ::: ::: ::: :::::::: ::: ::::::::::: ##+:+:+: :+:+:+ :+: :+: :+: :+: :+: :+: :+: :+: :+: :+: ##+:+ +:+:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ ##+#+ +:+ +#+ +#++:++#++: +#+ +#+ +#+ +:+ +#+ +#+ +:+ +#+ +#+ ##+#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+#+ +#+ +#+ +#+ +#+ +#+ ###+# #+# #+# #+# #+# #+# #+#+# #+#+# #+# #+# #+# #+# ##### ### ### ### ########### ########## ### ### ######## ########## ### ##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 # ##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}" ##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 "${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 ##SH ##chmod 755 /usr/local/bin/mw-motd