Autarch/scripts/build-windows.sh

267 lines
9.7 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# ───────────────────────────────────────────────────────────────
# AUTARCH Windows Package Builder
#
# Creates a standalone Windows-ready ZIP with:
# - All Python source + web assets
# - Batch launcher (autarch.bat)
# - PowerShell installer (install.ps1)
# - requirements.txt for pip install
# - Placeholder for Windows tools
#
# Usage: bash scripts/build-windows.sh [version]
# Output: dist/autarch_{version}_windows.zip
#
# NOTE: This builds a SOURCE distribution, not a frozen .exe.
# The install.ps1 script handles Python venv + dependency install.
# For a frozen .exe, run PyInstaller ON a Windows machine.
# ───────────────────────────────────────────────────────────────
set -euo pipefail
APP_NAME="autarch"
SRC_DIR="$(cd "$(dirname "$0")/.." && pwd)"
# ── Determine version ────────────────────────────────────────
if [[ ${1:-} ]]; then
VERSION="$1"
else
VERSION="$(grep -m1 '^VERSION' "$SRC_DIR/autarch.py" | sed 's/.*"\(.*\)".*/\1/')"
if [[ -z "$VERSION" ]]; then
echo "ERROR: Could not extract VERSION from autarch.py" >&2
exit 1
fi
fi
echo "Building ${APP_NAME} ${VERSION} for Windows"
# ── Paths ─────────────────────────────────────────────────────
DIST_DIR="$SRC_DIR/dist"
BUILD_DIR="$DIST_DIR/.win-build"
STAGE="$BUILD_DIR/${APP_NAME}_${VERSION}_windows"
# Clean
rm -rf "$STAGE"
mkdir -p "$STAGE"
# ── Copy application files ────────────────────────────────────
echo "Copying application files..."
# Core
cp "$SRC_DIR/autarch.py" "$STAGE/"
cp "$SRC_DIR/requirements.txt" "$STAGE/"
# Config
cp "$SRC_DIR/autarch_settings.conf" "$STAGE/autarch_settings.conf"
cp "$SRC_DIR/autarch_settings.conf" "$STAGE/autarch_settings.conf.default"
# User files
cp "$SRC_DIR/custom_sites.inf" "$STAGE/"
cp "$SRC_DIR/custom_adultsites.json" "$STAGE/"
# Documentation
[[ -f "$SRC_DIR/GUIDE.md" ]] && cp "$SRC_DIR/GUIDE.md" "$STAGE/"
[[ -f "$SRC_DIR/user_manual.md" ]] && cp "$SRC_DIR/user_manual.md" "$STAGE/"
# Directory trees
for dir in core modules web; do
cp -a "$SRC_DIR/$dir" "$STAGE/"
done
# Data (sites db etc.)
cp -a "$SRC_DIR/data" "$STAGE/"
# Config templates
if [[ -d "$SRC_DIR/.config" ]]; then
cp -a "$SRC_DIR/.config" "$STAGE/"
fi
# Windows tools directory (placeholder — user downloads nmap/tshark etc.)
mkdir -p "$STAGE/tools/windows-x86_64"
# Companion APK
APK="$SRC_DIR/autarch_companion/app/build/outputs/apk/debug/app-debug.apk"
if [[ -f "$APK" ]]; then
mkdir -p "$STAGE/companion"
cp "$APK" "$STAGE/companion/archon.apk"
fi
# ── Strip excluded files ──────────────────────────────────────
echo "Stripping excluded files..."
find "$STAGE" -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
find "$STAGE" -name "*.pyc" -delete 2>/dev/null || true
find "$STAGE" -name "*.bk" -delete 2>/dev/null || true
rm -rf "$STAGE/.claude" "$STAGE/node_modules" "$STAGE/src"
rm -f "$STAGE"/*_profiles.json
rm -f "$STAGE/system.inf" "$STAGE/backupexec_dump.mtf"
rm -f "$STAGE/DEVLOG.md" "$STAGE/devjournal.md" "$STAGE/autarch_dev.md"
rm -f "$STAGE/android_plan.md" "$STAGE/master_plan.md"
rm -f "$STAGE/package.json" "$STAGE/package-lock.json" "$STAGE/.gitignore"
for datadir in results dossiers data/captures data/exports data/hardware data/pentest_sessions data/uploads; do
rm -rf "$STAGE/$datadir"
done
# ── Create Windows launcher (autarch.bat) ─────────────────────
cat > "$STAGE/autarch.bat" <<'BAT'
@echo off
REM AUTARCH Launcher for Windows
REM Uses Python virtual environment if available, falls back to system Python
setlocal
set "APP_DIR=%~dp0"
if exist "%APP_DIR%venv\Scripts\python.exe" (
"%APP_DIR%venv\Scripts\python.exe" "%APP_DIR%autarch.py" %*
) else (
python "%APP_DIR%autarch.py" %*
)
endlocal
BAT
# ── Create web dashboard launcher ─────────────────────────────
cat > "$STAGE/start-web.bat" <<'BAT'
@echo off
REM Start AUTARCH Web Dashboard
setlocal
set "APP_DIR=%~dp0"
echo Starting AUTARCH Web Dashboard...
echo Open your browser to: http://localhost:8181
echo Press Ctrl+C to stop.
echo.
if exist "%APP_DIR%venv\Scripts\python.exe" (
"%APP_DIR%venv\Scripts\python.exe" "%APP_DIR%autarch.py" --web %*
) else (
python "%APP_DIR%autarch.py" --web %*
)
endlocal
BAT
# ── Create installer script (PowerShell) ──────────────────────
cat > "$STAGE/install.ps1" <<'PS1'
# AUTARCH Windows Installer
# Run: powershell -ExecutionPolicy Bypass -File install.ps1
Write-Host ""
Write-Host "================================" -ForegroundColor Green
Write-Host " AUTARCH Installer for Windows" -ForegroundColor Green
Write-Host "================================" -ForegroundColor Green
Write-Host ""
$AppDir = Split-Path -Parent $MyInvocation.MyCommand.Path
# Check Python
$python = Get-Command python -ErrorAction SilentlyContinue
if (-not $python) {
Write-Host "ERROR: Python not found. Install Python 3.10+ from python.org" -ForegroundColor Red
Write-Host "Make sure to check 'Add Python to PATH' during installation." -ForegroundColor Yellow
exit 1
}
$pyVer = python --version 2>&1
Write-Host "Found: $pyVer" -ForegroundColor Cyan
# Create virtual environment
$venvDir = Join-Path $AppDir "venv"
if (-not (Test-Path $venvDir)) {
Write-Host "Creating Python virtual environment..." -ForegroundColor Yellow
python -m venv $venvDir
}
# Install dependencies
$pip = Join-Path $venvDir "Scripts\pip.exe"
Write-Host "Installing dependencies..." -ForegroundColor Yellow
& $pip install --quiet --upgrade pip
& $pip install --quiet -r (Join-Path $AppDir "requirements.txt")
# Create data directories
$dataDirs = @("results", "dossiers", "data\captures", "data\exports",
"data\hardware", "data\pentest_sessions", "data\uploads")
foreach ($d in $dataDirs) {
$path = Join-Path $AppDir $d
if (-not (Test-Path $path)) {
New-Item -ItemType Directory -Path $path -Force | Out-Null
}
}
# Create desktop shortcut
$desktop = [Environment]::GetFolderPath("Desktop")
$shortcutPath = Join-Path $desktop "AUTARCH.lnk"
$shell = New-Object -ComObject WScript.Shell
$shortcut = $shell.CreateShortcut($shortcutPath)
$shortcut.TargetPath = Join-Path $AppDir "autarch.bat"
$shortcut.WorkingDirectory = $AppDir
$shortcut.Description = "AUTARCH Security Platform"
$shortcut.Save()
Write-Host ""
Write-Host "================================" -ForegroundColor Green
Write-Host " Installation complete!" -ForegroundColor Green
Write-Host "================================" -ForegroundColor Green
Write-Host ""
Write-Host "Run AUTARCH:" -ForegroundColor Cyan
Write-Host " CLI: autarch.bat" -ForegroundColor White
Write-Host " Web: start-web.bat" -ForegroundColor White
Write-Host " Manual: python autarch.py --manual" -ForegroundColor White
Write-Host ""
Write-Host "Desktop shortcut created." -ForegroundColor Yellow
Write-Host ""
PS1
# ── Create README for Windows ─────────────────────────────────
cat > "$STAGE/README-WINDOWS.txt" <<'README'
AUTARCH for Windows
===================
Quick Start:
1. Run install.ps1 (right-click > Run with PowerShell)
This creates a Python environment and installs dependencies.
2. Double-click autarch.bat to start the CLI menu.
Or double-click start-web.bat for the browser dashboard.
Requirements:
- Python 3.10 or newer (python.org - check "Add to PATH")
- Windows 10 or newer
Optional Tools (place in tools\windows-x86_64\):
- nmap.exe (nmap.org)
- tshark.exe (wireshark.org)
- wg.exe (wireguard.com)
Manual:
python autarch.py --manual (in terminal)
Open user_manual.md (any text editor/Markdown viewer)
http://localhost:8181/manual (when web dashboard is running)
Companion App:
The Archon Android companion app APK is in the companion\ folder.
Install it on your phone via ADB or file transfer.
README
# ── Create the ZIP ────────────────────────────────────────────
echo "Creating ZIP archive..."
mkdir -p "$DIST_DIR"
ZIP_NAME="${APP_NAME}_${VERSION}_windows.zip"
ZIP_OUT="$DIST_DIR/$ZIP_NAME"
(cd "$BUILD_DIR" && zip -r -q "$ZIP_OUT" "$(basename "$STAGE")")
# ── Clean up ──────────────────────────────────────────────────
rm -rf "$BUILD_DIR"
# ── Summary ───────────────────────────────────────────────────
ZIP_SIZE=$(du -h "$ZIP_OUT" | cut -f1)
echo ""
echo "════════════════════════════════════════════════════"
echo " Package: $ZIP_OUT"
echo " Size: $ZIP_SIZE"
echo "════════════════════════════════════════════════════"
echo ""
echo "Transfer this ZIP to a Windows machine and run install.ps1"