New files: - prompts/win.md: Complete Windows execution guide covering build dependencies (libpq), compilation steps, runtime compatibility table (3rdparty.toml Windows URLs), shell command adaptations, GPU detection for LLM, directory structure, and troubleshooting - DEPENDENCIES.ps1: PowerShell script to auto-install PostgreSQL binaries and set PQ_LIB_DIR for Windows builds - restart.ps1: PowerShell restart script for Windows dev env Submodule updates: - botserver: Full Windows compatibility (21 files changed) including 3rdparty.toml Windows URLs, installer/cache/facade Windows process management, certificate generation, #[cfg(unix)] guards, and clippy zero-warnings refactors - bottest: #[cfg(unix)] guards for nix crate in postgres.rs, minio.rs, redis.rs service managers - botapp: Remove unused import (clippy auto-fix) Config: - .cargo/config.toml: Updated for Windows toolchain - Cargo.lock: Dependency updates
244 lines
7.4 KiB
Markdown
244 lines
7.4 KiB
Markdown
# General Bots — Plano de Execução no Windows
|
|
|
|
## Pré-requisitos
|
|
|
|
- Windows 10/11 (x64)
|
|
- Visual Studio Build Tools (com C++ workload) ou Visual Studio
|
|
- Rust toolchain (`rustup` com `stable-x86_64-pc-windows-msvc`)
|
|
- Git para Windows
|
|
|
|
---
|
|
|
|
## 1. Dependências de Build
|
|
|
|
### 1.1 PostgreSQL (libpq.lib para Diesel ORM)
|
|
|
|
O BotServer usa Diesel com backend Postgres. No Windows, o linker precisa de `libpq.lib`.
|
|
|
|
```powershell
|
|
# Baixar binários do PostgreSQL (não precisa instalar o serviço)
|
|
Invoke-WebRequest -Uri "https://get.enterprisedb.com/postgresql/postgresql-17.4-1-windows-x64-binaries.zip" -OutFile "$env:TEMP\pgsql.zip" -UseBasicParsing
|
|
|
|
# Extrair para C:\pgsql
|
|
Expand-Archive -Path "$env:TEMP\pgsql.zip" -DestinationPath "C:\pgsql" -Force
|
|
|
|
# Configurar variável de ambiente permanente
|
|
[System.Environment]::SetEnvironmentVariable("PQ_LIB_DIR", "C:\pgsql\pgsql\lib", "User")
|
|
$env:PQ_LIB_DIR = "C:\pgsql\pgsql\lib"
|
|
$env:PATH = "C:\pgsql\pgsql\bin;$env:PATH"
|
|
```
|
|
|
|
Ou simplesmente execute:
|
|
```powershell
|
|
.\DEPENDENCIES.ps1
|
|
```
|
|
|
|
### 1.2 sccache (opcional)
|
|
|
|
O `.cargo/config.toml` referencia `sccache`. Se não estiver instalado, comente a linha:
|
|
```toml
|
|
# [build]
|
|
# rustc-wrapper = "sccache"
|
|
```
|
|
|
|
---
|
|
|
|
## 2. Compilação
|
|
|
|
```powershell
|
|
# Garantir que PQ_LIB_DIR está configurado
|
|
$env:PQ_LIB_DIR = "C:\pgsql\pgsql\lib"
|
|
|
|
# Build do botserver
|
|
cargo build -p botserver
|
|
|
|
# Build do botui (interface desktop Tauri)
|
|
cargo build -p botui
|
|
```
|
|
|
|
### Correções de compilação aplicadas
|
|
|
|
| Arquivo | Problema | Correção |
|
|
|---------|----------|----------|
|
|
| `bootstrap.rs` | `use std::os::unix::fs::PermissionsExt` | Envolvido com `#[cfg(unix)]` |
|
|
| `antivirus.rs` | `error!` macro não importada | Adicionado `use tracing::error` |
|
|
| `installer.rs` | `check_root()` só existe no Unix | Adicionado `check_admin()` para Windows com `#[cfg(windows)]` |
|
|
| `installer.rs` | `SUDOERS_CONTENT` não usado no Windows | Envolvido com `#[cfg(not(windows))]` |
|
|
| `facade.rs` | `make_executable` param `path` não usado | Renomeado para `_path` no Windows |
|
|
|
|
---
|
|
|
|
## 3. Compatibilidade de Runtime (3rdparty.toml)
|
|
|
|
O `3rdparty.toml` agora tem entradas `_windows` para cada componente:
|
|
|
|
| Componente | Linux | Windows |
|
|
|------------|-------|---------|
|
|
| `drive` | `minio` (linux-amd64) | `minio.exe` (windows-amd64) |
|
|
| `tables` | `postgresql-*-linux-gnu.tar.gz` | `postgresql-*-windows-x64-binaries.zip` |
|
|
| `cache` | `valkey-*-jammy-x86_64.tar.gz` | `memurai-developer.msi` |
|
|
| `llm` | `llama-*-ubuntu-x64.zip` | `llama-*-win-cpu-x64.zip` (ou CUDA/Vulkan) |
|
|
| `email` | `stalwart-mail-*-linux.tar.gz` | `stalwart-mail-*-windows.zip` |
|
|
| `proxy` | `caddy_*_linux_amd64.tar.gz` | `caddy_*_windows_amd64.zip` |
|
|
| `directory` | `zitadel-linux-amd64.tar.gz` | `zitadel-windows-amd64.zip` |
|
|
| `alm` | `forgejo-*-linux-amd64` | `forgejo-*-windows-amd64.exe` |
|
|
| `alm_ci` | `forgejo-runner-*-linux-amd64` | `forgejo-runner-*-windows-amd64.exe` |
|
|
| `dns` | `coredns_*_linux_amd64.tgz` | `coredns_*_windows_amd64.tgz` |
|
|
| `meet` | `livekit_*_linux_amd64.tar.gz` | `livekit_*_windows_amd64.zip` |
|
|
| `table_editor` | `nocodb-linux-x64` | `nocodb-win-x64.exe` |
|
|
| `vector_db` | `qdrant-*-linux-gnu.tar.gz` | `qdrant-*-windows-msvc.zip` |
|
|
| `timeseries_db` | `influxdb2-*-linux-amd64.tar.gz` | `influxdb2-*-windows-amd64.zip` |
|
|
| `vault` | `vault_*_linux_amd64.zip` | `vault_*_windows_amd64.zip` |
|
|
| `observability` | `vector-*-linux-gnu.tar.gz` | `vector-*-windows-msvc.zip` |
|
|
|
|
A seleção é automática via `get_component_url()` em `installer.rs` que busca `{name}_windows` primeiro.
|
|
|
|
---
|
|
|
|
## 4. Adaptações de Código para Windows
|
|
|
|
### 4.1 Execução de Comandos Shell
|
|
|
|
| Contexto | Linux | Windows |
|
|
|----------|-------|---------|
|
|
| `run_commands_with_password()` | `bash -c "{cmd}"` | `powershell -NoProfile -Command "{cmd}"` |
|
|
| `start()` (spawnar processos) | `sh -c "{exec_cmd}"` | `powershell -NoProfile -Command "{exec_cmd}"` |
|
|
| `safe_sh_command()` | `sh -c` | `powershell -NoProfile -Command` |
|
|
|
|
### 4.2 Gerenciamento de Processos
|
|
|
|
| Ação | Linux | Windows |
|
|
|------|-------|---------|
|
|
| Matar processos | `pkill -9 -f {name}` | `taskkill /F /IM {name}*` |
|
|
| Verificar processo | `pgrep -f {name}` | `Get-Process \| Where-Object { $_.ProcessName -like '*{name}*' }` |
|
|
|
|
### 4.3 Health Checks (fallback quando curl não está disponível)
|
|
|
|
| Check | Linux | Windows |
|
|
|-------|-------|---------|
|
|
| Porta aberta | `nc -z -w 1 127.0.0.1 {port}` | `(Test-NetConnection -ComputerName 127.0.0.1 -Port {port}).TcpTestSucceeded` |
|
|
|
|
### 4.4 Extração de Arquivos
|
|
|
|
| Formato | Linux | Windows |
|
|
|---------|-------|---------|
|
|
| `.zip` | `unzip -o -q {file}` | `Expand-Archive -Path '{file}' -DestinationPath '{dest}' -Force` |
|
|
| `.tar.gz` | `tar -xzf {file}` | `tar -xzf {file}` (Windows 10+ tem tar nativo) |
|
|
|
|
---
|
|
|
|
## 5. Execução
|
|
|
|
### 5.1 Modo CLI (gerenciar componentes)
|
|
```powershell
|
|
$env:PQ_LIB_DIR = "C:\pgsql\pgsql\lib"
|
|
$env:PATH = "C:\pgsql\pgsql\bin;$env:PATH"
|
|
|
|
# Instalar um componente específico
|
|
.\target\debug\botserver.exe install vault
|
|
|
|
# Listar componentes
|
|
.\target\debug\botserver.exe list
|
|
|
|
# Iniciar componentes
|
|
.\target\debug\botserver.exe start
|
|
|
|
# Ver status
|
|
.\target\debug\botserver.exe status
|
|
```
|
|
|
|
### 5.2 Modo Servidor (bootstrap completo + HTTP)
|
|
```powershell
|
|
$env:PQ_LIB_DIR = "C:\pgsql\pgsql\lib"
|
|
$env:PATH = "C:\pgsql\pgsql\bin;$env:PATH"
|
|
|
|
# Executa bootstrap (baixa/instala todos os componentes) + inicia servidor HTTP
|
|
.\target\debug\botserver.exe
|
|
```
|
|
|
|
O bootstrap automático:
|
|
1. Baixa e instala Vault, PostgreSQL, Valkey, MinIO, Zitadel, LLM, etc.
|
|
2. Gera certificados TLS
|
|
3. Inicializa o banco de dados
|
|
4. Inicia o servidor HTTP na porta **5858**
|
|
|
|
Acesse: **http://localhost:5858**
|
|
|
|
### 5.3 Via restart.ps1
|
|
```powershell
|
|
.\restart.ps1
|
|
```
|
|
|
|
---
|
|
|
|
## 6. Detecção Automática de GPU (LLM)
|
|
|
|
O sistema detecta automaticamente:
|
|
- **CUDA 13.x** → `llama-*-win-cuda-13.1-x64.zip`
|
|
- **CUDA 12.x** → `llama-*-win-cuda-12.4-x64.zip`
|
|
- **Vulkan SDK** → `llama-*-win-vulkan-x64.zip`
|
|
- **CPU only** → `llama-*-win-cpu-x64.zip`
|
|
- **ARM64** → `llama-*-win-cpu-arm64.zip`
|
|
|
|
---
|
|
|
|
## 7. Estrutura de Diretórios
|
|
|
|
```
|
|
botserver-stack/
|
|
├── bin/ # Binários dos componentes
|
|
│ ├── vault/
|
|
│ ├── tables/ # PostgreSQL
|
|
│ ├── cache/ # Valkey/Memurai
|
|
│ ├── drive/ # MinIO
|
|
│ ├── directory/ # Zitadel
|
|
│ ├── llm/ # llama.cpp
|
|
│ └── ...
|
|
├── conf/ # Configurações
|
|
│ ├── vault/
|
|
│ ├── system/certificates/
|
|
│ └── ...
|
|
├── data/ # Dados persistentes
|
|
│ ├── vault/
|
|
│ ├── tables/pgdata/
|
|
│ └── ...
|
|
└── logs/ # Logs de cada componente
|
|
├── vault/
|
|
├── tables/
|
|
└── ...
|
|
|
|
botserver-installers/ # Cache de downloads (reutilizado)
|
|
```
|
|
|
|
---
|
|
|
|
## 8. Troubleshooting
|
|
|
|
### Erro: `LNK1181: libpq.lib não encontrado`
|
|
```powershell
|
|
$env:PQ_LIB_DIR = "C:\pgsql\pgsql\lib"
|
|
# Ou execute .\DEPENDENCIES.ps1
|
|
```
|
|
|
|
### Erro: `sccache não encontrado`
|
|
Comente no `.cargo/config.toml`:
|
|
```toml
|
|
# [build]
|
|
# rustc-wrapper = "sccache"
|
|
```
|
|
|
|
### Erro: `Path traversal detected`
|
|
Limpe o cache e recompile:
|
|
```powershell
|
|
Remove-Item -Path ".\botserver-stack" -Recurse -Force
|
|
Remove-Item -Path ".\botserver-installers" -Recurse -Force
|
|
cargo clean -p botserver
|
|
cargo build -p botserver
|
|
```
|
|
|
|
### Componentes baixam versão Linux
|
|
Recompile o botserver para que o `3rdparty.toml` embutido seja atualizado:
|
|
```powershell
|
|
cargo clean -p botserver
|
|
cargo build -p botserver
|
|
```
|