max / makenotwork
- Co-Authored-By
- Claude Opus 5 (1M context) <noreply@anthropic.com>
1 file changed,
+22 insertions,
-2 deletions
| @@ -68,10 +68,30 @@ | |||
| 68 | 68 | match, or the install is denied. | |
| 69 | 69 | ||
| 70 | 70 | mt also needs what it has always needed on the box, none of which Sando touches: | |
| 71 | - | the `multithreaded` postgres role and database, `/opt/multithreaded/.env`, and | |
| 72 | - | `multithreaded.service` installed and enabled (`deploy/multithreaded.service`). | |
| 71 | + | the `multithreaded` postgres role and database, `/opt/multithreaded/.env`, | |
| 72 | + | `multithreaded.service` installed and enabled (`deploy/multithreaded.service`), | |
| 73 | + | and a working OS trust store (see below). | |
| 73 | 74 | Sando installs the binary and restarts the unit; it does not create users, | |
| 74 | 75 | databases, env files, or units, and it will not rewrite a config that drifted. | |
| 75 | 76 | ||
| 77 | + | ### The OS trust store is a precondition | |
| 78 | + | ||
| 79 | + | mt ships no trust anchors of its own. Every outbound TLS connection it makes | |
| 80 | + | reads the host CA bundle, which on a Debian-family box means `/etc/ssl/certs` | |
| 81 | + | kept current by the `ca-certificates` package. Three paths depend on it: the | |
| 82 | + | OAuth token exchange with the MNW server (`src/auth.rs`), link previews | |
| 83 | + | (`src/link_preview.rs`), and S3 or MinIO media through `s3-storage`. `reqwest` | |
| 84 | + | reads the store through `rustls-platform-verifier` and the AWS client through | |
| 85 | + | `rustls-native-certs`; neither offers bundled roots as an option any more, so | |
| 86 | + | there is no in-binary fallback to fall back to. | |
| 87 | + | ||
| 88 | + | A host with a thin or stale bundle does not fail in a way that looks like a | |
| 89 | + | deploy problem. mt starts, `/api/health` passes because it only probes the | |
| 90 | + | database, and pages serve. The first outbound TLS request is a login attempt, | |
| 91 | + | because mt is an OAuth relying party, so the symptom is a login outage with a | |
| 92 | + | certificate error buried in the journal on a node that reports healthy. Check | |
| 93 | + | the bundle when provisioning a node, and keep `ca-certificates` on an update | |
| 94 | + | path rather than assuming it stays current. | |
| 95 | + | ||
| 76 | 96 | Rollback is the MNW server's rollback: the previous bundle still holds the | |
| 77 | 97 | previous mt binary. |