nanobot: 2026-09-13 14:09:32

This commit is contained in:
lachtan
2026-09-13 14:09:33 +02:00
parent c2000cb6a1
commit 8e5c7b84ec
3 changed files with 60 additions and 43 deletions

View File

@@ -96,17 +96,11 @@
"originMetadata": {} "originMetadata": {}
}, },
"state": { "state": {
"nextRunAtMs": 1789299383185, "nextRunAtMs": 1789306583197,
"lastRunAtMs": 1789292183173, "lastRunAtMs": 1789299383186,
"lastStatus": "ok", "lastStatus": "ok",
"lastError": null, "lastError": null,
"runHistory": [ "runHistory": [
{
"runAtMs": 1789155381883,
"status": "ok",
"durationMs": 10,
"error": null
},
{ {
"runAtMs": 1789162581894, "runAtMs": 1789162581894,
"status": "ok", "status": "ok",
@@ -220,11 +214,17 @@
"status": "ok", "status": "ok",
"durationMs": 12, "durationMs": 12,
"error": null "error": null
},
{
"runAtMs": 1789299383186,
"status": "ok",
"durationMs": 11,
"error": null
} }
] ]
}, },
"createdAtMs": 1789032980434, "createdAtMs": 1789032980434,
"updatedAtMs": 1789292183185, "updatedAtMs": 1789299383197,
"deleteAfterRun": false "deleteAfterRun": false
}, },
{ {
@@ -251,41 +251,11 @@
"originMetadata": {} "originMetadata": {}
}, },
"state": { "state": {
"nextRunAtMs": 1789293985755, "nextRunAtMs": 1789302985765,
"lastRunAtMs": 1789292185755, "lastRunAtMs": 1789301185764,
"lastStatus": "ok", "lastStatus": "ok",
"lastError": null, "lastError": null,
"runHistory": [ "runHistory": [
{
"runAtMs": 1789257985720,
"status": "ok",
"durationMs": 0,
"error": null
},
{
"runAtMs": 1789259785722,
"status": "ok",
"durationMs": 0,
"error": null
},
{
"runAtMs": 1789261585723,
"status": "ok",
"durationMs": 1,
"error": null
},
{
"runAtMs": 1789263385726,
"status": "ok",
"durationMs": 0,
"error": null
},
{
"runAtMs": 1789265185728,
"status": "ok",
"durationMs": 0,
"error": null
},
{ {
"runAtMs": 1789266985730, "runAtMs": 1789266985730,
"status": "ok", "status": "ok",
@@ -375,11 +345,41 @@
"status": "ok", "status": "ok",
"durationMs": 0, "durationMs": 0,
"error": null "error": null
},
{
"runAtMs": 1789293985756,
"status": "ok",
"durationMs": 0,
"error": null
},
{
"runAtMs": 1789295785758,
"status": "ok",
"durationMs": 0,
"error": null
},
{
"runAtMs": 1789297585759,
"status": "ok",
"durationMs": 1,
"error": null
},
{
"runAtMs": 1789299385763,
"status": "ok",
"durationMs": 0,
"error": null
},
{
"runAtMs": 1789301185764,
"status": "ok",
"durationMs": 1,
"error": null
} }
] ]
}, },
"createdAtMs": 1789032980437, "createdAtMs": 1789032980437,
"updatedAtMs": 1789292185755, "updatedAtMs": 1789301185765,
"deleteAfterRun": false "deleteAfterRun": false
} }
] ]

View File

