MVP / Linux + Windows

Installation

Requirements

Component Requirement Purpose
Go 1.21+ All binary builds
C compiler GCC Server SQLite driver (CGO_ENABLED=1)
Python 3 Any recent version Windows agent delivery helper
Linux/amd64 Server and operator machine Verified runtime platform
Windows/amd64 Agent target only Cross-compiled from Linux; no native build needed

The agent can be cross-compiled for Windows with CGO_ENABLED=0. The server requires CGO_ENABLED=1 for the SQLite driver.

Build the Go components

sh
# Server (CGO required for SQLite)
CGO_ENABLED=1 go build -o ./bin/sentrava-server ./cmd/server

# Operator CLI
go build -o ./bin/sentrava-client ./cmd/client

# Stock agent binary (unconfigured — used as base for generate)
go build -o ./bin/sentrava-agent ./cmd/agent

Or use the provided Makefile targets:

sh
make release-server      # builds server with CGO
make build               # builds all three binaries

Windows cross-compilation

The Windows agent requires CGO_ENABLED=0 and the appropriate cross-compilation toolchain. No additional C compiler is needed for the agent; the cross-compiler is only required if you need CGO for custom modules.

sh
# Install the Windows cross-compilation target (Debian/Ubuntu)
sudo apt-get install gcc-mingw-w64-x86-64

# Cross-compile the stock Windows agent binary
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build -o ./bin/sentrava-agent.exe ./cmd/agent

# Or use the Makefile target
make build-windows

The generate command in the CLI handles Windows cross-compilation automatically when --os windows is specified. The above is only needed if you want to pre-build the stock binary manually.

Garble (optional)

Garble is a Go compiler wrapper that renames symbols, obfuscates literals, and strips debug information. When --garble is passed to generate, the agent is compiled with Garble instead of go build.

sh
# Install Garble
go install mvdan.cc/garble@latest

# Verify installation
garble version

Garble requires the same Go version as the project. If Garble is not installed, generate --garble will fail with a clear error message.

Build the dashboard (optional)

The web dashboard is a separate frontend served as static files. The server reads from the configured dashboard/dist directory at runtime.

sh
cd dashboard
npm ci
npm run build

Verify the build

sh
./bin/sentrava-server --help
./bin/sentrava-client --help
./bin/sentrava-agent --version 2>/dev/null || echo "stock binary built"

First run

On first startup the server generates its PKI (CA, server cert, operator cert) and initializes the SQLite database:

sh
./bin/sentrava-server

Default paths:

Resource Default location
Database ./sentrava.db (current directory)
PKI directory ./certs/
gRPC operator API 127.0.0.1:50051
Dashboard HTTPS 127.0.0.1:8080
Agent mTLS listener 127.0.0.1:4433 (default, loopback only)

Use --db and --certs flags to override the database and PKI paths:

sh
./bin/sentrava-server --db /opt/sentrava/sentrava.db --certs /opt/sentrava/certs

Next steps