Skip to content

Commit 4ed369d

Browse files
committed
feat: add get-service-logs diagnostic script to container image
In-container tool at /usr/local/sbin/get-service-logs that dumps journal logs for all chatmail services, failed systemd units, effective dovecot config, and TLS cert paths. Accepts optional service name args to limit output.
1 parent 476728a commit 4ed369d

2 files changed

Lines changed: 43 additions & 0 deletions

File tree

chatmail_relay.dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ RUN rm -f /etc/nginx/sites-enabled/default
108108
COPY --chmod=555 ./docker/scripts/chatmail-init.sh /chatmail-init.sh
109109
COPY --chmod=555 ./docker/scripts/entrypoint.sh /entrypoint.sh
110110
COPY --chmod=555 ./docker/scripts/healthcheck.sh /healthcheck.sh
111+
COPY --chmod=555 ./docker/scripts/get_service_logs.sh /usr/local/sbin/get-service-logs
111112

112113
HEALTHCHECK --interval=10s --start-period=180s --timeout=10s --retries=3 \
113114
CMD /healthcheck.sh

scripts/get_service_logs.sh

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#!/bin/bash
2+
# Dump diagnostic info for chatmail services inside the container
3+
# Usage: get_service_logs [service...]
4+
5+
set -euo pipefail
6+
7+
core_services="dovecot postfix nginx filtermail filtermail-incoming opendkim unbound doveauth chatmail-metadata"
8+
optional_services="iroh-relay turnserver mtail"
9+
10+
if [ $# -gt 0 ]; then
11+
services="$*"
12+
else
13+
services="$core_services"
14+
for svc in $optional_services; do
15+
systemctl is-enabled "$svc" 2>/dev/null && services="$services $svc"
16+
done
17+
fi
18+
19+
for svc in $services; do
20+
echo "=== journalctl -u $svc ==="
21+
journalctl -u "$svc" --no-pager -n 50 2>&1 || true
22+
echo
23+
done
24+
25+
echo "=== failed units ==="
26+
systemctl --failed --no-pager 2>&1 || true
27+
echo
28+
29+
echo "=== dovecot -n (effective config) ==="
30+
dovecot -n 2>&1 | tail -40 || true
31+
echo
32+
33+
echo "=== TLS certificates ==="
34+
ini="${CHATMAIL_INI:-/etc/chatmail/chatmail.ini}"
35+
if ext=$(grep '^tls_external_cert_and_key' "$ini" 2>/dev/null); then
36+
echo "$ext" | awk -F= '{print $2}' | xargs -n1 ls -la 2>&1 || true
37+
elif [ -f /var/lib/acme/live/*/fullchain ] 2>/dev/null; then
38+
ls -la /var/lib/acme/live/*/fullchain /var/lib/acme/live/*/privkey 2>&1 || true
39+
else
40+
# self-signed fallback
41+
ls -la /etc/ssl/certs/mailserver.pem /etc/ssl/private/mailserver.key 2>&1 || true
42+
fi

0 commit comments

Comments
 (0)