| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282 |
- @echo off
- REM Trixy Installationsskript (Windows)
- REM Interaktive Einrichtung: Modus, Konfiguration, Autostart/Dienst
- setlocal enabledelayedexpansion
- REM Ins Projektverzeichnis wechseln
- pushd "%~dp0"
- set "PROJECT_DIR=%~dp0"
- REM Trailing Backslash entfernen
- if "%PROJECT_DIR:~-1%"=="\" set "PROJECT_DIR=%PROJECT_DIR:~0,-1%"
- echo.
- echo ========================================
- echo Trixy - Interaktive Installation
- echo ========================================
- echo.
- REM -------------------------------------------------------
- REM Schritt 1: Update ausfuehren
- REM -------------------------------------------------------
- echo [1/7] Update ausfuehren...
- if exist "bash\update_windows.bat" (
- call bash\update_windows.bat
- ) else (
- echo Hinweis: Update-Skript nicht gefunden, ueberspringe.
- )
- echo.
- REM -------------------------------------------------------
- REM Schritt 2: Python-Abhaengigkeiten installieren
- REM -------------------------------------------------------
- echo [2/7] Python-Abhaengigkeiten pruefen...
- where python >nul 2>&1
- if errorlevel 1 (
- echo FEHLER: python nicht gefunden! Bitte Python 3.10+ installieren.
- goto :end
- )
- where pip >nul 2>&1
- if errorlevel 1 (
- echo Hinweis: pip nicht gefunden. Abhaengigkeiten muessen manuell installiert werden.
- ) else (
- if exist "requirements.txt" (
- echo Installiere Abhaengigkeiten aus requirements.txt...
- pip install -r requirements.txt
- ) else (
- echo Keine requirements.txt gefunden, ueberspringe.
- )
- )
- echo.
- REM -------------------------------------------------------
- REM Schritt 3: Modus waehlen
- REM -------------------------------------------------------
- echo [3/7] Modus waehlen
- echo.
- echo Welchen Modus moechtest du installieren?
- echo [1] Server - Zentraler Server fuer Satellite-Management
- echo [2] Standalone - All-in-One ohne Server
- echo [3] Client - Leichtgewichtiger Satellite
- echo.
- :mode_select
- set /p "MODE_CHOICE= Auswahl [1/2/3]: "
- if "%MODE_CHOICE%"=="1" (
- set "MODE=server"
- set "CONFIG_FILE=config\server_config.json"
- goto :mode_done
- )
- if "%MODE_CHOICE%"=="2" (
- set "MODE=standalone"
- set "CONFIG_FILE=config\standalone_config.json"
- goto :mode_done
- )
- if "%MODE_CHOICE%"=="3" (
- set "MODE=client"
- set "CONFIG_FILE=config\client_config.json"
- goto :mode_done
- )
- echo Ungueltige Auswahl. Bitte 1, 2 oder 3 eingeben.
- goto :mode_select
- :mode_done
- echo.
- REM -------------------------------------------------------
- REM Schritt 4: Device-Name abfragen
- REM -------------------------------------------------------
- echo [4/7] Geraetename festlegen
- echo Aktueller Hostname: %COMPUTERNAME%
- set "DEVICE_NAME="
- set /p "DEVICE_NAME= Neuer Geraetename (leer = beibehalten): "
- if not "%DEVICE_NAME%"=="" (
- echo Setze Hostname auf: %DEVICE_NAME%
- WMIC computersystem where name="%COMPUTERNAME%" call rename name="%DEVICE_NAME%" >nul 2>&1
- if errorlevel 1 (
- echo Hinweis: Hostname konnte nicht gesetzt werden. Starte als Administrator.
- ) else (
- echo Hostname geaendert. Wird nach Neustart wirksam.
- )
- ) else (
- set "DEVICE_NAME=%COMPUTERNAME%"
- )
- echo.
- REM -------------------------------------------------------
- REM Schritt 5: Modus-spezifische Abfragen
- REM -------------------------------------------------------
- echo [5/7] Konfiguration fuer Modus: %MODE%
- echo.
- set "ALIAS="
- set "ROOM="
- set "HOST="
- set "PORT=2101"
- set "NETWORK_MODE="
- if "%MODE%"=="client" goto :config_client
- if "%MODE%"=="standalone" goto :config_standalone
- if "%MODE%"=="server" goto :config_server
- goto :config_done
- :config_client
- set /p "ALIAS= Alias (Satellite-Name): "
- set /p "ROOM= Raum-Kennung: "
- set /p "HOST= Server-Host (IP-Adresse): "
- echo.
- set /p "CUSTOM_PORT= Eigenen Port verwenden? [j/n]: "
- if /i "%CUSTOM_PORT%"=="j" (
- set /p "PORT= Port-Nummer: "
- )
- echo Schreibe %CONFIG_FILE%...
- python -c "import json; f=open('%CONFIG_FILE%','r'); cfg=json.load(f); f.close(); cfg['server']['host']='%HOST%'; cfg['server']['port']=%PORT%; cfg['identity']['room']='%ROOM%'; cfg['identity']['alias']='%ALIAS%'; f=open('%CONFIG_FILE%','w'); json.dump(cfg,f,indent=4,ensure_ascii=False); f.close()"
- echo Konfiguration geschrieben.
- goto :config_done
- :config_standalone
- set /p "ALIAS= Alias: "
- set /p "ROOM= Raum-Kennung: "
- echo Schreibe %CONFIG_FILE%...
- python -c "import json; f=open('%CONFIG_FILE%','r'); cfg=json.load(f); f.close(); cfg['room']='%ROOM%'; cfg['alias']='%ALIAS%'; f=open('%CONFIG_FILE%','w'); json.dump(cfg,f,indent=4,ensure_ascii=False); f.close()"
- echo Konfiguration geschrieben.
- goto :config_done
- :config_server
- echo Netzwerk-Konfiguration:
- echo [1] Normales Netzwerk - Server laeuft im bestehenden LAN
- echo [2] WiFi-Hotspot - Nur unter Linux verfuegbar
- echo.
- :net_select
- set /p "NET_CHOICE= Auswahl [1/2]: "
- if "%NET_CHOICE%"=="1" (
- set "NETWORK_MODE=LAN"
- set "BIND_ADDRESS=0.0.0.0"
- goto :net_done
- )
- if "%NET_CHOICE%"=="2" (
- echo.
- echo HINWEIS: WiFi-Hotspot wird nur unter Linux unterstuetzt.
- echo Fahre mit normalem Netzwerk fort.
- set "NETWORK_MODE=LAN"
- set "BIND_ADDRESS=0.0.0.0"
- goto :net_done
- )
- echo Ungueltige Auswahl.
- goto :net_select
- :net_done
- echo Schreibe %CONFIG_FILE%...
- python -c "import json; f=open('%CONFIG_FILE%','r'); cfg=json.load(f); f.close(); cfg['network']['bind_address']='%BIND_ADDRESS%'; f=open('%CONFIG_FILE%','w'); json.dump(cfg,f,indent=4,ensure_ascii=False); f.close()"
- echo Konfiguration geschrieben.
- goto :config_done
- :config_done
- echo.
- REM -------------------------------------------------------
- REM Schritt 6: Autostart / Dienst einrichten
- REM -------------------------------------------------------
- echo [6/7] Startmethode waehlen
- echo.
- echo Wie soll Trixy gestartet werden?
- echo [1] Autostart - Startet beim Login des Benutzers
- echo [2] Dienst - Als Windows-Dienst (erfordert NSSM)
- echo.
- set "START_METHOD="
- :start_select
- set /p "START_CHOICE= Auswahl [1/2]: "
- if "%START_CHOICE%"=="1" (
- set "START_METHOD=Autostart"
- goto :start_done
- )
- if "%START_CHOICE%"=="2" (
- set "START_METHOD=Dienst"
- goto :start_done
- )
- echo Ungueltige Auswahl.
- goto :start_select
- :start_done
- REM Config-Pfad fuer Startskript (Backslash durch Forward-Slash ersetzen fuer Python)
- set "CONFIG_FILE_FWD=%CONFIG_FILE:\=/%"
- if "%START_METHOD%"=="Autostart" (
- set "STARTUP_DIR=%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup"
- echo @echo off> "!STARTUP_DIR!\trixy.bat"
- echo cd /d "%PROJECT_DIR%">> "!STARTUP_DIR!\trixy.bat"
- echo call run_windows.bat %MODE% --config %CONFIG_FILE%>> "!STARTUP_DIR!\trixy.bat"
- echo Autostart-Eintrag erstellt: !STARTUP_DIR!\trixy.bat
- )
- if "%START_METHOD%"=="Dienst" (
- echo.
- echo Windows-Dienste benoetigen NSSM (Non-Sucking Service Manager).
- echo Download: https://nssm.cc/download
- echo.
- where nssm >nul 2>&1
- if errorlevel 1 (
- echo NSSM nicht gefunden. Erstelle Autostart-Eintrag als Alternative...
- set "STARTUP_DIR=%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup"
- echo @echo off> "!STARTUP_DIR!\trixy.bat"
- echo cd /d "%PROJECT_DIR%">> "!STARTUP_DIR!\trixy.bat"
- echo call run_windows.bat %MODE% --config %CONFIG_FILE%>> "!STARTUP_DIR!\trixy.bat"
- echo Autostart-Eintrag erstellt: !STARTUP_DIR!\trixy.bat
- echo Fuer echten Dienst: nssm install Trixy "%PROJECT_DIR%\run_windows.bat" %MODE% --config %CONFIG_FILE%
- ) else (
- echo Erstelle Windows-Dienst mit NSSM...
- nssm install Trixy "%PROJECT_DIR%\run_windows.bat" %MODE% --config %CONFIG_FILE%
- nssm set Trixy AppDirectory "%PROJECT_DIR%"
- nssm set Trixy Description "Trixy Voice Assistant"
- nssm set Trixy Start SERVICE_AUTO_START
- echo Dienst 'Trixy' erstellt und auf Autostart gesetzt.
- )
- )
- echo.
- REM -------------------------------------------------------
- REM Schritt 7: Zusammenfassung
- REM -------------------------------------------------------
- echo [7/7] Zusammenfassung
- echo.
- echo ========================================
- echo Trixy Installation - Zusammenfassung
- echo ========================================
- echo Modus: %MODE%
- echo Device-Name: %DEVICE_NAME%
- if "%MODE%"=="client" (
- echo Alias: %ALIAS%
- echo Raum: %ROOM%
- echo Server: %HOST%:%PORT%
- )
- if "%MODE%"=="standalone" (
- echo Alias: %ALIAS%
- echo Raum: %ROOM%
- )
- if "%MODE%"=="server" (
- echo Netzwerk: %NETWORK_MODE%
- )
- echo Start-Methode: %START_METHOD%
- echo Config-Datei: %CONFIG_FILE%
- echo ========================================
- echo Installation abgeschlossen!
- echo Starte mit: run_windows.bat %MODE%
- echo ========================================
- echo.
- :end
- popd
- endlocal
- pause
|