Fail closed when Hermes local config is unreadable

This commit is contained in:
Mikei386
2026-08-24 17:15:15 +02:00
parent 348ca1324e
commit 8ef079d40e
5 changed files with 28 additions and 1 deletions
+2 -1
View File
@@ -788,12 +788,13 @@ services:
image: ${HERMES_IMAGE:-nousresearch/hermes-agent@sha256:143bdb9086bb2db645346179f11091e621ef6b7f4f9e5049ae7454bfeb3a0495} image: ${HERMES_IMAGE:-nousresearch/hermes-agent@sha256:143bdb9086bb2db645346179f11091e621ef6b7f4f9e5049ae7454bfeb3a0495}
container_name: mike-ai-hermes container_name: mike-ai-hermes
restart: unless-stopped restart: unless-stopped
command: [gateway, run] command: [/usr/local/bin/start-hermes-managed]
env_file: env_file:
- /data/hermes/.env - /data/hermes/.env
volumes: volumes:
- /data/hermes:/opt/data - /data/hermes:/opt/data
- /data/hermes/workspace:/workspace - /data/hermes/workspace:/workspace
- ./platform/hermes/start-hermes-managed.sh:/usr/local/bin/start-hermes-managed:ro
environment: environment:
HERMES_HOME: /opt/data HERMES_HOME: /opt/data
dns: ["${AI_DNS:-1.1.1.1}"] dns: ["${AI_DNS:-1.1.1.1}"]
+2
View File
@@ -96,6 +96,8 @@ Der Router übernimmt:
Assistant, ARR, Navidrome und ein gemeinsamer MUA-Unraid-Zugang Assistant, ARR, Navidrome und ein gemeinsamer MUA-Unraid-Zugang
- kein Docker-Socket, kein Host-Root-Mount und keine Veröffentlichung auf der - kein Docker-Socket, kein Host-Root-Mount und keine Veröffentlichung auf der
Universitätsadresse Universitätsadresse
- Start verweigert, wenn die verwaltete Konfiguration nicht lesbar ist oder
nicht ausdrücklich `custom` und den lokalen Router als Provider nennt
## Vision ## Vision
+4
View File
@@ -90,6 +90,10 @@ Der Schlüssel der Agent-API liegt entsprechend unter
`/etc/mike-ai/hermes-api-key`. Beide Werte gehören weder in Git noch in Chats. `/etc/mike-ai/hermes-api-key`. Beide Werte gehören weder in Git noch in Chats.
Hermes' lokales Terminal sieht nur `/data/hermes/workspace` im Container. Für Hermes' lokales Terminal sieht nur `/data/hermes/workspace` im Container. Für
Athena und Unraid verwendet es die dokumentierten Operator-/MUA-MCPs. Athena und Unraid verwendet es die dokumentierten Operator-/MUA-MCPs.
Ein Startwächter beendet den Container absichtlich, falls diese verwaltete
Konfiguration nicht lesbar ist oder auf einen anderen Provider als den lokalen
Router zeigt. Dadurch darf ein Rechtefehler nicht auf Hermes' Cloud-Standard
zurückfallen.
Der SSH-Fallback lauscht ausschließlich auf der IPv4-Adresse von `wg0` im Der SSH-Fallback lauscht ausschließlich auf der IPv4-Adresse von `wg0` im
WireGuard-Gateway-Container. Er wird nicht als Docker-Port auf dem WireGuard-Gateway-Container. Er wird nicht als Docker-Port auf dem
+1
View File
@@ -55,4 +55,5 @@ if [[ -s $HERMES_DATA_DIR/config.yaml ]] && \
"$HERMES_DATA_DIR/config.yaml.before-managed-update-$(date +%Y%m%d-%H%M%S)" "$HERMES_DATA_DIR/config.yaml.before-managed-update-$(date +%Y%m%d-%H%M%S)"
fi fi
install -m 0600 "$STACK_DIR/platform/hermes/config.yaml" "$HERMES_DATA_DIR/config.yaml" install -m 0600 "$STACK_DIR/platform/hermes/config.yaml" "$HERMES_DATA_DIR/config.yaml"
chown -R 10000:10000 "$HERMES_DATA_DIR"
printf 'HERMES_CONFIG_OK %s\n' "$HERMES_DATA_DIR" printf 'HERMES_CONFIG_OK %s\n' "$HERMES_DATA_DIR"
+19
View File
@@ -0,0 +1,19 @@
#!/usr/bin/env sh
set -eu
config=/opt/data/config.yaml
if [ ! -r "$config" ]; then
echo "HERMES_START_REFUSED: managed config is not readable" >&2
exit 78
fi
grep -Eq '^[[:space:]]+provider:[[:space:]]+["'\'']?custom["'\'']?[[:space:]]*$' "$config" || {
echo "HERMES_START_REFUSED: provider is not custom" >&2
exit 78
}
grep -Eq '^[[:space:]]+base_url:[[:space:]]+["'\'']?http://router:8081/v1["'\'']?[[:space:]]*$' "$config" || {
echo "HERMES_START_REFUSED: local router URL is missing" >&2
exit 78
}
exec hermes gateway run