docs(lxc102): installer + procedură de replicare pentru sbt/statusline

- scripts/install-sbt.sh: instalare idempotentă (scripturi + statusline +
  patch settings.json) cu verificări de mediu
- README: replicare de la zero (transfer prin pct exec, installer, sandbox,
  ce se pierde la recrearea sandbox-ului), verificare rapidă, căi noi

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-07-31 11:38:40 +00:00
parent 0729010284
commit e72c1f9f48
2 changed files with 121 additions and 0 deletions

View File

@@ -80,6 +80,8 @@ Trei scripturi în `/home/work/.local/bin/`, copii versionate în `scripts/` din
| `sb` | un shell interactiv în sandbox, într-un director de proiect |
| `sbt` | **sesiune tmux** cu sandbox + agent — echivalentul lui `start-agent.sh` de pe LXC 171 |
Instalare / reinstalare: `scripts/install-sbt.sh` — vezi „Replicare de la zero" mai jos.
### `sbt` — tmux + sandbox + agent
**Nu lansează niciun agent** — deschide shell-uri în sandbox, agentul îl pornești manual
@@ -142,6 +144,61 @@ Statusline-ul e activat și pentru `claude` rulat direct pe host ca `work`, prin
Cache 60s în `/tmp/claude-statusline-usage.json`. Dacă API-ul răspunde `rate_limit_error`,
barele arată `0% ↺ --` până la următoarea reîmprospătare — nu e o defecțiune de config.
### Replicare de la zero
Presupune sbx deja funcțional (vezi „Depanare" mai jos) și userul `work` în grupul `kvm`.
**1. Copiază `scripts/` din acest repo pe LXC 102.** LXC-ul nu are acces direct la repo, deci
transfer prin `pct exec` (rulat de pe LXC 171, unde e clonat repo-ul):
```bash
cd proxmox/lxc102-docker
tar czf - scripts | base64 -w0 | ssh root@10.0.20.201 \
"pct exec 102 -- bash -c 'rm -rf /tmp/sbt-install; mkdir -p /tmp/sbt-install;
cd /tmp/sbt-install && base64 -d | tar xzf - && chown -R work:work /tmp/sbt-install'"
```
**2. Rulează installer-ul ca `work`** (idempotent, poate fi rulat oricând la update):
```bash
ssh root@10.0.20.201 "pct exec 102 -- su - work -c 'cd /tmp/sbt-install/scripts && ./install-sbt.sh'"
```
Pune `sbt`/`agents`/`sb` în `~/.local/bin`, statusline-ul în `/home/workspace/.agent/`,
adaugă `statusLine` în `~/.claude/settings.json` al userului `work` și verifică
`tmux` / `sbx` / `jq` / PATH.
**3. Sandbox-ul.** Scripturile țintesc implicit sandbox-ul `claude-workspace` (numele rezultă din
agent + directorul de lucru, la `sbx create claude /home/workspace`). Alt sandbox se dă prin
variabila `SANDBOX`:
```bash
SANDBOX=alt-sandbox sbt 2 proiect-b
```
**4. După recrearea sandbox-ului** trebuie refăcut ce stă pe overlay-ul efemer `/home/agent`:
login-ul Claude Code (`~/.claude/.credentials.json`) și orice unelte instalate manual în
`~/.local/bin` din sandbox. Persistă doar `/home/workspace` (virtiofs) și volumele montate de sbx
peste `~/.claude/{projects,sessions,todos,skills,shell-snapshots,statsig}` — de aceea statusline-ul
stă în `/home/workspace/.agent/` și e re-legat de `sbt` la fiecare intrare.
### Verificare rapidă
```bash
# statusline randează în sandbox (fără a porni un agent)
sbx exec claude-workspace bash -lc '. /home/workspace/.agent/bootstrap-statusline.sh;
jq -c .statusLine ~/.claude/settings.json; claude --version'
# sesiune tmux fără terminal (test): panes trebuie să fie vii, cu prompt agent@claude-workspace
sbt 3 test-sbt; sleep 10
tmux list-panes -t sbx3 -F '#{pane_index} dead=#{pane_dead}'
tmux capture-pane -p -t sbx3:0.0 | tail -2
tmux kill-session -t sbx3; rm -rf /home/workspace/test-sbt
```
`open terminal failed: not a terminal` la final e normal când `sbt` e rulat neinteractiv —
sesiunea se creează oricum, doar atașarea eșuează.
---
## Cum funcționează sbx (relevant pentru depanare)
@@ -275,3 +332,8 @@ vechi rămân afișate — ce contează e că nu mai cresc.
| `/usr/libexec/containerd-shim-nerdbox-v1` | shim microVM |
| `/usr/libexec/lib/libsailor.so` | bibliotecă VMM (sensibilă la versiunea de glibc) |
| `/home/work/.profile` | conține fix-ul de PATH pentru `mkfs.ext4` |
| `/home/work/.local/bin/{sbt,agents,sb}` | scripturile de lucru (sursa versionată: `scripts/`) |
| `/home/work/.tmux.conf` | prefix `Ctrl+A`, mouse on |
| `/home/workspace/` | bind-mount virtiofs — singurul spațiu persistent partajat cu sandbox-ul |
| `/home/workspace/.agent/statusline.sh` | statusline Claude Code (host + sandbox) |
| `/home/workspace/.agent/bootstrap-statusline.sh` | re-leagă statusline-ul în sandbox la fiecare intrare |