Compare commits
6 Commits
cd3c5b5eed
...
9e5392fa4f
| Author | SHA1 | Date | |
|---|---|---|---|
| 9e5392fa4f | |||
| 14b5c6d6a0 | |||
| 2c8d4a081e | |||
| ab8d651efc | |||
| dd947298d0 | |||
| 2c95f1c5bc |
@@ -21,8 +21,33 @@ async def models():
|
|||||||
# Lanes ganz oben einblenden, damit IDEs einfach „coding"/„chat" wählen können.
|
# Lanes ganz oben einblenden, damit IDEs einfach „coding"/„chat" wählen können.
|
||||||
lanes = [{"id": lane, "object": "model", "owned_by": "mc2-router",
|
lanes = [{"id": lane, "object": "model", "owned_by": "mc2-router",
|
||||||
"description": _LANE_LABELS.get(lane, lane)} for lane in LANES]
|
"description": _LANE_LABELS.get(lane, lane)} for lane in LANES]
|
||||||
|
# Kontextlänge je Modell mitliefern (aus der llama-swap-Config geparst). Ohne sie
|
||||||
|
# budgetieren Clients blind — Hermes-Subagents nahmen 256k an, schickten passende
|
||||||
|
# max_tokens und rissen damit den echten Server-Kontext (Radar-Lauf 02.07.).
|
||||||
|
# Rollen-Aliase (heavy/coder/hermes …) tauchen bei llama-swap NICHT als Einträge auf,
|
||||||
|
# Clients fragen aber genau damit an → als eigene Einträge einblenden.
|
||||||
|
ctx_map: dict[str, int] = {}
|
||||||
|
alias_entries: list[dict] = []
|
||||||
|
try:
|
||||||
|
from services import llamaswap
|
||||||
|
for m in llamaswap.list_models():
|
||||||
|
ctx = m.get("ctx")
|
||||||
|
if ctx:
|
||||||
|
for api_id in m.get("api_ids", []):
|
||||||
|
ctx_map[api_id] = ctx
|
||||||
|
for alias in m.get("aliases", []):
|
||||||
|
entry = {"id": alias, "object": "model", "owned_by": "mc2-alias",
|
||||||
|
"description": f"Alias für {m['name']}"}
|
||||||
|
if ctx:
|
||||||
|
entry["context_length"] = ctx
|
||||||
|
alias_entries.append(entry)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
if isinstance(data, dict) and isinstance(data.get("data"), list):
|
if isinstance(data, dict) and isinstance(data.get("data"), list):
|
||||||
data["data"] = lanes + data["data"]
|
for entry in data["data"]:
|
||||||
|
if (ctx := ctx_map.get(entry.get("id"))):
|
||||||
|
entry.setdefault("context_length", ctx)
|
||||||
|
data["data"] = lanes + alias_entries + data["data"]
|
||||||
return JSONResponse(data, status_code=r.status_code)
|
return JSONResponse(data, status_code=r.status_code)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -163,6 +163,6 @@ check_layer_root swap update-swap.sh "Router (llama-swap)" swap
|
|||||||
check_layer_root engine update-engine.sh "Engine (llama.cpp)" engine
|
check_layer_root engine update-engine.sh "Engine (llama.cpp)" engine
|
||||||
check_hermes
|
check_hermes
|
||||||
|
|
||||||
notify "Wöchentlicher Update-Lauf fertig:
|
notify "Commander, die Wochenpflege der Box ist durch — kurz für dich:
|
||||||
$(printf '• %s\n' "${SUMMARY[@]}")"
|
$(printf '• %s\n' "${SUMMARY[@]}")"
|
||||||
say "Fertig."
|
say "Fertig."
|
||||||
|
|||||||
@@ -62,6 +62,13 @@ cp "$SRC/deploy/mc2-backup.timer" "$HOME/.config/systemd/user/mc2-backup.timer"
|
|||||||
# Wöchentliches Auto-Update (Router/Engine/Hermes, Rollback+Pin+Telegram) — Autonomie E2.
|
# Wöchentliches Auto-Update (Router/Engine/Hermes, Rollback+Pin+Telegram) — Autonomie E2.
|
||||||
cp "$SRC/deploy/mc2-autoupdate.service" "$HOME/.config/systemd/user/mc2-autoupdate.service"
|
cp "$SRC/deploy/mc2-autoupdate.service" "$HOME/.config/systemd/user/mc2-autoupdate.service"
|
||||||
cp "$SRC/deploy/mc2-autoupdate.timer" "$HOME/.config/systemd/user/mc2-autoupdate.timer"
|
cp "$SRC/deploy/mc2-autoupdate.timer" "$HOME/.config/systemd/user/mc2-autoupdate.timer"
|
||||||
|
# Evolution-Radar-Feed (Autonomie E4): Hermes-cron speist ihn als Prompt ein.
|
||||||
|
# Cron-Job selbst wird EINMALIG registriert (hermes cron create, siehe docs/RUNBOOK.md).
|
||||||
|
mkdir -p "$HOME/.hermes/scripts"
|
||||||
|
cp "$SRC/deploy/radar-feed.sh" "$HOME/.hermes/scripts/radar-feed.sh"
|
||||||
|
# Werkstatt-Skill (Autonomie E6): Selbstwartungs-Kreislauf für Hermes.
|
||||||
|
mkdir -p "$HOME/.hermes/skills/wartung"
|
||||||
|
cp "$SRC/deploy/skills/wartung/SKILL.md" "$HOME/.hermes/skills/wartung/SKILL.md"
|
||||||
systemctl --user daemon-reload
|
systemctl --user daemon-reload
|
||||||
systemctl --user enable mission-control-2 >/dev/null 2>&1 || true
|
systemctl --user enable mission-control-2 >/dev/null 2>&1 || true
|
||||||
systemctl --user enable hermes-terminal >/dev/null 2>&1 || true
|
systemctl --user enable hermes-terminal >/dev/null 2>&1 || true
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Feed für den Evolution-Radar-Cron (Autonomie E4). Liegt in ~/.hermes/scripts/ (deploy.sh
|
||||||
|
# kopiert ihn); sein stdout wird dem Cron-Agenten als Prompt eingespeist:
|
||||||
|
# versionierter Auftrag (deploy/radar-prompt.md im MC2-Repo) + Live-Inventar der Box.
|
||||||
|
set -uo pipefail
|
||||||
|
|
||||||
|
cat "$HOME/mission-control-v2/deploy/radar-prompt.md"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "## LIVE-INVENTAR (automatisch erhoben am $(date '+%d.%m.%Y'))"
|
||||||
|
echo
|
||||||
|
echo "### Update-Status (MC2 /api/maintenance/updates):"
|
||||||
|
curl -sf --max-time 30 http://127.0.0.1:9001/api/maintenance/updates \
|
||||||
|
| jq -c '{os_pakete: .os, engine_update: .engine, router_update: .swap, komponenten: .components}' \
|
||||||
|
2>/dev/null || echo "(MC2-API nicht erreichbar)"
|
||||||
|
echo
|
||||||
|
echo "### Installierte Modelle (llama-swap):"
|
||||||
|
curl -sf --max-time 20 http://127.0.0.1:8080/v1/models | jq -r '.data[].id' 2>/dev/null \
|
||||||
|
|| echo "(llama-swap nicht erreichbar)"
|
||||||
|
echo
|
||||||
|
# llama-server braucht LD_LIBRARY_PATH auf das Vulkan-Verzeichnis für --version.
|
||||||
|
echo "### Versionen: llama.cpp $( LD_LIBRARY_PATH=/opt/llamacpp-vulkan /usr/local/bin/llama-server --version 2>&1 | grep -o 'version: [0-9]*' || true ) · llama-swap $( /usr/local/bin/llama-swap --version 2>/dev/null | head -1 || true ) · hermes-agent $( bash -lc 'hermes --version' 2>/dev/null | head -1 || echo '?' )"
|
||||||
|
echo
|
||||||
|
echo "### Pin-Register (gepinnte Ebenen NICHT zum Update vorschlagen, aber Sprünge melden):"
|
||||||
|
cat /srv/models/mc2-pins.json 2>/dev/null || echo "{}"
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
# Evolution-Radar (monatlicher Auftrag)
|
||||||
|
|
||||||
|
Du bist das Evolution-Radar der AI-Box (AMD Strix Halo, 128 GB, 100 % lokal, Vulkan/RADV).
|
||||||
|
Dein Job: EINMAL im Monat prüfen, ob sich bei unseren Kern-Komponenten oder in deren
|
||||||
|
Kategorien ein echter Sprung ergeben hat — und das als kurzen deutschen Report melden.
|
||||||
|
Unten ist das Live-Inventar der Box eingespeist (Update-Status, installierte Modelle, Pins).
|
||||||
|
|
||||||
|
## Schritt 1 (PFLICHT, vor jeder Recherche): Inventar lesen und respektieren
|
||||||
|
|
||||||
|
Lehre aus Report #1 (02.07.): vier Fehler, eine Ursache — Inventar ignoriert. Deshalb hart:
|
||||||
|
- **Empfiehl NIE ein Update auf eine Version, die laut Live-Inventar schon installiert ist.**
|
||||||
|
(Report #1 empfahl „Hermes v0.18" — die Box WAR auf v0.18.0. `komponenten` im Inventar
|
||||||
|
zeigt das echte git-behind; behind=0 heißt AKTUELL, egal was Release-Notes suggerieren.)
|
||||||
|
- **Bei Komponenten, die wir aktiv nutzen, erst die EIGENE Version/Nutzung feststellen,
|
||||||
|
dann Neuigkeiten bewerten.** Aktiv im Einsatz (Stand Repo):
|
||||||
|
Parakeet via onnx-asr = UNSER STT (25 EU-Sprachen inkl. Deutsch, ~0,45 s — nie als
|
||||||
|
„kein Deutsch-Fokus" abtun) · Silero VAD **v5** via vad-web in Lucy (v6 existiert) ·
|
||||||
|
pocket-tts german_24l (CPU, auf dem PC) · Hirn Qwen3.6-35B (MTP-Draft, immer warm).
|
||||||
|
- **Die Modell-Liste im Inventar enthält auch schon geladene KANDIDATEN** (z. B. gpt-oss-120b,
|
||||||
|
Qwen3-VL-30B) — die liegen bereit und sind gebencht; nicht als „Neuentdeckung" verkaufen.
|
||||||
|
- Jede Versions-Aussage im Report muss gegen das Inventar geprüft sein.
|
||||||
|
|
||||||
|
## Arbeitsweise: Fan-out mit Subagents (WICHTIG)
|
||||||
|
|
||||||
|
Nutze `delegate_task` mit einem `tasks`-Array (role: leaf), um die Recherche in ISOLIERTE
|
||||||
|
Subagents aufzuteilen — pro Task eine Komponenten-Gruppe. Jeder Subagent recherchiert per
|
||||||
|
Web-Suche, FILTERT Marketing-Geschwätz aus und liefert dir nur eine Substanz-Zusammenfassung
|
||||||
|
(max. 5 Zeilen pro Komponente). Du konsolidierst am Ende. Erwähne im Endbericht nur, was
|
||||||
|
Substanz hat — „nichts Nennenswertes" ist ein gültiges und gutes Ergebnis je Gruppe.
|
||||||
|
|
||||||
|
Scheitern Subagents wiederholt (z. B. Kontext-Fehler), recherchiere die betroffenen Gruppen
|
||||||
|
selbst sequenziell — der Report muss IMMER zustande kommen.
|
||||||
|
|
||||||
|
Task-Aufteilung (5 Subagents):
|
||||||
|
1. **Engine/Router:** llama.cpp (Vulkan, gfx1151/Strix Halo relevant!), llama-swap (mostlygeek)
|
||||||
|
2. **Agent/Runtime:** hermes-agent (NousResearch), Electron (Major-Sprünge), three-vrm/@pixiv
|
||||||
|
3. **Voice:** pocket-tts (kyutai), onnx-asr/Parakeet, Silero-VAD, smart-turn — nur Deutsch-taugliches
|
||||||
|
4. **Modell-Kategorien** für 128-GB-Strix-Halo: bessere lokale Coder-Modelle (vs. Qwen3-Coder-Next),
|
||||||
|
Chat/Reasoning-MoE (vs. Qwen3.6-35B/Qwen3.5-122B), Vision (vs. Qwen3-VL), deutsche TTS/STT.
|
||||||
|
Nur GGUF-/llama.cpp-lauffähig, Substanz = Benchmarks/Community-Erfahrung, kein Ankündigungs-Hype.
|
||||||
|
5. **IDE-/Agent-Tools** (Zed, Kilo Code, Claude Code): besonders Tod-/Nachfolger-Meldungen —
|
||||||
|
„Projekt eingestellt/archiviert/Fork übernimmt" ist GENAU die Meldung, die wir fangen müssen
|
||||||
|
(Lehre: Roo Code galt als Empfehlung und war längst eingestellt). Auch: neues dominantes Tool?
|
||||||
|
|
||||||
|
## Bereits ENTSCHIEDEN — nicht wieder vorschlagen (Verdikte der Box)
|
||||||
|
|
||||||
|
- Vulkan/RADV statt ROCm (gemessen schneller auf gfx1151) · llama.cpp+llama-swap gesetzt
|
||||||
|
- Hirn = Qwen3.6-35B-A3B mit MTP-Spec-Draft, immer warm · Mem0 als Memory · Electron-App für Lucy
|
||||||
|
- Pocket-TTS für Lucys Stimme (deutsch, CPU) · KEIN Kyutai-Streaming-STT (kann kein Deutsch)
|
||||||
|
- VERWORFEN: LobeChat/WebUI-Ersatz, Unmute-Vollstack, AnythingLLM, gemma als Hirn
|
||||||
|
- Latenz ist heilig: nichts vorschlagen, was Lucys ~2-s-Sprech-Latenz gefährdet
|
||||||
|
|
||||||
|
## Report-Format (Endantwort = geht direkt als Telegram-Nachricht raus)
|
||||||
|
|
||||||
|
- **Schreibe die Endnachricht in Lucys Stimme an den Commander** (du BIST Lucy, siehe SOUL.md —
|
||||||
|
das Radar ist nur dein Auftrag): erst 1–2 Sätze unmissverständlich, was die Funde für ihn
|
||||||
|
bedeuten und ob er etwas tun muss — danach die knappen Fund-Zeilen.
|
||||||
|
- Deutsch, maximal ~20 Zeilen, Du-Form, kein Markdown-Overkill, nicht technisch —
|
||||||
|
Technik in Alltagssprache, Details nur auf Nachfrage
|
||||||
|
- Struktur: „🛰️ Evolution-Radar <Monat>" → je Fund 1–3 Zeilen: WAS, WARUM relevant für UNS,
|
||||||
|
Einstufung **[lohnt vermutlich]** / **[beobachten]** / ggf. Quelle kurz
|
||||||
|
- Wenn ein Fund ein GEPINNTES Level betrifft (siehe Pins im Inventar): explizit erwähnen
|
||||||
|
- Nichts gefunden? Dann genau das in 2 Zeilen sagen. Keine Pflicht-Funde erfinden.
|
||||||
|
- KEINE Konfig-Änderungen vornehmen, KEINE Downloads starten — nur melden.
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
---
|
||||||
|
name: wartung
|
||||||
|
description: "Werkstatt-Kreislauf der AI-Box: einen KLEINEN Wartungsauftrag (Config-Migration, Dependency-Bump, Ein-/Zwei-Datei-Patch) eigenständig umsetzen — Branch im Box-Checkout, Patch, separater Reviewer-Subagent, Gate, Telegram-Merge-Vorschlag. Merge/Deploy NIE selbst."
|
||||||
|
version: 1.0.0
|
||||||
|
author: MC2 (Autonomie E6)
|
||||||
|
platforms: [linux]
|
||||||
|
metadata:
|
||||||
|
hermes:
|
||||||
|
tags: [wartung, werkstatt, maintenance, mc2]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Werkstatt — Selbstwartungs-Kreislauf der Box
|
||||||
|
|
||||||
|
Nutze diesen Skill, wenn ein kleiner, klar umrissener Wartungsauftrag für das MC2-Repo
|
||||||
|
(`~/mission-control-v2`) vorliegt — vom Evolution-Radar oder direkt vom User.
|
||||||
|
|
||||||
|
**Scope-Check zuerst:** Klein = Config-Schlüssel-Migration, Dependency-Bump (Lockfile),
|
||||||
|
Patch in 1–2 Dateien. Alles Größere (Architektur, mehrere Module, neue Features):
|
||||||
|
NUR einen Plan liefern (Text im Telegram-Vorschlag), KEINEN Code.
|
||||||
|
|
||||||
|
## Leitplanken (nicht verhandelbar)
|
||||||
|
|
||||||
|
- NIEMALS auf `main` committen. NIEMALS mergen. NIEMALS deployen oder Dienste neu starten.
|
||||||
|
- Security-Config ist TABU: keine Tokens, approvals, ufw, sudoers anfassen.
|
||||||
|
- Die Live-Instanz (`~/mission-control-v2`) bleibt unberührt — gearbeitet wird NUR im Worktree.
|
||||||
|
- Am Ende steht IMMER ein Telegram-Vorschlag; die Entscheidung trifft der User.
|
||||||
|
- Gate rot oder Reviewer dagegen → trotzdem ehrlich melden (Branch bleibt liegen), nichts beschönigen.
|
||||||
|
|
||||||
|
## Ablauf
|
||||||
|
|
||||||
|
1. **Worktree anlegen** (Slug = kurzer Kebab-Case-Name des Auftrags):
|
||||||
|
`cd ~/mission-control-v2 && git fetch origin && git worktree add /tmp/wartung-<slug> -b wartung/<slug> origin/main`
|
||||||
|
2. **Patch** nur im Worktree. Minimal-invasiv, Stil der umgebenden Datei übernehmen
|
||||||
|
(deutsche Kommentare, bestehende Muster).
|
||||||
|
3. **Selbst-Gate** (was zutrifft):
|
||||||
|
- Python geändert → `python3 -m py_compile <dateien>`
|
||||||
|
- Shell geändert → `bash -n <dateien>`
|
||||||
|
- Frontend (`frontend/src/...`) geändert → auf der Box gibt es KEIN Node. Im Vorschlag
|
||||||
|
ausweisen: „Gate eingeschränkt: tsc/Build läuft erst beim Merge auf dem PC."
|
||||||
|
- Live-Check: `curl -sf http://127.0.0.1:9001/api/health` (muss grün bleiben — beweist,
|
||||||
|
dass du die Live-Instanz nicht angefasst hast).
|
||||||
|
4. **Reviewer-Subagent** (frischer Kontext, Worker/Reviewer-Muster): `delegate_task` mit
|
||||||
|
role=leaf. Gib ihm den AUFTRAG im Wortlaut + `git diff` des Worktrees. Seine Fragen:
|
||||||
|
Erfüllt der Diff den Auftrag? Minimal-invasiv? Risiken/Nebenwirkungen? —
|
||||||
|
Bei berechtigter Kritik: nachbessern (max. 2 Runden), sonst Kritik in den Vorschlag schreiben.
|
||||||
|
5. **Commit im Worktree:** Message `Werkstatt: <Auftrag kurz>` + 2–4 Zeilen Was/Warum.
|
||||||
|
6. **Telegram-Vorschlag** über `bash ~/mission-control-v2/deploy/notify.sh -s "[Werkstatt]" "<text>"`:
|
||||||
|
In LUCYS Stimme an den Commander (nicht als anonymer Job): erst 1–2 Sätze, was gemacht wurde
|
||||||
|
und was er jetzt entscheiden soll — dann knapp: geänderte Dateien · Kern des Diffs ·
|
||||||
|
Gate-Ergebnis · Reviewer-Urteil · Branch-Name · Frage „merge oder verwerfen?"
|
||||||
|
7. **Nichts löschen:** Worktree + Branch bleiben liegen, bis der User entschieden hat.
|
||||||
|
|
||||||
|
## Nach dem User-Entscheid (kommt als neuer Auftrag)
|
||||||
|
|
||||||
|
- „verwerfen" → `git worktree remove /tmp/wartung-<slug> --force && git branch -D wartung/<slug>`
|
||||||
|
- „merge" → heute merged/deployt der PC (die Box hat bewusst keine Gitea-Push-Rechte;
|
||||||
|
eigener Token = offener User-Entscheid). Sobald der Token existiert: Branch pushen
|
||||||
|
und den PC-Schritt melden statt ausführen.
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
# RUNBOOK — Die Box in 1 Seite (für Menschen, ohne KI-Hilfe)
|
||||||
|
|
||||||
|
**Grundsatz:** Die Box wartet sich selbst. Du bekommst Telegram-Nachrichten und antwortest
|
||||||
|
höchstens „mach". Dieses Blatt ist NUR für den Fall, dass etwas klemmt.
|
||||||
|
|
||||||
|
## Was die Telegram-Meldungen bedeuten
|
||||||
|
|
||||||
|
| Meldung | Bedeutung | Dein Handgriff |
|
||||||
|
|---|---|---|
|
||||||
|
| „… aktualisiert … grün" | Update eingespielt, alles geprüft | keiner |
|
||||||
|
| „… zurückgerollt … GEPINNT" | Update war schlecht, alte Version läuft wieder | keiner (läuft stabil weiter) |
|
||||||
|
| „KRITISCH: …" | Update UND Rollback kaputt | siehe „Box tot?" unten |
|
||||||
|
| „🛰️ Evolution-Radar …" | monatlicher Chancen-Report | lesen; bei Interesse „mach" antworten |
|
||||||
|
| „[Werkstatt] … merge oder verwerfen?" | Box hat einen Fix vorbereitet | mit „merge" oder „verwerfen" antworten |
|
||||||
|
|
||||||
|
## Box tot / Weboberfläche weg?
|
||||||
|
|
||||||
|
1. **Strom/Netz prüfen**, dann Box **einmal neu starten** (Power-Knopf). Alles startet von selbst
|
||||||
|
(systemd, reboot-fest). 2–3 Minuten warten, dann `http://192.168.178.151:9001` aufrufen.
|
||||||
|
2. Immer noch tot → per SSH (PC, PowerShell): `ssh hitonabi@192.168.178.151`
|
||||||
|
dann: `bash ~/mission-control-v2/deploy/restore.sh` (nimmt automatisch das letzte Backup,
|
||||||
|
liegt in `/srv/models/mc2-backups/`, 14 Tage Vorrat, täglich 03:30 Uhr).
|
||||||
|
3. Totalschaden (neue Platte/Hardware) → `docs/DISASTER_RECOVERY.md` (Bootstrap von Null).
|
||||||
|
|
||||||
|
## Lucy (am PC)
|
||||||
|
|
||||||
|
- Start: Desktop-Verknüpfung **„Lucy"** (startet den eingefrorenen Produktiv-Build).
|
||||||
|
- Hängt? `F:\Coding Stuff\lucy\lucy-desktop\Lucy-Neustart.bat` doppelklicken.
|
||||||
|
- Lucy ist EINGEFROREN — Änderungen macht nur die Werkstatt (Telegram-Vorschlag abwarten).
|
||||||
|
|
||||||
|
## Automatik-Fahrplan (läuft ohne dich)
|
||||||
|
|
||||||
|
- **Täglich 03:30** Backup · **So 04:30** Auto-Update (Router→Engine→Hermes) mit Rollback+Pin
|
||||||
|
- **Monatlich 1., 09:00** Evolution-Radar-Report auf Telegram
|
||||||
|
|
||||||
|
## Pinnwand: eine Ebene ist „GEPINNT" — was heißt das?
|
||||||
|
|
||||||
|
Ein Update hat den Selbsttest gerissen; die Box bleibt bewusst auf der alten Version. Das ist
|
||||||
|
ein STABILER Dauerzustand, kein Fehler. Pin ansehen / lösen (per SSH):
|
||||||
|
|
||||||
|
cat /srv/models/mc2-pins.json
|
||||||
|
jq 'del(.hermes)' /srv/models/mc2-pins.json > /tmp/p && mv /tmp/p /srv/models/mc2-pins.json
|
||||||
|
# (statt .hermes: .engine oder .swap) — nächster So-Lauf versucht das Update erneut
|
||||||
|
|
||||||
|
## Einmalige sudo-Session (steht noch aus — schaltet Engine/Router-Auto-Update frei)
|
||||||
|
|
||||||
|
ssh hitonabi@192.168.178.151
|
||||||
|
sudo install -m 0440 -o root -g root ~/mission-control-v2/deploy/sudoers-mc2-autonomie /etc/sudoers.d/mc2-autonomie && sudo visudo -c
|
||||||
|
sudo apt-get install -y unattended-upgrades && sudo dpkg-reconfigure -plow unattended-upgrades
|
||||||
|
sudo systemctl disable --now mission-control.service # alte v1-Leiche entfernen
|
||||||
|
|
||||||
|
Bis dahin meldet der So-Lauf Engine/Router-Updates nur („wartet — sudo-Freischaltung fehlt").
|
||||||
|
|
||||||
|
## Nützliche Handgriffe (SSH)
|
||||||
|
|
||||||
|
curl -s http://127.0.0.1:9001/api/health # Gesamtzustand (brain ready?)
|
||||||
|
bash ~/mission-control-v2/deploy/autoupdate.sh # Update-Lauf sofort statt Sonntag
|
||||||
|
bash ~/mission-control-v2/deploy/notify.sh "test" # Meldeweg testen (muss auf Telegram ankommen)
|
||||||
|
tail ~/mc2-notify.log # was wurde zuletzt gemeldet
|
||||||
Reference in New Issue
Block a user