69 lines
No EOL
3.1 KiB
Markdown
69 lines
No EOL
3.1 KiB
Markdown
# netcup-standby-guard (Mac LaunchDaemon)
|
|
|
|
Zet de wuzapi-multiplexer op **netcup** automatisch op `STANDBY` zodra netcup weer
|
|
bereikbaar is, maar **alleen** als nextcloud actief is. Voorkomt dubbel-antwoorden in de
|
|
WhatsApp-groepen wanneer netcup terugkomt terwijl nextcloud (na handmatige flip) de
|
|
actieve node is.
|
|
|
|
## Waarom / invariant
|
|
|
|
- De multiplexer is de standby-guard (`src/multiplexer.js`): node zonder `STANDBY`
|
|
routeert webhooks door, node met `STANDBY=1` ACKt alleen (200).
|
|
- Bij een netcup-uitval kan de netcup-unit niet op STANDBY gezet worden → na de
|
|
handmatige flip van nextcloud naar ACTIEF zijn beide nodes bij netcup-comeback actief.
|
|
Deze guard flipt netcup dan binnen één poll-interval (60 s) naar STANDBY.
|
|
- **Invariant:** netcup wordt alleen naar STANDBY geflipt als nextcloud bevestigd ACTIEF
|
|
is (geen `STANDBY=1` in de nextcloud-unit). Staat nextcloud op STANDBY, dan is
|
|
netcup-actief een bewuste failover (nextcloud-onderhoud) → geen flip.
|
|
|
|
## Installatie (Mac)
|
|
|
|
```bash
|
|
sudo -A cp deploy/netcup-standby-guard.sh /usr/local/bin/netcup-standby-guard.sh
|
|
sudo -A chmod 755 /usr/local/bin/netcup-standby-guard.sh
|
|
sudo -A cp deploy/nl.eddydevink.netcup-standby-guard.plist /Library/LaunchDaemons/
|
|
sudo -A launchctl bootstrap system /Library/LaunchDaemons/nl.eddydevink.netcup-standby-guard.plist
|
|
sudo -A launchctl kickstart -k system/nl.eddydevink.netcup-standby-guard # eerste run direct
|
|
```
|
|
|
|
- Draait als `eddy` (UserName in plist) → gebruikt de aliassen uit `~/.ssh/config`
|
|
(`netcup` met key `~/.ssh/netcup_agent_ed25519` zonder passphrase, en `nextcloud`).
|
|
- Notificatie via Gotify: token in `~/.netcup-guard.env` (`GOTIFY_TOKEN=...`, mode 600,
|
|
gitignored). Ontbreekt het bestand → alleen loggen.
|
|
- Log: `~/Library/Logs/netcup-standby-guard.log`; status: `~/.netcup-guard-state`.
|
|
|
|
## Uitschakelen zónder verwijderen (beschikbaar houden)
|
|
|
|
Daemon stoppen en uitschakelen; bestanden blijven op hun plek. Her-inzetten duurt ~30 s.
|
|
|
|
```bash
|
|
sudo -A launchctl bootout system/nl.eddydevink.netcup-standby-guard 2>/dev/null
|
|
sudo -A mv /Library/LaunchDaemons/nl.eddydevink.netcup-standby-guard.plist \
|
|
/Library/LaunchDaemons/nl.eddydevink.netcup-standby-guard.plist.disabled
|
|
```
|
|
|
|
Her-inzetten (op aanwijzing van de admin):
|
|
|
|
```bash
|
|
sudo -A mv /Library/LaunchDaemons/nl.eddydevink.netcup-standby-guard.plist.disabled \
|
|
/Library/LaunchDaemons/nl.eddydevink.netcup-standby-guard.plist
|
|
sudo -A launchctl bootstrap system /Library/LaunchDaemons/nl.eddydevink.netcup-standby-guard.plist
|
|
sudo -A launchctl kickstart -k system/nl.eddydevink.netcup-standby-guard # directe test-run
|
|
```
|
|
|
|
Status: 2026-10-19 uitgezet per user-besluit (steady state = nextcloud ACTIEF / netcup
|
|
STANDBY; de guard is alleen van nut na een onverwachte uitval van één node — zie boven).
|
|
|
|
## Handmatige test
|
|
|
|
```bash
|
|
/usr/local/bin/netcup-standby-guard.sh # run als eddy
|
|
tail -5 ~/Library/Logs/netcup-standby-guard.log
|
|
```
|
|
|
|
## Opruimen
|
|
|
|
```bash
|
|
sudo -A launchctl bootout system/nl.eddydevink.netcup-standby-guard
|
|
sudo -A rm /Library/LaunchDaemons/nl.eddydevink.netcup-standby-guard.plist /usr/local/bin/netcup-standby-guard.sh
|
|
``` |