summaryrefslogtreecommitdiff
path: root/mail/entrypoint.sh
blob: 9ba665581a1a9081b3d77f3629b8ebadcb682579 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/env bash
set -e

KEY_FILE=/etc/opendkim/keys/mail.private

# Wait for DKIM key (mounted read-only from host)
for i in $(seq 1 30); do
    [[ -f "$KEY_FILE" ]] && break
    echo "Waiting for DKIM key at $KEY_FILE ... (run mail/install.sh on host)"
    sleep 2
done
if [[ ! -f "$KEY_FILE" ]]; then
    echo "ERROR: DKIM key not found at $KEY_FILE" >&2
    exit 1
fi

# Docker の embedded DNS (127.0.0.11) は MX クエリを正しく処理できないことがあるため
# 外部 DNS に差し替える(sed -i は bind mount で失敗するため cat 経由で上書き)
grep -v 'nameserver 127.0.0.11' /etc/resolv.conf > /tmp/resolv.new
printf 'nameserver 8.8.8.8\nnameserver 1.1.1.1\n' >> /tmp/resolv.new
cat /tmp/resolv.new > /etc/resolv.conf

# Start rsyslog for Postfix logging
rsyslogd

# Start OpenDKIM (runs as root per opendkim.conf UserID)
opendkim -x /etc/opendkim.conf
sleep 2

# Postfix の smtp プロセスは chroot で動くため /var/spool/postfix/etc/ に
# resolv.conf 等を配置しないと DNS 名前解決ができない
mkdir -p /var/spool/postfix/etc
cat /etc/resolv.conf > /var/spool/postfix/etc/resolv.conf
cp -f /etc/hosts /var/spool/postfix/etc/hosts 2>/dev/null || true
cp -f /etc/services /var/spool/postfix/etc/services 2>/dev/null || true
cp -f /etc/nsswitch.conf /var/spool/postfix/etc/nsswitch.conf 2>/dev/null || true

# Start Postfix
postfix start

# Keep container alive, forward mail log to stdout
touch /var/log/mail.log
exec tail -f /var/log/mail.log