summaryrefslogtreecommitdiff
path: root/mail/install.sh
blob: 8f57c7d301f682e6df17b42664061d22ab08ad52 (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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/env bash
# サーバー上で root として手動実行する
# domains.txt からドメインを読み取り、DKIM 鍵生成と OpenDKIM テーブルを生成して
# コンテナを起動する。ドメインを追加・削除するたびに再実行する。
set -euo pipefail

MAIL_DIR="$(cd "$(dirname "$0")" && pwd)"
DOMAINS_FILE="$MAIL_DIR/domains.txt"
OPENDKIM_DIR=/etc/opendkim
KEY_DIR="$OPENDKIM_DIR/keys"
SELECTOR=mail
PRIMARY=hetzner.yyamashita.com

if [[ "$(id -u)" -ne 0 ]]; then
    echo "ERROR: root として実行してください" >&2
    exit 1
fi

# domains.txt から有効なドメインを読み込む
mapfile -t SERVICE_DOMAINS < <(grep -vE '^\s*(#|$)' "$DOMAINS_FILE")

echo "=== 対象ドメイン ==="
for d in "${SERVICE_DOMAINS[@]}"; do echo "  $d"; done
echo "  $PRIMARY (プライマリ)"

# DKIM 鍵生成(初回のみ)
echo ""
echo "=== DKIM 鍵 ==="
mkdir -p "$KEY_DIR"
chmod 700 "$KEY_DIR"

if [[ -f "$KEY_DIR/${SELECTOR}.private" ]]; then
    echo "  既存の鍵を使用: $KEY_DIR/${SELECTOR}.private"
else
    echo "  opendkim-tools をインストール..."
    DEBIAN_FRONTEND=noninteractive apt-get install -y -qq opendkim-tools
    echo "  2048bit RSA 鍵を生成中..."
    cd "$KEY_DIR"
    opendkim-genkey -b 2048 -s "$SELECTOR" -d yyamashita.com
    chmod 600 "$KEY_DIR/${SELECTOR}.private"
    echo "  生成完了"
fi

# OpenDKIM テーブル生成
echo ""
echo "=== OpenDKIM テーブル生成 ==="

{
    for d in "${SERVICE_DOMAINS[@]}"; do
        echo "${SELECTOR}._domainkey.${d}    ${d}:${SELECTOR}:${KEY_DIR}/${SELECTOR}.private"
    done
    echo "${SELECTOR}._domainkey.${PRIMARY}    ${PRIMARY}:${SELECTOR}:${KEY_DIR}/${SELECTOR}.private"
} > "$OPENDKIM_DIR/KeyTable"
echo "  KeyTable    : $OPENDKIM_DIR/KeyTable"

{
    for d in "${SERVICE_DOMAINS[@]}"; do
        echo "*@${d}    ${SELECTOR}._domainkey.${d}"
    done
    echo "*@${PRIMARY}    ${SELECTOR}._domainkey.${PRIMARY}"
} > "$OPENDKIM_DIR/SigningTable"
echo "  SigningTable: $OPENDKIM_DIR/SigningTable"

cat > "$OPENDKIM_DIR/TrustedHosts" << 'EOF'
127.0.0.1
::1
172.16.0.0/12
10.0.0.0/8
EOF
echo "  TrustedHosts: $OPENDKIM_DIR/TrustedHosts"

# コンテナ起動
echo ""
echo "=== コンテナ起動 ==="
bash "$MAIL_DIR/deploy.sh"

# 公開鍵を表示
echo ""
echo "=== DKIM 公開鍵 (Route 53 各ドメインに設定) ==="
echo "セレクター: ${SELECTOR}._domainkey.<ドメイン>"
echo "---"
cat "$KEY_DIR/${SELECTOR}.txt"
echo "---"
echo ""
echo "Done."
echo "次: python3 $MAIL_DIR/dns/setup-route53.py"