Restart Indri
How to safely shut down and restart indri, the primary BlumeOps server.
Historical note: until 2026-06 indri also hosted the minikube Kubernetes cluster, which dominated this procedure (graceful stop, random API ports, CNI conflicts). It was retired in retire-minikube — all Kubernetes now runs on ringtail.
Prerequisites
- SSH access to indri
- Tailscale connected
Shutdown Procedure
1. Stop Native Services (Optional)
Native services managed by launchd will stop automatically during macOS shutdown. However, if you want to stop them explicitly first:
# LaunchAgent services
ssh indri 'launchctl unload ~/Library/LaunchAgents/mcquack.eblume.forgejo.plist'
ssh indri 'launchctl unload ~/Library/LaunchAgents/mcquack.eblume.caddy.plist'
ssh indri 'launchctl unload ~/Library/LaunchAgents/mcquack.eblume.zot.plist'
ssh indri 'launchctl unload ~/Library/LaunchAgents/mcquack.eblume.devpi.plist' # see [[devpi-on-indri]]
ssh indri 'launchctl unload ~/Library/LaunchAgents/mcquack.jellyfin.plist'
ssh indri 'launchctl unload ~/Library/LaunchAgents/mcquack.eblume.alloy.plist'
ssh indri 'launchctl unload ~/Library/LaunchAgents/mcquack.eblume.borgmatic.plist'
ssh indri 'launchctl unload ~/Library/LaunchAgents/mcquack.eblume.forgejo-runner.plist'2. Quit GUI Applications
These apps don’t autostart and should be quit cleanly before reboot:
- Amphetamine - Quit from menubar (prevents sleep; will need restart)
3. Reboot
ssh indri 'sudo shutdown -r now'Or if you’re at the console, use the Apple menu.
Startup Procedure
After indri boots, most services recover automatically.
What autostarts: all mcquack LaunchAgent services (Forgejo, Caddy, Zot, Jellyfin, Alloy, Borgmatic, forgejo-runner, metrics collectors).
What needs manual action: Amphetamine. (The sifaka shares are mounted automatically by the mcquack.eblume.sifaka-mounter LaunchAgent.)
0. Dismiss macOS Permission Dialogs
After a cold boot, the first inbound Tailscale SSH connection to indri triggers a macOS GUI permission dialog from tailscaled. This blocks the SSH session (and anything downstream like ansible) until dismissed at the console. You must be logged in to indri (via Screen Sharing or physically) to approve it before running any remote commands.
1. Log In and Start GUI Apps
Log in to indri (via Screen Sharing or physically) and launch:
| App | Purpose | Launch Method |
|---|---|---|
| Amphetamine | Prevents sleep | Spotlight or App Store apps |
2. Verify Sifaka Mounts
The mcquack.eblume.sifaka-mounter LaunchAgent mounts the sifaka shares within a minute of login, no manual step. Verify:
ssh indri 'ls /Volumes/'You should see: allisonflix, backups, music, photos, shower.
If a mount is missing, check /opt/homebrew/var/log/mcquack.sifaka-mounter.err.log and the sifaka_share_mounted metric (sifaka-mounter) instead of launching anything by hand.
3. Run Health Check
Once everything is up, verify all services:
mise run services-checkAll checks should pass. If any fail, see troubleshooting.
Related
- indri - Server specifications
- troubleshooting - Diagnose issues
- cluster - Kubernetes details (ringtail k3s)
- sifaka - NAS storage