Add how-to guide for restarting indri #108

Merged
eblume merged 1 commit from docs/restart-indri-howto into main 2026-02-04 14:39:49 -08:00
6 changed files with 187 additions and 3 deletions
Showing only changes of commit 05edafe0ed - Show all commits

Add how-to guide for restarting indri

Document the safe shutdown and startup procedure for indri,
including minikube, native services, and GUI applications that
require manual restart.

Also adds AutoMounter reference card documenting the macOS app
used to mount sifaka SMB shares.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Erich Blume 2026-02-04 14:38:05 -08:00

View file

@ -0,0 +1 @@
Add how-to guide for safely restarting indri, plus AutoMounter reference card.

View file

@ -38,4 +38,5 @@ Task-oriented instructions for common BlumeOps operations. These guides assume y
| Guide | Description |
|-------|-------------|
| [[restart-indri]] | Safely shut down and restart indri |
| [[troubleshooting]] | Diagnose and fix common issues |

View file

@ -0,0 +1,135 @@
---
title: restart-indri
tags:
- how-to
- operations
---
# Restart Indri
How to safely shut down and restart [[indri]], the primary BlumeOps server.
## Prerequisites
- SSH access to indri
- Tailscale connected
## Shutdown Procedure
### 1. Stop Kubernetes Gracefully
Minikube runs on the Docker driver, so stopping it cleanly ensures pods terminate gracefully and persistent volumes are properly unmounted.
```bash
ssh indri 'minikube stop'
```
This may take a minute as pods receive termination signals. You can verify it stopped:
```bash
ssh indri 'minikube status'
```
### 2. Stop Native Services (Optional)
Native services managed by launchd will stop automatically during macOS shutdown. However, if you want to stop them explicitly first:
```bash
# Forgejo (managed by brew services)
ssh indri 'brew services stop forgejo'
# LaunchAgent services
ssh indri 'launchctl unload ~/Library/LaunchAgents/mcquack.eblume.zot.plist'
ssh indri 'launchctl unload ~/Library/LaunchAgents/mcquack.eblume.alloy.plist'
ssh indri 'launchctl unload ~/Library/LaunchAgents/mcquack.eblume.borgmatic.plist'
```
### 3. Quit GUI Applications
These apps don't autostart and should be quit cleanly before reboot:
- **Docker Desktop** - Quit from menubar or: `ssh indri 'osascript -e "quit app \"Docker\""'`
- **Amphetamine** - Quit from menubar (prevents sleep; will need restart)
- **AutoMounter** - Quit from menubar (mounts sifaka SMB shares)
### 4. Reboot
```bash
ssh indri 'sudo shutdown -r now'
```
Or if you're at the console, use the Apple menu.
## Startup Procedure
After indri boots, several things need manual attention.
### 1. Start GUI Applications
These must be started manually after reboot. Log in to indri (via Screen Sharing or physically) and launch:
| App | Purpose | Launch Method |
|-----|---------|---------------|
| **Docker Desktop** | Container runtime for minikube | Spotlight or `/Applications/Docker.app` |
| **Amphetamine** | Prevents sleep | Spotlight or App Store apps |
| **AutoMounter** | Mounts sifaka SMB shares to `/Volumes/` | Spotlight or App Store apps |
Wait for Docker Desktop to fully start (whale icon in menubar stops animating).
### 2. Verify Sifaka Mounts
AutoMounter should automatically mount the sifaka shares. Verify:
```bash
ssh indri 'ls /Volumes/'
```
You should see: `allisonflix`, `backups`, `music`, `photos`, `torrents` (or similar).
If mounts are missing, open AutoMounter and trigger a reconnect.
### 3. Start Minikube
```bash
ssh indri 'minikube start'
```
This starts the Kubernetes cluster inside Docker. It may take a few minutes as all pods come up.
Monitor pod startup:
```bash
kubectl --context=minikube-indri get pods -A -w
```
### 4. Verify Native Services
LaunchAgent services should start automatically. Check them:
```bash
ssh indri 'launchctl list | grep mcquack'
ssh indri 'brew services list | grep forgejo'
```
If any are missing, Ansible can restore them:
```bash
mise run provision-indri
```
### 5. Run Health Check
Once everything is up, verify all services:
```bash
mise run services-check
```
All checks should pass. If any fail, see [[troubleshooting]].
## Related
- [[indri]] - Server specifications
- [[troubleshooting]] - Diagnose issues
- [[cluster]] - Kubernetes details
- [[sifaka]] - NAS storage

View file

@ -34,6 +34,7 @@ Individual service reference cards with URLs and configuration details.
| [[zot]] | Container registry | indri |
| [[devpi]] | PyPI caching proxy | k8s |
| [[docs]] | Documentation site (Quartz) | k8s |
| [[automounter]] | SMB share automounter | indri |
## Infrastructure

View file

@ -27,11 +27,16 @@ Primary BlumeOps server. Mac Mini M1 (2020).
- [[jellyfin]] - Media server
- [[borgmatic]] - Backup system
- [[alloy | Alloy]] - Metrics/logs collector
- Caddy - Reverse proxy for `*.ops.eblu.me`
- [[caddy]] - Reverse proxy for `*.ops.eblu.me`
**Kubernetes (via minikube):**
- [[apps | All k8s applications]]
**GUI Applications (manual start required):**
- Docker Desktop - Container runtime for minikube
- Amphetamine - Prevents sleep
- [[automounter]] - Mounts [[sifaka]] SMB shares
## Maintenance Notes
**Sleep prevention:** Uses Amphetamine (App Store) to prevent sleep. If Amphetamine crashes after extended uptime, consider switching to `pmset` or `caffeinate` via ansible.
@ -40,5 +45,7 @@ Primary BlumeOps server. Mac Mini M1 (2020).
## Related
- [[routing | Routing]] - Port mappings
- [[cluster | Cluster]] - Minikube details
- [[routing]] - Port mappings
- [[cluster]] - Minikube details
- [[automounter]] - SMB share mounting
- [[restart-indri]] - Shutdown and startup procedure

View file

@ -0,0 +1,39 @@
---
title: automounter
tags:
- services
- macos
---
# AutoMounter
macOS app that automatically mounts [[sifaka]] SMB shares on [[indri]].
## Quick Reference
| Property | Value |
|----------|-------|
| **App** | [AutoMounter](https://www.pixeleyes.co.nz/automounter/) |
| **Source** | Mac App Store (paid) |
| **Autostart** | No (must launch manually after reboot) |
| **Purpose** | Mount sifaka SMB shares to `/Volumes/` |
## Mounted Shares
| Share | Mount Point | Consumers |
|-------|-------------|-----------|
| backups | `/Volumes/backups` | [[borgmatic]] |
| torrents | `/Volumes/torrents` | [[kiwix]], [[transmission]] |
| music | `/Volumes/music` | [[navidrome]] |
| allisonflix | `/Volumes/allisonflix` | [[jellyfin]] |
| photos | `/Volumes/photos` | [[immich]] |
## Why AutoMounter?
There are free alternatives for mounting network shares on macOS (autofs, automountd, login scripts). AutoMounter was chosen for convenience and has proven reliable. If it becomes problematic, the alternative would be configuring autofs via Ansible.
## Related
- [[indri]] - Host machine
- [[sifaka]] - NAS providing the shares
- [[restart-indri]] - Startup procedure