#!/bin/bash REPO_URL="https://git.pi-farm.de/pi-farm/PiDoBot.git" echo "==========================================" echo ">>> Starte Setup für J.A.R.V.I.S. - AI <<<" echo "==========================================" # 0. Installationsverzeichnis abfragen read -p "Installationsverzeichnis (Standard: jarvis-ai): " input_dir INSTALL_DIR=${input_dir:-jarvis-ai} # Mache den Pfad absolut, falls er relativ angegeben wurde if [[ ! "$INSTALL_DIR" = /* ]]; then INSTALL_DIR="$(pwd)/$INSTALL_DIR" fi echo -e "\nZielverzeichnis: $INSTALL_DIR" # 1. System-Abhängigkeiten installieren echo -e "\n--- 1. Prüfe und installiere System-Pakete..." sudo apt-get update sudo apt-get install -y git wget sshpass python3-pip python3-venv iproute2 # 2. Repository klonen / updaten echo -e "\n--- 2. Hole Quellcode..." if [ ! -d "$INSTALL_DIR" ]; then git clone --branch dev --single-branch "$REPO_URL" "$INSTALL_DIR" else echo "Verzeichnis existiert bereits. Überspringe Klonen." # Optional: git pull hier einbauen, falls du immer die neueste Version willst fi cd "$INSTALL_DIR" || exit # 3. Virtual Environment einrichten echo -e "\n--- 3. Richte Python-Umgebung ein..." if [ ! -d "venv" ]; then python3 -m venv venv fi source venv/bin/activate echo "Installiere Abhängigkeiten..." pip install --upgrade pip if [ -f "source/requirements.txt" ]; then pip install -r source/requirements.txt else echo "FEHLER: requirements.txt nicht in $INSTALL_DIR/source gefunden!" exit 1 fi # 4. SSH-Key prüfen/erstellen echo -e "\n--- 4. Prüfe SSH-Schlüssel für Node-Kommunikation..." if [ ! -f "$HOME/.ssh/id_rsa" ]; then echo "Generiere SSH-Key..." ssh-keygen -t rsa -N "" -f "$HOME/.ssh/id_rsa" else echo "SSH-Key existiert bereits." fi # 5. Static Ordner anlegen und Dateien herunterladen echo -e "\n--- 5. Lade Frontend-Bibliotheken herunter..." if [ ! -d "source/static" ]; then mkdir -p source/static cd source/static wget -q https://cdn.jsdelivr.net/npm/gridstack@7.2.3/dist/gridstack.min.css wget -q https://cdn.jsdelivr.net/npm/gridstack@7.2.3/dist/gridstack-all.js wget -q https://cdn.jsdelivr.net/npm/xterm@5.1.0/css/xterm.css wget -q https://cdn.jsdelivr.net/npm/xterm@5.1.0/lib/xterm.js wget -q https://cdn.jsdelivr.net/npm/xterm-addon-fit@0.7.0/lib/xterm-addon-fit.js wget -q https://cdn.jsdelivr.net/npm/marked/marked.min.js cd ../../ else echo "Static-Dateien existieren bereits." fi # 6. Interaktives Setup für die .env Datei echo -e "\n--- 6. Konfiguration (.env) einrichten..." mkdir -p config ENV_FILE="config/.env" # Standardwerte definieren web_user="Tony" ai_prov="google" google_key="" openai_key="" nvidia_key="" ollama_url="http://127.0.0.1:11434/v1" google_mod="gemini-2.5-flash" openai_mod="gpt-4o" tg_token="" tg_id="" # Falls die Datei existiert, alte Werte laden if [ -f "$ENV_FILE" ]; then echo "Bestehende .env gefunden. Lade aktuelle Werte..." # Lese die Datei zeilenweise ein, um die Variablen sicher zu parsen set -a source "$ENV_FILE" set +a # Überschreibe die Standardwerte mit den gefundenen Werten web_user="${WEB_USER_NAME:-$web_user}" ai_prov="${AI_PROVIDER:-$ai_prov}" google_key="${GOOGLE_API_KEY:-$google_key}" openai_key="${OPENAI_API_KEY:-$openai_key}" nvidia_key="${NVIDIA_API_KEY:-$nvidia_key}" ollama_url="${OLLAMA_BASE_URL:-$ollama_url}" google_mod="${GOOGLE_MODEL:-$google_mod}" openai_mod="${OPENAI_MODEL:-$openai_mod}" tg_token="${TELEGRAM_BOT_TOKEN:-$tg_token}" tg_id="${ALLOWED_TELEGRAM_USER_ID:-$tg_id}" fi echo "Bitte gib die neuen Werte ein. (Drücke ENTER, um den Wert in [Klammern] beizubehalten):" read -p "Dein Web-Benutzername [$web_user]: " input_web_user web_user=${input_web_user:-$web_user} read -p "Primäre KI (google, openai, nvidia, ollama) [$ai_prov]: " input_ai_prov ai_prov=${input_ai_prov:-$ai_prov} # Keys maskieren für die Anzeige, damit sie nicht komplett im Terminal stehen disp_gkey=$( [ -n "$google_key" ] && echo "${google_key:0:5}***" || echo "" ) read -p "Google Gemini API Key [$disp_gkey]: " input_google_key google_key=${input_google_key:-$google_key} disp_okey=$( [ -n "$openai_key" ] && echo "${openai_key:0:5}***" || echo "" ) read -p "OpenAI API Key [$disp_okey]: " input_openai_key openai_key=${input_openai_key:-$openai_key} disp_tgtoken=$( [ -n "$tg_token" ] && echo "${tg_token:0:8}***" || echo "" ) read -p "Telegram Bot Token [$disp_tgtoken]: " input_tg_token tg_token=${input_tg_token:-$tg_token} read -p "Erlaubte Telegram User ID [$tg_id]: " input_tg_id tg_id=${input_tg_id:-$tg_id} # Neue .env schreiben cat < "$ENV_FILE" WEB_USER_NAME=$web_user AI_PROVIDER=$ai_prov GOOGLE_API_KEY=$google_key OPENAI_API_KEY=$openai_key NVIDIA_API_KEY=$nvidia_key OLLAMA_BASE_URL=$ollama_url GOOGLE_MODEL=$google_mod OPENAI_MODEL=$openai_mod TELEGRAM_BOT_TOKEN=$tg_token ALLOWED_TELEGRAM_USER_ID=$tg_id EOF echo "Konfiguration erfolgreich gespeichert." # 7. Port Check echo -e "\n--- 7. Prüfe Port 8000..." if ss -tuln | grep -q ":8000 "; then echo "⚠️ WARNUNG: Port 8000 wird bereits von einem anderen Prozess verwendet!" echo "J.A.R.V.I.S. wird möglicherweise nicht starten können. Bitte prüfe dies nach dem Setup." read -p "Drücke ENTER, um trotzdem fortzufahren..." else echo "✅ Port 8000 ist frei." fi # 8. Systemd Service einrichten echo -e "\n--- 8. Systemdienst (Autostart) einrichten..." read -p "Möchtest du J.A.R.V.I.S. als Hintergrunddienst installieren? (j/N): " setup_service if [[ "$setup_service" =~ ^[jJ]$ ]]; then SERVICE_FILE="/etc/systemd/system/jarvis.service" echo "Erstelle Service-Datei in $SERVICE_FILE..." sudo bash -c "cat < $SERVICE_FILE [Unit] Description=J.A.R.V.I.S. AI Web und Telegram Bot After=network.target [Service] User=$USER WorkingDirectory=$INSTALL_DIR Environment=\"PYTHONPATH=$INSTALL_DIR/source\" ExecStart=$INSTALL_DIR/venv/bin/python -m uvicorn source.main:app --host 0.0.0.0 --port 8000 Restart=always RestartSec=5 [Install] WantedBy=multi-user.target EOF" echo "Aktiviere und starte den Dienst..." sudo systemctl daemon-reload sudo systemctl enable jarvis.service sudo systemctl restart jarvis.service echo -e "\n==========================================" echo "✅ Setup komplett! J.A.R.V.I.S. läuft als Dienst." echo "Verzeichnis: $INSTALL_DIR" echo "Web-Interface: http://:8000" echo "Log-Ausgabe: sudo journalctl -u jarvis -f" echo "==========================================" else echo -e "\n==========================================" echo "✅ Setup komplett! Du kannst J.A.R.V.I.S. nun manuell starten:" echo "cd $INSTALL_DIR" echo "source venv/bin/activate" echo "export PYTHONPATH=\$PYTHONPATH:\$(pwd)/source" echo "python3 -m uvicorn source.main:app --host 0.0.0.0 --port 8000" echo "==========================================" fi