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:
59
proxmox/lxc102-docker/scripts/install-sbt.sh
Executable file
59
proxmox/lxc102-docker/scripts/install-sbt.sh
Executable file
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env bash
|
||||
# Instalează pe LXC 102 (userul `work`) mediul tmux + sandbox + statusline:
|
||||
# ~/.local/bin/{sbt,agents,sb}
|
||||
# /home/workspace/.agent/{statusline.sh,bootstrap-statusline.sh}
|
||||
# statusLine în ~/.claude/settings.json (pentru claude rulat pe host)
|
||||
#
|
||||
# Se rulează DIN directorul care conține scripturile (acest scripts/ copiat pe LXC 102):
|
||||
# su - work -c 'cd /tmp/sbt-install && ./install-sbt.sh'
|
||||
#
|
||||
# Idempotent — poate fi rulat de câte ori e nevoie.
|
||||
set -euo pipefail
|
||||
|
||||
SRC="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
BIN="$HOME/.local/bin"
|
||||
AGENT_DIR="/home/workspace/.agent"
|
||||
CFG="$HOME/.claude/settings.json"
|
||||
STATUSLINE="$AGENT_DIR/statusline.sh"
|
||||
|
||||
[ "$(id -un)" = "work" ] || echo "ATENȚIE: rulezi ca $(id -un), nu ca 'work'."
|
||||
|
||||
# --- 1. scripturile de pe host ---
|
||||
mkdir -p "$BIN"
|
||||
for f in sbt agents sb; do
|
||||
install -m 755 "$SRC/$f" "$BIN/$f"
|
||||
echo "instalat $BIN/$f"
|
||||
done
|
||||
|
||||
# --- 2. statusline pe volumul partajat cu sandbox-ul ---
|
||||
# /home/workspace e bind-mount virtiofs, singurul loc persistent văzut identic
|
||||
# din host și din sandbox (/home/agent din sandbox e overlay efemer).
|
||||
mkdir -p "$AGENT_DIR"
|
||||
install -m 755 "$SRC/statusline.sh" "$AGENT_DIR/statusline.sh"
|
||||
install -m 644 "$SRC/bootstrap-statusline.sh" "$AGENT_DIR/bootstrap-statusline.sh"
|
||||
echo "instalat $AGENT_DIR/{statusline.sh,bootstrap-statusline.sh}"
|
||||
|
||||
# --- 3. statusline și pentru claude rulat direct pe host ---
|
||||
mkdir -p "$(dirname "$CFG")"
|
||||
[ -f "$CFG" ] || printf '{}\n' > "$CFG"
|
||||
if [ "$(jq -r '.statusLine.command // ""' "$CFG" 2>/dev/null)" != "$STATUSLINE" ]; then
|
||||
tmp=$(mktemp)
|
||||
if jq --arg c "$STATUSLINE" '.statusLine = {type: "command", command: $c}' "$CFG" > "$tmp"; then
|
||||
mv "$tmp" "$CFG"; echo "statusLine adăugat în $CFG"
|
||||
else
|
||||
rm -f "$tmp"; echo "EȘEC: $CFG nu e JSON valid — adaugă statusLine manual." >&2
|
||||
fi
|
||||
else
|
||||
echo "statusLine deja configurat în $CFG"
|
||||
fi
|
||||
|
||||
# --- 4. verificări ---
|
||||
echo "--- verificări ---"
|
||||
for c in tmux sbx jq; do
|
||||
command -v "$c" >/dev/null && echo "ok: $c" || echo "LIPSĂ: $c"
|
||||
done
|
||||
bash -n "$BIN/sbt" && echo "ok: sintaxă sbt"
|
||||
grep -q "$HOME/.local/bin" <<<"$PATH" && echo "ok: ~/.local/bin în PATH" \
|
||||
|| echo "ATENȚIE: adaugă ~/.local/bin în PATH (~/.profile)"
|
||||
echo
|
||||
echo "Gata. Pornește sandbox-ul și o sesiune: agents up && sbt"
|
||||
Reference in New Issue
Block a user