summaryrefslogtreecommitdiff
path: root/scripts/wol-f3s
blob: 849cb73a8abb9e1186b9b2dfffc2305e957d0638 (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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#!/bin/bash
# Wake-on-LAN and shutdown script for f3s cluster (f0, f1, f2)
# and optional shutdown for Raspberry Pi nodes (pi0–pi3)
#
# Usage:
#   wol-f3s              # Wake all three Beelinks
#   wol-f3s f0           # Wake only f0
#   wol-f3s f1           # Wake only f1
#   wol-f3s f2           # Wake only f2
#   wol-f3s shutdown     # Shutdown all three Beelinks
#   wol-f3s shutdown-pis # Shutdown all four Raspberry Pis
#   wol-f3s shutdown-all # Shutdown Beelinks and Pis

# MAC addresses
F0_MAC="e8:ff:1e:d7:1c:ac"  # f0 (192.168.1.130)
F1_MAC="e8:ff:1e:d7:1e:44"  # f1 (192.168.1.131)
F2_MAC="e8:ff:1e:d7:1c:a0"  # f2 (192.168.1.132)

# IP addresses
F0_IP="192.168.1.130"
F1_IP="192.168.1.131"
F2_IP="192.168.1.132"

# Raspberry Pi IP addresses (no WoL support, shutdown only)
PI0_IP="192.168.1.125"
PI1_IP="192.168.1.126"
PI2_IP="192.168.1.127"
PI3_IP="192.168.1.128"

# SSH user
SSH_USER="paul"

# Broadcast address for your LAN
BROADCAST="192.168.1.255"

wake() {
    local name=$1
    local mac=$2

    if [[ "$mac" == "XX:XX:XX:XX:XX:XX" ]]; then
        echo "⚠️  $name MAC address not configured yet"
        return 1
    fi

    echo "Sending WoL packet to $name ($mac)..."
    wol -i "$BROADCAST" "$mac"
}

shutdown_host() {
    local name=$1
    local ip=$2

    echo "Shutting down $name ($ip)..."
    ssh -o ConnectTimeout=5 "$SSH_USER@$ip" "doas poweroff" 2>/dev/null && \
        echo "  ✓ Shutdown command sent to $name" || \
        echo "  ✗ Failed to reach $name (already down?)"
}

ACTION="${1:-all}"

case "$ACTION" in
    f0)
        wake "f0" "$F0_MAC"
        ;;
    f1)
        wake "f1" "$F1_MAC"
        ;;
    f2)
        wake "f2" "$F2_MAC"
        ;;
    all|"")
        wake "f0" "$F0_MAC"
        wake "f1" "$F1_MAC"
        wake "f2" "$F2_MAC"
        ;;
    shutdown|poweroff|down)
        # This is to mute Gogios alerts for a day
        ssh rex@blowfish.buetow.org touch /tmp/f3s_taken_down
        ssh rex@fishfinger.buetow.org touch /tmp/f3s_taken_down
        shutdown_host "f0" "$F0_IP"
        shutdown_host "f1" "$F1_IP"
        shutdown_host "f2" "$F2_IP"
        echo ""
        echo "✓ Shutdown commands sent to all Beelinks."
        exit 0
        ;;
    shutdown-pis)
        shutdown_host "pi0" "$PI0_IP"
        shutdown_host "pi1" "$PI1_IP"
        shutdown_host "pi2" "$PI2_IP"
        shutdown_host "pi3" "$PI3_IP"
        echo ""
        echo "✓ Shutdown commands sent to all Pis."
        exit 0
        ;;
    shutdown-all)
        ssh rex@blowfish.buetow.org touch /tmp/f3s_taken_down
        ssh rex@fishfinger.buetow.org touch /tmp/f3s_taken_down
        shutdown_host "f0" "$F0_IP"
        shutdown_host "f1" "$F1_IP"
        shutdown_host "f2" "$F2_IP"
        shutdown_host "pi0" "$PI0_IP"
        shutdown_host "pi1" "$PI1_IP"
        shutdown_host "pi2" "$PI2_IP"
        shutdown_host "pi3" "$PI3_IP"
        echo ""
        echo "✓ Shutdown commands sent to all machines."
        exit 0
        ;;
    *)
        echo "Usage: $0 [f0|f1|f2|all|shutdown|shutdown-pis|shutdown-all]"
        exit 1
        ;;
esac

echo ""
echo "✓ WoL packets sent. Machines should boot in a few seconds."
echo "  Wait ~30 seconds, then try: ssh paul@192.168.1.130"