botserver/docs/src/chapter-07-gbapp/building.md

532 lines
8.9 KiB
Markdown
Raw Normal View History

2025-11-21 10:44:29 -03:00
# Building from Source
2025-11-21 10:44:29 -03:00
This guide covers building BotServer from source, including dependencies, feature flags, and platform-specific considerations.
2025-11-21 10:44:29 -03:00
## Prerequisites
2025-11-21 10:44:29 -03:00
### System Requirements
2025-11-21 10:44:29 -03:00
- **Operating System**: Linux, macOS, or Windows
- **Rust**: 1.70 or later (2021 edition)
- **Memory**: 4GB RAM minimum (8GB recommended)
2025-11-24 08:42:58 -03:00
- **Disk Space**: 8GB for development environment
2025-11-21 10:44:29 -03:00
### Install Rust
If you don't have Rust installed:
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
```
Verify installation:
```bash
rustc --version
cargo --version
```
### System Dependencies
#### Linux (Ubuntu/Debian)
```bash
sudo apt update
sudo apt install -y \
build-essential \
pkg-config \
libssl-dev \
2025-11-21 10:44:29 -03:00
libpq-dev \
cmake
```
#### Linux (Fedora/RHEL)
```bash
sudo dnf install -y \
gcc \
gcc-c++ \
make \
pkg-config \
2025-11-21 10:44:29 -03:00
openssl-devel \
postgresql-devel \
cmake
```
#### macOS
```bash
brew install postgresql openssl cmake
```
#### Windows
Install Visual Studio Build Tools with C++ support, then:
```powershell
# Install PostgreSQL (for libpq)
choco install postgresql
```
## Clone Repository
```bash
git clone https://github.com/GeneralBots/BotServer.git
cd BotServer
```
## Build Configurations
### Standard Build
Build with default features (includes desktop support):
```bash
cargo build --release
```
The compiled binary will be at `target/release/botserver`.
### Minimal Build
Build without any optional features:
```bash
cargo build --release --no-default-features
```
This excludes:
- Desktop GUI (Tauri)
- Vector database (Qdrant)
- Email integration (IMAP)
### Feature-Specific Builds
#### With Vector Database
Enable Qdrant vector database support:
```bash
cargo build --release --features vectordb
```
#### With Email Support
Enable IMAP email integration:
```bash
cargo build --release --features email
```
#### Desktop Application
Build as desktop app with Tauri (default):
```bash
cargo build --release --features desktop
```
#### All Features
Build with all optional features:
```bash
cargo build --release --all-features
```
## Feature Flags
BotServer supports the following features defined in `Cargo.toml`:
```toml
[features]
default = ["desktop"]
vectordb = ["qdrant-client"]
email = ["imap"]
desktop = ["dep:tauri", "dep:tauri-plugin-dialog", "dep:tauri-plugin-opener"]
```
### Feature Details
| Feature | Dependencies | Purpose |
|---------|--------------|---------|
| `desktop` | tauri, tauri-plugin-dialog, tauri-plugin-opener | Native desktop application with system integration |
| `vectordb` | qdrant-client | Semantic search with Qdrant vector database |
| `email` | imap | IMAP email integration for reading emails |
## Build Profiles
### Debug Build
For development with debug symbols and no optimizations:
```bash
cargo build
```
Binary location: `target/debug/botserver`
### Release Build
Optimized for production with LTO and size optimization:
```bash
cargo build --release
```
Binary location: `target/release/botserver`
The release profile in `Cargo.toml` uses aggressive optimization:
```toml
[profile.release]
lto = true # Link-time optimization
opt-level = "z" # Optimize for size
strip = true # Strip symbols
panic = "abort" # Abort on panic (smaller binary)
codegen-units = 1 # Better optimization (slower build)
```
## Platform-Specific Builds
### Linux
Standard build works on most distributions:
```bash
cargo build --release
```
For static linking (portable binary):
```bash
RUSTFLAGS='-C target-feature=+crt-static' cargo build --release --target x86_64-unknown-linux-gnu
```
### macOS
Build for current architecture:
```bash
cargo build --release
```
Build universal binary (Intel + Apple Silicon):
```bash
rustup target add x86_64-apple-darwin aarch64-apple-darwin
cargo build --release --target x86_64-apple-darwin
cargo build --release --target aarch64-apple-darwin
lipo -create \
target/x86_64-apple-darwin/release/botserver \
target/aarch64-apple-darwin/release/botserver \
-output botserver-universal
```
### Windows
Build with MSVC toolchain:
```bash
cargo build --release
```
Binary location: `target\release\botserver.exe`
## Cross-Compilation
### Install Cross-Compilation Tools
```bash
cargo install cross
```
### Build for Linux from macOS/Windows
```bash
cross build --release --target x86_64-unknown-linux-gnu
```
### Build for Windows from Linux/macOS
```bash
cross build --release --target x86_64-pc-windows-gnu
```
## Troubleshooting
### OpenSSL Errors
If you encounter OpenSSL linking errors:
**Linux:**
```bash
sudo apt install libssl-dev
```
**macOS:**
```bash
export OPENSSL_DIR=$(brew --prefix openssl)
cargo build --release
```
**Windows:**
```bash
# Use vcpkg
vcpkg install openssl:x64-windows
set OPENSSL_DIR=C:\vcpkg\installed\x64-windows
cargo build --release
```
### PostgreSQL Library Errors
If libpq is not found:
**Linux:**
```bash
sudo apt install libpq-dev
```
**macOS:**
```bash
brew install postgresql
export PQ_LIB_DIR=$(brew --prefix postgresql)/lib
```
**Windows:**
```bash
# Ensure PostgreSQL is in PATH
set PQ_LIB_DIR=C:\Program Files\PostgreSQL\15\lib
```
### Out of Memory During Build
Reduce parallel jobs:
```bash
cargo build --release -j 2
```
Or limit memory per job:
```bash
CARGO_BUILD_JOBS=2 cargo build --release
```
### Linker Errors
Ensure you have a C/C++ compiler:
**Linux:**
```bash
sudo apt install build-essential
```
**macOS:**
```bash
xcode-select --install
```
**Windows:**
Install Visual Studio Build Tools with C++ support.
## Verify Build
After building, verify the binary works:
```bash
./target/release/botserver --version
```
Expected output: `botserver 6.0.8` or similar.
## Development Builds
### Watch Mode
Auto-rebuild on file changes:
```bash
cargo install cargo-watch
cargo watch -x 'build --release'
```
### Check Without Building
Fast syntax and type checking:
```bash
cargo check
```
With specific features:
```bash
cargo check --features vectordb,email
```
## Testing
### Run All Tests
```bash
cargo test
```
### Run Tests for Specific Module
```bash
cargo test --package botserver --lib bootstrap::tests
```
### Run Integration Tests
```bash
cargo test --test '*'
```
## Code Quality
### Format Code
```bash
cargo fmt
```
### Lint Code
```bash
cargo clippy -- -D warnings
```
### Check Dependencies
```bash
cargo tree
```
Find duplicate dependencies:
```bash
cargo tree --duplicates
```
2025-11-24 08:42:58 -03:00
### Security Audit
Run security audit to check for known vulnerabilities in dependencies:
```bash
cargo install cargo-audit
cargo audit
```
This should be run regularly during development to ensure dependencies are secure.
2025-11-21 10:44:29 -03:00
## Build Artifacts
After a successful release build, you'll have:
- `target/release/botserver` - Main executable
- `target/release/build/` - Build script outputs
- `target/release/deps/` - Compiled dependencies
## Size Optimization
The release profile already optimizes for size. To further reduce:
### Strip Binary Manually
```bash
strip target/release/botserver
```
### Use UPX Compression
```bash
upx --best --lzma target/release/botserver
```
Note: UPX may cause issues with some systems. Test thoroughly.
## Incremental Compilation
For faster development builds:
```bash
export CARGO_INCREMENTAL=1
cargo build
```
Note: This is enabled by default for debug builds.
## Clean Build
Remove all build artifacts:
```bash
cargo clean
```
2025-11-23 13:46:55 -03:00
## LXC Build
2025-11-21 10:44:29 -03:00
2025-11-23 13:46:55 -03:00
Build inside LXC container:
2025-11-21 10:44:29 -03:00
2025-11-23 13:46:55 -03:00
```bash
# Create build container
lxc-create -n botserver-build -t download -- -d ubuntu -r jammy -a amd64
2025-11-21 10:44:29 -03:00
2025-11-23 13:46:55 -03:00
# Configure container with build resources
cat >> /var/lib/lxc/botserver-build/config << EOF
lxc.cgroup2.memory.max = 4G
lxc.cgroup2.cpu.max = 400000 100000
EOF
2025-11-21 10:44:29 -03:00
2025-11-23 13:46:55 -03:00
# Start container
lxc-start -n botserver-build
2025-11-21 10:44:29 -03:00
2025-11-23 13:46:55 -03:00
# Install build dependencies
lxc-attach -n botserver-build -- bash -c "
apt-get update
apt-get install -y build-essential pkg-config libssl-dev libpq-dev cmake curl git
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source \$HOME/.cargo/env
"
2025-11-21 10:44:29 -03:00
2025-11-23 13:46:55 -03:00
# Build BotServer
lxc-attach -n botserver-build -- bash -c "
git clone https://github.com/GeneralBots/BotServer /build
cd /build
source \$HOME/.cargo/env
cargo build --release --no-default-features
"
2025-11-21 10:44:29 -03:00
2025-11-23 13:46:55 -03:00
# Copy binary from container
lxc-attach -n botserver-build -- cat /build/target/release/botserver > /usr/local/bin/botserver
chmod +x /usr/local/bin/botserver
2025-11-21 10:44:29 -03:00
```
## Installation
After building, install system-wide:
```bash
sudo install -m 755 target/release/botserver /usr/local/bin/
```
Or create a symlink:
```bash
ln -s $(pwd)/target/release/botserver ~/.local/bin/botserver
```
## Next Steps
After building:
1. Run the bootstrap process to install dependencies
2. Configure `.env` file with database credentials
3. Start BotServer and access web interface
4. Create your first bot from templates
See [Chapter 01: Run and Talk](../chapter-01/README.md) for next steps.