summaryrefslogtreecommitdiff
path: root/scripts/wol-f3s
blob: c9563aaac2fe2b4b8abc220071ba2cdfeb8d32f8 (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
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/bin/bash
# Wake-on-LAN and shutdown script for f3s hosts (f0, f1, f2, f3)
# and optional shutdown for Raspberry Pi nodes (pi0–pi3)
#
# Usage:
#   wol-f3s              # Wake f0, f1, and f2
#   wol-f3s f0           # Wake only f0
#   wol-f3s f1           # Wake only f1
#   wol-f3s f2           # Wake only f2
#   wol-f3s f3           # Wake only f3
#   wol-f3s shutdown     # Shutdown f0, f1, and f2
#   wol-f3s shutdown-f3  # Shutdown only f3
#   wol-f3s shutdown-pis # Shutdown all four Raspberry Pis
#   wol-f3s shutdown-all # Shutdown f0, f1, f2, 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)
F3_MAC="e8:ff:1e:d7:f3:d7"  # f3 (192.168.1.133)

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

# 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"
        ;;
    f3)
        wake "f3" "$F3_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-f3|poweroff-f3|down-f3)
        shutdown_host "f3" "$F3_IP"
        echo ""
        echo "✓ Shutdown command sent to f3."
        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|f3|all|shutdown|shutdown-f3|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"