install_windows.bat 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. @echo off
  2. REM Trixy Installationsskript (Windows)
  3. REM Interaktive Einrichtung: Modus, Konfiguration, Autostart/Dienst
  4. setlocal enabledelayedexpansion
  5. REM Ins Projektverzeichnis wechseln
  6. pushd "%~dp0"
  7. set "PROJECT_DIR=%~dp0"
  8. REM Trailing Backslash entfernen
  9. if "%PROJECT_DIR:~-1%"=="\" set "PROJECT_DIR=%PROJECT_DIR:~0,-1%"
  10. echo.
  11. echo ========================================
  12. echo Trixy - Interaktive Installation
  13. echo ========================================
  14. echo.
  15. REM -------------------------------------------------------
  16. REM Schritt 1: Update ausfuehren
  17. REM -------------------------------------------------------
  18. echo [1/7] Update ausfuehren...
  19. if exist "bash\update_windows.bat" (
  20. call bash\update_windows.bat
  21. ) else (
  22. echo Hinweis: Update-Skript nicht gefunden, ueberspringe.
  23. )
  24. echo.
  25. REM -------------------------------------------------------
  26. REM Schritt 2: Python-Abhaengigkeiten installieren
  27. REM -------------------------------------------------------
  28. echo [2/7] Python-Abhaengigkeiten pruefen...
  29. where python >nul 2>&1
  30. if errorlevel 1 (
  31. echo FEHLER: python nicht gefunden! Bitte Python 3.10+ installieren.
  32. goto :end
  33. )
  34. where pip >nul 2>&1
  35. if errorlevel 1 (
  36. echo Hinweis: pip nicht gefunden. Abhaengigkeiten muessen manuell installiert werden.
  37. ) else (
  38. if exist "requirements.txt" (
  39. echo Installiere Abhaengigkeiten aus requirements.txt...
  40. pip install -r requirements.txt
  41. ) else (
  42. echo Keine requirements.txt gefunden, ueberspringe.
  43. )
  44. )
  45. echo.
  46. REM -------------------------------------------------------
  47. REM Schritt 3: Modus waehlen
  48. REM -------------------------------------------------------
  49. echo [3/7] Modus waehlen
  50. echo.
  51. echo Welchen Modus moechtest du installieren?
  52. echo [1] Server - Zentraler Server fuer Satellite-Management
  53. echo [2] Standalone - All-in-One ohne Server
  54. echo [3] Client - Leichtgewichtiger Satellite
  55. echo.
  56. :mode_select
  57. set /p "MODE_CHOICE= Auswahl [1/2/3]: "
  58. if "%MODE_CHOICE%"=="1" (
  59. set "MODE=server"
  60. set "CONFIG_FILE=config\server_config.json"
  61. goto :mode_done
  62. )
  63. if "%MODE_CHOICE%"=="2" (
  64. set "MODE=standalone"
  65. set "CONFIG_FILE=config\standalone_config.json"
  66. goto :mode_done
  67. )
  68. if "%MODE_CHOICE%"=="3" (
  69. set "MODE=client"
  70. set "CONFIG_FILE=config\client_config.json"
  71. goto :mode_done
  72. )
  73. echo Ungueltige Auswahl. Bitte 1, 2 oder 3 eingeben.
  74. goto :mode_select
  75. :mode_done
  76. echo.
  77. REM -------------------------------------------------------
  78. REM Schritt 4: Device-Name abfragen
  79. REM -------------------------------------------------------
  80. echo [4/7] Geraetename festlegen
  81. echo Aktueller Hostname: %COMPUTERNAME%
  82. set "DEVICE_NAME="
  83. set /p "DEVICE_NAME= Neuer Geraetename (leer = beibehalten): "
  84. if not "%DEVICE_NAME%"=="" (
  85. echo Setze Hostname auf: %DEVICE_NAME%
  86. WMIC computersystem where name="%COMPUTERNAME%" call rename name="%DEVICE_NAME%" >nul 2>&1
  87. if errorlevel 1 (
  88. echo Hinweis: Hostname konnte nicht gesetzt werden. Starte als Administrator.
  89. ) else (
  90. echo Hostname geaendert. Wird nach Neustart wirksam.
  91. )
  92. ) else (
  93. set "DEVICE_NAME=%COMPUTERNAME%"
  94. )
  95. echo.
  96. REM -------------------------------------------------------
  97. REM Schritt 5: Modus-spezifische Abfragen
  98. REM -------------------------------------------------------
  99. echo [5/7] Konfiguration fuer Modus: %MODE%
  100. echo.
  101. set "ALIAS="
  102. set "ROOM="
  103. set "HOST="
  104. set "PORT=2101"
  105. set "NETWORK_MODE="
  106. if "%MODE%"=="client" goto :config_client
  107. if "%MODE%"=="standalone" goto :config_standalone
  108. if "%MODE%"=="server" goto :config_server
  109. goto :config_done
  110. :config_client
  111. set /p "ALIAS= Alias (Satellite-Name): "
  112. set /p "ROOM= Raum-Kennung: "
  113. set /p "HOST= Server-Host (IP-Adresse): "
  114. echo.
  115. set /p "CUSTOM_PORT= Eigenen Port verwenden? [j/n]: "
  116. if /i "%CUSTOM_PORT%"=="j" (
  117. set /p "PORT= Port-Nummer: "
  118. )
  119. echo Schreibe %CONFIG_FILE%...
  120. 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()"
  121. echo Konfiguration geschrieben.
  122. goto :config_done
  123. :config_standalone
  124. set /p "ALIAS= Alias: "
  125. set /p "ROOM= Raum-Kennung: "
  126. echo Schreibe %CONFIG_FILE%...
  127. 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()"
  128. echo Konfiguration geschrieben.
  129. goto :config_done
  130. :config_server
  131. echo Netzwerk-Konfiguration:
  132. echo [1] Normales Netzwerk - Server laeuft im bestehenden LAN
  133. echo [2] WiFi-Hotspot - Nur unter Linux verfuegbar
  134. echo.
  135. :net_select
  136. set /p "NET_CHOICE= Auswahl [1/2]: "
  137. if "%NET_CHOICE%"=="1" (
  138. set "NETWORK_MODE=LAN"
  139. set "BIND_ADDRESS=0.0.0.0"
  140. goto :net_done
  141. )
  142. if "%NET_CHOICE%"=="2" (
  143. echo.
  144. echo HINWEIS: WiFi-Hotspot wird nur unter Linux unterstuetzt.
  145. echo Fahre mit normalem Netzwerk fort.
  146. set "NETWORK_MODE=LAN"
  147. set "BIND_ADDRESS=0.0.0.0"
  148. goto :net_done
  149. )
  150. echo Ungueltige Auswahl.
  151. goto :net_select
  152. :net_done
  153. echo Schreibe %CONFIG_FILE%...
  154. 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()"
  155. echo Konfiguration geschrieben.
  156. goto :config_done
  157. :config_done
  158. echo.
  159. REM -------------------------------------------------------
  160. REM Schritt 6: Autostart / Dienst einrichten
  161. REM -------------------------------------------------------
  162. echo [6/7] Startmethode waehlen
  163. echo.
  164. echo Wie soll Trixy gestartet werden?
  165. echo [1] Autostart - Startet beim Login des Benutzers
  166. echo [2] Dienst - Als Windows-Dienst (erfordert NSSM)
  167. echo.
  168. set "START_METHOD="
  169. :start_select
  170. set /p "START_CHOICE= Auswahl [1/2]: "
  171. if "%START_CHOICE%"=="1" (
  172. set "START_METHOD=Autostart"
  173. goto :start_done
  174. )
  175. if "%START_CHOICE%"=="2" (
  176. set "START_METHOD=Dienst"
  177. goto :start_done
  178. )
  179. echo Ungueltige Auswahl.
  180. goto :start_select
  181. :start_done
  182. REM Config-Pfad fuer Startskript (Backslash durch Forward-Slash ersetzen fuer Python)
  183. set "CONFIG_FILE_FWD=%CONFIG_FILE:\=/%"
  184. if "%START_METHOD%"=="Autostart" (
  185. set "STARTUP_DIR=%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup"
  186. echo @echo off> "!STARTUP_DIR!\trixy.bat"
  187. echo cd /d "%PROJECT_DIR%">> "!STARTUP_DIR!\trixy.bat"
  188. echo call run_windows.bat %MODE% --config %CONFIG_FILE%>> "!STARTUP_DIR!\trixy.bat"
  189. echo Autostart-Eintrag erstellt: !STARTUP_DIR!\trixy.bat
  190. )
  191. if "%START_METHOD%"=="Dienst" (
  192. echo.
  193. echo Windows-Dienste benoetigen NSSM (Non-Sucking Service Manager).
  194. echo Download: https://nssm.cc/download
  195. echo.
  196. where nssm >nul 2>&1
  197. if errorlevel 1 (
  198. echo NSSM nicht gefunden. Erstelle Autostart-Eintrag als Alternative...
  199. set "STARTUP_DIR=%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup"
  200. echo @echo off> "!STARTUP_DIR!\trixy.bat"
  201. echo cd /d "%PROJECT_DIR%">> "!STARTUP_DIR!\trixy.bat"
  202. echo call run_windows.bat %MODE% --config %CONFIG_FILE%>> "!STARTUP_DIR!\trixy.bat"
  203. echo Autostart-Eintrag erstellt: !STARTUP_DIR!\trixy.bat
  204. echo Fuer echten Dienst: nssm install Trixy "%PROJECT_DIR%\run_windows.bat" %MODE% --config %CONFIG_FILE%
  205. ) else (
  206. echo Erstelle Windows-Dienst mit NSSM...
  207. nssm install Trixy "%PROJECT_DIR%\run_windows.bat" %MODE% --config %CONFIG_FILE%
  208. nssm set Trixy AppDirectory "%PROJECT_DIR%"
  209. nssm set Trixy Description "Trixy Voice Assistant"
  210. nssm set Trixy Start SERVICE_AUTO_START
  211. echo Dienst 'Trixy' erstellt und auf Autostart gesetzt.
  212. )
  213. )
  214. echo.
  215. REM -------------------------------------------------------
  216. REM Schritt 7: Zusammenfassung
  217. REM -------------------------------------------------------
  218. echo [7/7] Zusammenfassung
  219. echo.
  220. echo ========================================
  221. echo Trixy Installation - Zusammenfassung
  222. echo ========================================
  223. echo Modus: %MODE%
  224. echo Device-Name: %DEVICE_NAME%
  225. if "%MODE%"=="client" (
  226. echo Alias: %ALIAS%
  227. echo Raum: %ROOM%
  228. echo Server: %HOST%:%PORT%
  229. )
  230. if "%MODE%"=="standalone" (
  231. echo Alias: %ALIAS%
  232. echo Raum: %ROOM%
  233. )
  234. if "%MODE%"=="server" (
  235. echo Netzwerk: %NETWORK_MODE%
  236. )
  237. echo Start-Methode: %START_METHOD%
  238. echo Config-Datei: %CONFIG_FILE%
  239. echo ========================================
  240. echo Installation abgeschlossen!
  241. echo Starte mit: run_windows.bat %MODE%
  242. echo ========================================
  243. echo.
  244. :end
  245. popd
  246. endlocal
  247. pause