feat: enhance cc-remote.sh with print mode and root user handling
This commit is contained in:
+82
-16
@@ -16,6 +16,8 @@ set -euo pipefail
|
|||||||
# ./cc-remote.sh --print (sadece env'leri göster)
|
# ./cc-remote.sh --print (sadece env'leri göster)
|
||||||
# ──────────────────────────────────────────────
|
# ──────────────────────────────────────────────
|
||||||
|
|
||||||
|
# Çağrıldığı dizini kaydet
|
||||||
|
ORIG_DIR="$PWD"
|
||||||
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
|
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
|
||||||
|
|
||||||
# ── .env'yi yükle (API key için) ──
|
# ── .env'yi yükle (API key için) ──
|
||||||
@@ -39,7 +41,26 @@ if [[ -z "$GATEWAY_URL" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
ANTHROPIC_ENDPOINT="${ANTHROPIC_BASE_URL:-${GATEWAY_URL}/anthropic}"
|
ANTHROPIC_ENDPOINT="${ANTHROPIC_BASE_URL:-${GATEWAY_URL}/anthropic}"
|
||||||
ANTHROPIC_KEY="${ANTHROPIC_API_KEY:-${OPENAI_KEY:-}}"
|
|
||||||
|
# ── Print mode ──
|
||||||
|
print_env() {
|
||||||
|
echo "┌─ optoant Remote → Claude Code Environment"
|
||||||
|
echo "│ ANTHROPIC_BASE_URL=${ANTHROPIC_ENDPOINT}"
|
||||||
|
echo "│ ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-${OPENAI_KEY:-}:0:20}... (masked)"
|
||||||
|
echo "│ Gateway: ${GATEWAY_URL}/health"
|
||||||
|
echo "└─"
|
||||||
|
}
|
||||||
|
|
||||||
|
case "${1:-}" in
|
||||||
|
--print|-p)
|
||||||
|
print_env
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
--help|-h)
|
||||||
|
sed -n '2,17p' "$0"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
# ── Gateway health check ──
|
# ── Gateway health check ──
|
||||||
echo "🔍 Gateway kontrol ediliyor: ${GATEWAY_URL}/health"
|
echo "🔍 Gateway kontrol ediliyor: ${GATEWAY_URL}/health"
|
||||||
@@ -49,25 +70,70 @@ else
|
|||||||
echo "⚠️ Gateway'e ulaşılamadı, yine de bağlanmayı deneyeceğim"
|
echo "⚠️ Gateway'e ulaşılamadı, yine de bağlanmayı deneyeceğim"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ── Print mode ──
|
print_env
|
||||||
case "${1:-}" in
|
|
||||||
--print|-p)
|
|
||||||
echo ""
|
|
||||||
echo "┌─ optoant Remote → Claude Code Environment"
|
|
||||||
echo "│ ANTHROPIC_BASE_URL=${ANTHROPIC_ENDPOINT}"
|
|
||||||
echo "│ ANTHROPIC_API_KEY=${ANTHROPIC_KEY:0:20}... (masked)"
|
|
||||||
echo "│ Gateway: ${GATEWAY_URL}/health"
|
|
||||||
echo "└─"
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# ── Claude Code'u başlat ──
|
# ── Claude Code'u başlat ──
|
||||||
echo "┌─ Claude Code başlatılıyor (remote gateway)..."
|
echo "┌─ Claude Code başlatılıyor (remote gateway)..."
|
||||||
echo "│ Gateway: ${ANTHROPIC_ENDPOINT}"
|
echo "│ Gateway: ${ANTHROPIC_ENDPOINT}"
|
||||||
|
echo "│ Not: Streaming desteklenmiyor. ~/.claude/settings.json'a"
|
||||||
|
echo '│ "stream": false eklendi.'
|
||||||
|
echo "│ Çıkmak için: exit veya Ctrl+C"
|
||||||
echo "└─"
|
echo "└─"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
ANTHROPIC_BASE_URL="${ANTHROPIC_ENDPOINT}" \
|
if [[ $EUID -eq 0 ]]; then
|
||||||
ANTHROPIC_API_KEY="${ANTHROPIC_KEY}" \
|
# ── Root: non-root kullanıcı oluştur, su ile başlat ──
|
||||||
claude "$@"
|
CLAUD_USER="optoant-claude"
|
||||||
|
if ! id "$CLAUD_USER" &>/dev/null; then
|
||||||
|
echo "👤 Non-root kullanıcı oluşturuluyor: $CLAUD_USER"
|
||||||
|
useradd -m -s /bin/bash "$CLAUD_USER"
|
||||||
|
if [[ -d /root/.claude ]]; then
|
||||||
|
cp -r /root/.claude "/home/${CLAUD_USER}/"
|
||||||
|
chown -R "${CLAUD_USER}:${CLAUD_USER}" "/home/${CLAUD_USER}/.claude"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
CLAUD_HOME="/home/${CLAUD_USER}"
|
||||||
|
CLAUD_PROJECT="${CLAUD_HOME}/opantoantro"
|
||||||
|
if [[ ! -d "${CLAUD_PROJECT}" ]]; then
|
||||||
|
echo "📁 Proje kopyalanıyor: ${CLAUD_PROJECT}"
|
||||||
|
cp -r /root/opantoantro "${CLAUD_PROJECT}"
|
||||||
|
chown -R "${CLAUD_USER}:${CLAUD_USER}" "${CLAUD_PROJECT}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
CLAUD_BIN="/usr/local/bin/claude"
|
||||||
|
if [[ ! -x "$CLAUD_BIN" ]]; then
|
||||||
|
SRC=$(find /root/.nvm -name "claude" -o -name "claude.exe" -type f 2>/dev/null | head -1)
|
||||||
|
if [[ -z "$SRC" ]]; then
|
||||||
|
echo "❌ claude binary bulunamadı. Önce: npm install -g @anthropic-ai/claude-code"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
cp "$SRC" "$CLAUD_BIN"
|
||||||
|
chmod 755 "$CLAUD_BIN"
|
||||||
|
echo "📦 Claude Code kopyalandı: ${CLAUD_BIN}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
CLAUD_RUNNER="/tmp/cc-remote-run-${CLAUD_USER}.sh"
|
||||||
|
cat > "$CLAUD_RUNNER" <<- WRAPPER
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
cd "${ORIG_DIR}" 2>/dev/null || cd "${CLAUD_PROJECT}"
|
||||||
|
export ANTHROPIC_BASE_URL="${ANTHROPIC_ENDPOINT}"
|
||||||
|
export ANTHROPIC_API_KEY="${ANTHROPIC_API_KEY:-${OPENAI_KEY:-}}"
|
||||||
|
exec "${CLAUD_BIN}" --settings '{"stream": false}' "\$@"
|
||||||
|
WRAPPER
|
||||||
|
chmod +x "$CLAUD_RUNNER"
|
||||||
|
|
||||||
|
SAFE_ARGS=""
|
||||||
|
for arg in "$@"; do
|
||||||
|
SAFE_ARGS="${SAFE_ARGS} $(printf '%q' "$arg")"
|
||||||
|
done
|
||||||
|
|
||||||
|
su - "${CLAUD_USER}" -c "${CLAUD_RUNNER}${SAFE_ARGS}"
|
||||||
|
rm -f "$CLAUD_RUNNER"
|
||||||
|
else
|
||||||
|
# ── Non-root: doğrudan başlat ──
|
||||||
|
cd "$ORIG_DIR"
|
||||||
|
ANTHROPIC_BASE_URL="${ANTHROPIC_ENDPOINT}" \
|
||||||
|
ANTHROPIC_API_KEY="${ANTHROPIC_API_KEY:-${OPENAI_KEY:-}}" \
|
||||||
|
claude --settings '{"stream": false}' "$@"
|
||||||
|
fi
|
||||||
|
|||||||
BIN
Binary file not shown.
Reference in New Issue
Block a user