@@ -1,3 +1,19 @@
- 2026-09-11: Projekt založen. Uživatel ho chce jako úložiště pro admin/root poznámky — infrastruktura, servery, provoz, podobně. Záměrně volné zaměření, strukturu a upřesnění odkládá na později. prompt.md naplněn základním homelab kontextem (Proxmox cluster, wood/pivo/nvidia/devlin.hell, Zabbix, zálohy), state.md obsahuje výchozí „kde to je / co dál". - 2026-09-11: Projekt založen. Uživatel ho chce jako úložiště pro admin/root poznámky — infrastruktura, servery, provoz, podobně. Záměrně volné zaměření, strukturu a upřesnění odkládá na později. prompt.md naplněn základním homelab kontextem (Proxmox cluster, wood/pivo/nvidia/devlin.hell, Zabbix, zálohy), state.md obsahuje výchozí „kde to je / co dál".
- 2026-09-11: Presun LibreChat podman topicu z projektu ai do devops (tematicky patri sem). Artefakt librechat-podman presunut z projects/ai/artifacts/ do projects/devops/artifacts/ (README + quadlet unity). Kontext: OpenWebUI zakazano (RAM problemy), jako nahraada LibreChat; uzivatel si tema nejdřív nacte sam a rozhodne o pristupu — agent dodava info, nereshi rozhodnuti. Soucasti presunu i souhrn diskuse o podman+systemd (generate systemd deprecated od 4.4, quadlet jako hlediska, ne hotova volba). - 2026-09-11: Presun LibreChat podman topicu z projektu ai do devops (tematicky patri sem). Artefakt librechat-podman presunut z projects/ai/artifacts/ do projects/devops/artifacts/ (README + quadlet unity). Kontext: OpenWebUI zakazano (RAM problemy), jako nahraada LibreChat; uzivatel si tema nejdřív nacte sam a rozhodne o pristupu — agent dodava info, nereshi rozhodnuti. Soucasti presunu i souhrn diskuse o podman+systemd (generate systemd deprecated od 4.4, quadlet jako hlediska, ne hotova volba).
- 2026-09-11: Doplneni motivace pro LibreChat: chci neco lite, kde snadno muzu menit LLM modely, testovat tool calling, mit preddefinovane system prompty, vyuzivat skills (LibreChat ma vlastni Skills/Agents system). OpenWebUI odstraneno kvuli RAM; LibreChat ma byt lehci alternativa s temito vlastnostmi. - 2026-09-11: Doplneni motivace pro LibreChat: chci neco lite, kde snadno muzu menit LLM modely, testovat tool calling, mit preddefinovane system prompty, vyuzivat skills (LibreChat ma vlastni Skills/Agents system). OpenWebUI odstraneno kvuli RAM; LibreChat ma byt lehci alternativa s temito vlastnostmi.
- 2026-09-13: Research sandbox kontejnerů pro AI harness (LibreChat Code Interpreter). Vybrané řešení: LibreCodeInterpreter (https://github.com/GlydePath/librecodeinterpreter) — komunitní nsjail reimplementace LibreChat Code Interpreter API, Apache 2.0, GHCR image `ghcr.io/usnavy13/librecodeinterpreter` (amd64+arm64, pinovat tag, ne main). Stack: 1 API kontejner + Redis + Garage (S3). 13 jazyků (Python, JS, TS, Go, Java, C, C++, PHP, Rust, R, Fortran, D, Bash), Python REPL pool ~20-40ms exec, ostatní jazyky one-shot. Sandbox default bez sítě; ENABLE_SANDBOX_NETWORK=true zapne inline allowlist HTTPS proxy (pip/npm/cargo instally, cache ve skill-deps volume). Autentizace: x-api-key header nebo URL credentials (LibreChat LIBRECHAT_CODE_BASEURL=https://<key>@host/v1 → Basic auth).
Speciální práva kontejneru (klíčové zjištění z researchu):
- `cap_add: SYS_ADMIN` — nsjail potřebuje clone namespaces, mount, cgroups. NEVYJEDNATELNÉ, bez toho nsjail nefunguje. SYS_ADMIN je nejsilnější kontejnerová capa — kontejner s ní je de facto root co umí mountovat.
- `cap_add: NET_ADMIN` — pouze pro ENABLE_SANDBOX_NETWORK=true (iptables egress allowlist v sandbox netns). Při offline sandboxech lze vynechat.
- `security_opt: apparmor:unconfined` — nutné na hostech s AppArmor (Ubuntu/Debian), jinak mount() v nsjailu padá na EPERM. Na distrubu bez AppArmor (Alpine) no-op.
- `init: true` (tini) — reapuje zombie nsjail/python child procesy.
Význam pro nasazení: API kontejner běží jako near-host privilegia (root + SYS_ADMIN + unconfined) na sdíleném kernelu. Nejedná se o „kontejner izoluje nevěřený kód", ale „API proces musí být skoro-host, aby mohl sám izolovat kód pomocí nsjailu". Skutečná sandbox hranice pro LLM kód je nsjail (PID/mount/net namespaces, seccomp, cgroups, rlimits, non-root UID 1001) — sdílený kernel. Únik z nsjailu = kernel hostu = všechno co na něm běží.
Závěry nasazení:
- Proxmox VM > LXC pro tento use case (nevěřený LLM kód + near-host capy kontejneru). V LXC by únik z nsjailu dosáhl PVE host kernelu; VM dává druhou hranici + možnost nested virt pro microsandbox později.
- Alternativa: běží-li Docker VM jako čistý AI stack (LibreChat + interpreter, žádná produkční data), je jeden host logický celek. Na obecném provozním Docker hostu raději dedikovaná malá VM (1.5-2 GB RAM).
- Rootless podman nefunkční out-of-the-box (user namespace v user namespace, cgroup delegace) — projekt to netestuje; rootful podman/quadlet OK.
- Kompromis vs oficiální codeapi: ta řeší stejný problém microVM režimem (libkrun), ale stojí 5 komponent + Redis + MinIO.

View File

@@ -6,7 +6,8 @@ timestamp: draft
## Kde to je ## Kde to je
- Projekt založen jako volný prostor pro admin/root poznámky o infrastruktuře a provozu. - Projekt založen jako volný prostor pro admin/root poznámky o infrastruktuře a provozu.
- Struktura a zaměření se upřesní postupně — žádný konkrétní úkol ještě není v běhu. - LibreChat: běží jako podman kontejnery; jako Code Interpreter sandbox vybrán LibreCodeInterpreter (nsjail, 3 kontejnery). Research hotový (2026-09-13), rozhodnutí o nasazení (sdílená Docker VM vs dedikovaná Proxmox VM) ještě nepadlo.
## Co dál ## Co dál
- Rozhodnout umístění LibreCodeInterpreter (AI stack VM vs dedikovaná VM) a nasadit — viz memory.md 2026-09-13 pro capability požadavky (SYS_ADMIN, NET_ADMIN, apparmor:unconfined).
- Uživatel bude psát poznámky; podle obsahu doladit strukturu projektu. - Uživatel bude psát poznámky; podle obsahu doladit strukturu projektu.