diff --git a/.env.example b/.env.example index 0e5ac07..12092e2 100644 --- a/.env.example +++ b/.env.example @@ -88,3 +88,7 @@ AIW_MAX_TOOL_ROUNDS=12 AIW_MAX_TOOL_ROUNDS_LIMIT=40 # Verlauf je Anfrage höchstens so viele Tokens (geschätzt); Älteres geht als Arbeitsnotiz mit AIW_HISTORY_MAX_TOKENS=60000 + +# Nur für Rechner/VMs ohne AVX (Absturz mit Exit-Code 132): psycopg ohne Binärpaket, braucht die libpq +# des Systems (apt install libpq5). Wird von scripts/dev.sh übernommen; sonst in der Umgebung setzen. +# PSYCOPG_IMPL=python diff --git a/docs/lokal-starten.md b/docs/lokal-starten.md index 969dd5c..f933a55 100644 --- a/docs/lokal-starten.md +++ b/docs/lokal-starten.md @@ -122,6 +122,13 @@ uv run aiw check # Uploads und Master-Key gegen die D - **`/ready` meldet einen veralteten Migrationsstand:** `uv run aiw migrate`. - **Änderungen an Templates erscheinen nicht:** den Web-Server neu starten, oder ihn mit `--reload` starten, dann startet er bei Änderungen selbst neu. +### Absturz mit Exit-Code 132 (VM ohne AVX) + +Exit-Code 132 heißt SIGILL: Eine fertig kompilierte Bibliothek nutzt CPU-Befehle, die der Rechner nicht hat. Typisch für VirtualBox auf Windows-Hosts mit aktivem Hyper-V (WSL2, Docker Desktop, Speicher-Integrität): `grep -o -w -E 'avx|avx2' /proc/cpuinfo` liefert nichts. Betroffen ist zuerst `psycopg-binary`. + +- **Am Host beheben (empfohlen):** Hyper-V-Nutzung aus (`bcdedit /set hypervisorlaunchtype off`, Speicher-Integrität aus, Neustart), dann `VBoxManage modifyvm "" --cpu-profile host`. Danach meldet die VM `avx avx2`. +- **In der VM umgehen:** `sudo apt install libpq5` und `PSYCOPG_IMPL=python` in `.env`; `scripts/dev.sh` übernimmt das für Web, Worker und DB-Dienst. Stürzt danach eine andere Bibliothek ab, steht sie im Stack („Fatal Python error“, `scripts/dev.sh` setzt `PYTHONFAULTHANDLER=1`). + ## Datenbanken ausprobieren Datenbanken sind MCP-Verbindungen eines Workspace über einen Datenbank-Treiber, also einen DB-Dienst aus `services/db-mcp`. `scripts/dev.sh` startet den Dienst für PostgreSQL (Port 8791), mit `--oracle` zusätzlich den Oracle-Container (Oracle Database Free, ca. 6 GB, erster Start einige Minuten; Port 55434, Service `FREEPDB1`, Admin `system`/`aiw`) und den Dienst für Oracle (Port 8792). Von Hand: Container mit `docker compose --profile oracle up -d oracle`, Dienste wie in [services/db-mcp/README.md](../services/db-mcp/README.md#lokal-starten-und-testen). diff --git a/scripts/dev.sh b/scripts/dev.sh index b4fdcfd..de0c6ca 100755 --- a/scripts/dev.sh +++ b/scripts/dev.sh @@ -141,6 +141,12 @@ export AIW_MCP_ALLOW_LOCAL=${AIW_MCP_ALLOW_LOCAL:-true} export AIW_WORKER_HTTP_HOST=${AIW_WORKER_HTTP_HOST:-127.0.0.1} export AIW_COOKIE_SECURE=${AIW_COOKIE_SECURE:-false} export PYTHONUNBUFFERED=1 +# Stürzt Python in nativem Code ab (z. B. SIGILL, SIGSEGV), zeigt das den Python-Stack bis zur Bibliothek +export PYTHONFAULTHANDLER=1 +# psycopg ohne Binärpaket (reine Python-Variante mit der libpq des Systems), z. B. für VMs ohne AVX: +# PSYCOPG_IMPL=python in .env oder der Umgebung; gilt für Web, Worker und den DB-Dienst +: "${PSYCOPG_IMPL:=$(env_value PSYCOPG_IMPL)}" +[ -n "$PSYCOPG_IMPL" ] && export PSYCOPG_IMPL && say "psycopg-Variante: $PSYCOPG_IMPL" trap 'trap - INT TERM EXIT; echo; say "Stoppe Web, Worker und DB-Dienste"; kill 0 2>/dev/null; wait 2>/dev/null' INT TERM EXIT # Gestartete Prozesse: PID, Name und Befehl zum Einzelstart (parallele Listen, Bash 3 von macOS kennt keine Maps) @@ -204,6 +210,11 @@ while true; do wait "${PIDS[$i]}" 2>/dev/null || code=$? echo printf '\033[31m%s hat sich beendet (Exit-Code %s).\033[0m\n' "${NAMES[$i]}" "$code" >&2 + case $code in + 132) echo "Signal SIGILL: Die CPU kennt eine Anweisung einer nativen Bibliothek nicht (oft VM ohne AVX/AVX2;" \ + "CPU-Typ der VM auf „host“ stellen). Welche Bibliothek, zeigt der Stack mit „Fatal Python error“ oben." >&2 ;; + 134|139) echo "Absturz in nativem Code (Signal $((code - 128))); Stack mit „Fatal Python error“ oben." >&2 ;; + esac echo "Seine Ausgabe steht oben mit Präfix; fehlt sie, den Prozess einzeln starten und die Meldung ansehen:" >&2 echo " ${COMMANDS[$i]}" >&2 exit 1