build
Provision fleet instances with tools and configurations using build recipes. Create reusable provisioning scripts and snapshots for faster deployments.
Usage
fleex build [command]
Subcommands
| Command | Description |
|---|---|
list |
List available build recipes |
show [name] |
Show recipe details |
run |
Run build on a fleet |
verify |
Verify build installation |
create [name] |
Create a new build recipe |
build list
List all available build recipes:
fleex build list
Output:
=== AVAILABLE BUILD RECIPES ===
NAME DESCRIPTION
-------------------------------------------------------------------------
security-tools Common security tools for bug bounty
recon-tools Reconnaissance and enumeration tools
base-setup Base system setup with essential packages
build show
Display detailed information about a recipe:
fleex build show security-tools
Output:
=== SECURITY-TOOLS ===
Description: Common security tools for bug bounty
Author: fleex
Version: 1.0.0
OS: ubuntu, debian
Variables:
GO_VERSION: 1.21.5
USERNAME: root
Steps:
1. System Update
$ DEBIAN_FRONTEND=noninteractive apt-get update -qq
$ DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::=...
2. Install Base Packages
$ DEBIAN_FRONTEND=noninteractive apt-get install -y -qq git ...
3. Install Go
$ wget -q https://go.dev/dl/go{vars.GO_VERSION}.linux-amd64....
$ rm -rf /usr/local/go && tar -C /usr/local -xzf /tmp/go.tar...
4. Install ProjectDiscovery Tools
$ /usr/local/go/bin/go install -v github.com/projectdiscove...
$ /usr/local/go/bin/go install -v github.com/projectdiscove...
5. Install Masscan
$ git clone --depth 1 https://github.com/robertdavidgraham/m...
Verification:
- Check nuclei: /root/go/bin/nuclei --version
- Check httpx: /root/go/bin/httpx --version
- Check masscan: masscan --version
build run
Execute a build recipe on an existing fleet:
fleex build run -r security-tools -n myfleet
Flags
| Flag | Short | Description | Default |
|---|---|---|---|
--recipe |
-r |
Build recipe name | |
--file |
-f |
Custom recipe file path | |
--name |
-n |
Fleet name to build | |
--snapshot |
-s |
Create snapshot after successful build | false |
--parallel |
-p |
Number of parallel builds | 5 |
--no-verify |
Skip verification step | false |
|
--continue |
Continue on step failure | false |
|
--dry-run |
Show what would be executed | false |
|
--verbose |
-v |
Show detailed output | false |
Examples
Build an existing fleet:
fleex build run -r security-tools -n myfleet
Build with snapshot creation:
fleex build run -r security-tools -n myfleet --snapshot
Output:
Building fleet 'myfleet' (5 instances) with recipe 'security-tools'...
[myfleet-1] Step 1/5: System Update
[myfleet-2] Step 1/5: System Update
[myfleet-3] Step 1/5: System Update
[myfleet-1] Step 2/5: Install Base Packages
[...]
Build complete: 5/5 successful
Creating snapshot 'fleex-security-tools-03-01-2026-14-30' from myfleet-1...
Snapshot 'fleex-security-tools-03-01-2026-14-30' created successfully
Build with custom recipe file:
fleex build run -f /path/to/custom-recipe.yaml -n myfleet
Dry run to preview:
fleex build run -r security-tools -n myfleet --dry-run
build verify
Verify that tools are correctly installed on a fleet:
fleex build verify -r security-tools -n myfleet
Flags
| Flag | Short | Description |
|---|---|---|
--recipe |
-r |
Build recipe name |
--name |
-n |
Fleet name to verify |
--verbose |
-v |
Show detailed output |
Output:
Verifying fleet 'myfleet' with recipe 'security-tools'...
[myfleet-1] Check nuclei: PASSED
[myfleet-1] Check httpx: PASSED
[myfleet-1] Check masscan: PASSED
[myfleet-2] Check nuclei: PASSED
[...]
Verification complete: 5/5 passed
build create
Create a new build recipe:
fleex build create my-custom-tools
Flags
| Flag | Description |
|---|---|
--description |
Recipe description |
--from |
Copy from existing recipe |
Examples
Create blank recipe:
fleex build create my-tools --description "My custom toolset"
Copy from existing recipe:
fleex build create my-recon --from security-tools
Output:
Build recipe 'my-tools' created at: /home/user/.config/fleex/builds/my-tools.yaml
Build Recipe Schema
name: recipe-name # Required: recipe identifier
description: Description # Required: what this recipe installs
author: author-name # Optional: recipe author
version: "1.0.0" # Optional: recipe version
os: # Optional: OS requirements
supported:
- ubuntu
- debian
vars: # Optional: variables for templating
GO_VERSION: "1.21.5"
USERNAME: root
files: # Optional: files to transfer
- source: /local/path
destination: /remote/path
mode: "0755"
steps: # Required: installation steps
- name: Step Name # Required: step identifier
commands: # Required: commands to execute
- "command1"
- "command2 {vars.GO_VERSION}"
retries: 2 # Optional: retry count on failure
timeout: 600 # Optional: timeout in seconds
continue_on: error # Optional: continue on error
verify: # Optional: verification checks
- name: Check tool
command: "tool --version"
expect: "tool" # Optional: expected output substring
Default Recipes
security-tools
Installs common security tools:
- Go programming language
- Nuclei (vulnerability scanner)
- httpx (HTTP probe)
- Subfinder (subdomain discovery)
- Masscan (port scanner)
recon-tools
Installs reconnaissance tools:
- Amass (attack surface mapping)
- ffuf (fuzzer)
- puredns (DNS resolver)
- massdns (DNS bruteforcer)
base-setup
Basic system setup:
- System updates
- Essential packages (git, curl, wget, jq, htop, tmux, vim)
- 2GB swap file
Custom Recipe Example
Create a custom recipe for your workflow:
# ~/.config/fleex/builds/full-arsenal.yaml
name: full-arsenal
description: Complete bug bounty toolkit
author: user
version: "1.0.0"
os:
supported:
- ubuntu
- debian
vars:
GO_VERSION: "1.21.5"
USERNAME: root
steps:
- name: System Update
commands:
- DEBIAN_FRONTEND=noninteractive apt-get update -qq
- DEBIAN_FRONTEND=noninteractive apt-get upgrade -y -qq
retries: 2
timeout: 600
- name: Install Dependencies
commands:
- apt-get install -y -qq git curl wget jq make gcc libpcap-dev chromium-browser
retries: 2
- name: Install Go
commands:
- wget -q https://go.dev/dl/go{vars.GO_VERSION}.linux-amd64.tar.gz -O /tmp/go.tar.gz
- rm -rf /usr/local/go && tar -C /usr/local -xzf /tmp/go.tar.gz
- echo 'export PATH=$PATH:/usr/local/go/bin:/root/go/bin' >> ~/.bashrc
- name: Install ProjectDiscovery Suite
commands:
- /usr/local/go/bin/go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
- /usr/local/go/bin/go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest
- /usr/local/go/bin/go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
- /usr/local/go/bin/go install -v github.com/projectdiscovery/katana/cmd/katana@latest
- /usr/local/go/bin/go install -v github.com/projectdiscovery/dnsx/cmd/dnsx@latest
retries: 1
- name: Install Additional Tools
commands:
- /usr/local/go/bin/go install -v github.com/tomnomnom/waybackurls@latest
- /usr/local/go/bin/go install -v github.com/ffuf/ffuf/v2@latest
- /usr/local/go/bin/go install -v github.com/lc/gau/v2/cmd/gau@latest
- name: Update Nuclei Templates
commands:
- /root/go/bin/nuclei -update-templates -silent
continue_on: error
verify:
- name: Check nuclei
command: /root/go/bin/nuclei --version
- name: Check httpx
command: /root/go/bin/httpx --version
- name: Check ffuf
command: /root/go/bin/ffuf --version
Workflow
Typical build workflow:
- Spawn single instance:
fleex spawn -n build -c 1 - Run build:
fleex build run -r security-tools -n build - Verify installation:
fleex build verify -r security-tools -n build - Create snapshot:
fleex build run -r security-tools -n build --snapshot - Update config to use the new image
- Delete build instance:
fleex delete -n build
Or combine spawn and build:
fleex spawn -n myfleet -c 10 --build security-tools
Notes
- Build recipes are stored in
~/.config/fleex/builds/ - Use
{vars.KEY}syntax for variable substitution - Steps with
continue_on: errorwon't fail the build - Verification runs after all steps complete
- Snapshots are created from the first instance in the fleet