Skip to content

Remote Installation Guide

The SPEAR remote installer provides a streamlined, production-ready deployment experience through a single command. The installer is a two-stage system: a bootstrap script (install.sh) that validates your environment and downloads the release, and an orchestrator script (setup.sh) that handles installation, verification, and optional post-install configuration.

Key benefits:

  • Pre-flight validation — Checks disk, memory, CPU, network, and port availability before starting
  • Multiple installation modes — Quick, Production, Development, Config File, and Non-Interactive
  • Automatic rollback — Backs up existing installations and restores on failure
  • State persistence — Resume interrupted installations within 1 hour
  • Installation verification — Health check polling with retry logic
  • Telemetry — Anonymous, opt-out metrics for reliability tracking
  • Multi-server support — Bulk deployment via CSV with parallel execution
  • Clean uninstallation — Full removal with optional data backup

The installation process works as follows:

  1. User runs install command - Downloads and executes the installer
  2. Pre-flight checks - System validates requirements (disk, memory, network, etc.)
  3. Download release - Fetches the SPEAR binary from the Vault server
  4. Backup existing - If upgrading, backs up the current installation
  5. Install binary - Copies SPEAR to the installation directory
  6. Create service - Sets up the systemd service
  7. Start service - Enables and starts SPEAR
  8. Health check - Verifies the installation is working
  9. Generate report - Creates installation summary (on success) or triggers rollback (on failure)
RequirementMinimumRecommendedSeverity
Operating SystemLinux with systemdUbuntu 22.04+ / Debian 12+Required
Architectureamd64, arm64, or armv7amd64Required
Disk Space2 GB free in /opt5 GB+Required
Memory (RAM)1 GB2 GB+Warning
CPU Cores12+Warning
NetworkConnectivity to vault.spear.vtemlabs.comRequired
Port8090 (default) availableWarning
DependencyPurposeCheck
curlDownloading installer and releasewhich curl
tarExtracting release tarballwhich tar
systemctlService managementwhich systemctl
System ArchitectureMapped Platform
x86_64 / amd64linux-amd64
aarch64 / arm64linux-arm64
armv7l / armhflinux-arm

A valid SPEAR license key is required. Obtain your license key from the SPEAR Vault portal.

Terminal window
curl -sSL https://install.spear.vtemlabs.com | sudo bash

You will be prompted for your license key (input is hidden).

Terminal window
curl -sSL https://install.spear.vtemlabs.com | sudo LICENSE_KEY=your-key bash

After installation completes:

Terminal window
# Check service status
sudo systemctl status spear
# Check health endpoint
curl -s http://localhost:8090/api/health
# View installation report
cat /var/lib/spear/installation-report.txt
ServiceURL
SPEAR Applicationhttp://localhost:8090
Health Checkhttp://localhost:8090/api/health
Admin Panelhttp://localhost:8090/_/
FeatureQuickProductionDevelopmentNon-InteractiveDefault
Interactive promptsNoYes (full)NoNoYes
Auto port selectionYes (8090-8099)Suggest if busyYes (8090-8099)No (uses 8090)No
SSL recommendationAuto-detectStrongly recommendedForced noneUses defaultPrompted
Encryption keyAuto-generated32-char enforcedAuto-generatedAuto-generatedPrompted
Verbose loggingNoNoYes (debug)NoNo
Confirmation stepNoYesNoNoNo
Post-install wizardNoYesNoNoYes
Best forCI/CD, scriptingLive serversLocal testingAutomated deploysFirst-time

Minimal prompts with smart defaults. Auto-selects an available port from 8090-8099 and detects SSL mode from domain.

Terminal window
curl -sSL https://install.spear.vtemlabs.com | sudo bash -s -- --quick

Full interactive setup with security-focused defaults. SSL is strongly recommended, and encryption keys must be exactly 32 characters.

Terminal window
curl -sSL https://install.spear.vtemlabs.com | sudo bash -s -- --production

Non-interactive with verbose logging. Forces SSL to none and sets SPEAR_LOG_LEVEL=debug in the systemd service.

Terminal window
curl -sSL https://install.spear.vtemlabs.com | sudo bash -s -- --development

Uses all defaults without prompting. Suitable for automation scripts.

Terminal window
curl -sSL https://install.spear.vtemlabs.com | sudo bash -s -- --non-interactive
# or
curl -sSL https://install.spear.vtemlabs.com | sudo bash -s -- -y

The installer supports loading settings from a configuration file using simple KEY=VALUE format.

Terminal window
# With explicit config file
curl -sSL https://install.spear.vtemlabs.com | sudo bash -s -- --config /etc/spear/install.conf
# Auto-loaded from default location (if present)
# The installer checks /etc/spear/install.conf automatically
KeyTypeDefaultDescription
LICENSE_KEYstring(required)SPEAR license key
PORTnumber8090HTTP listening port (1-65535)
DOMAINstring(empty)Domain name for SSL configuration
SSL_MODEstringnoneSSL mode: none, letsencrypt, or traefik
INSTALL_DIRpath/opt/spearBinary installation directory
DATA_DIRpath/var/lib/spearData storage directory
ENCRYPTION_KEYstringauto-generate16/24/32 character key, or auto-generate
SKIP_PROMPTSbooleanfalseSkip interactive prompts (true/yes/1)
TELEMETRY_ENABLEDbooleantrueEnable anonymous telemetry
  1. CLI arguments (highest priority)
  2. Config file (specified via --config)
  3. Auto-loaded config (/etc/spear/install.conf if present)
  4. Defaults (lowest priority)

Production Server:

LICENSE_KEY=SPEAR-PROD-xxxx-xxxx-xxxx
PORT=8090
DOMAIN=spear.company.com
SSL_MODE=letsencrypt
INSTALL_DIR=/opt/spear
DATA_DIR=/var/lib/spear
ENCRYPTION_KEY=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
SKIP_PROMPTS=true
TELEMETRY_ENABLED=true

Staging Server:

LICENSE_KEY=SPEAR-STG-xxxx-xxxx-xxxx
PORT=9090
DOMAIN=spear-staging.company.com
SSL_MODE=traefik
ENCRYPTION_KEY=auto-generate
SKIP_PROMPTS=true

Development Server:

LICENSE_KEY=SPEAR-DEV-xxxx-xxxx-xxxx
PORT=8090
SSL_MODE=none
ENCRYPTION_KEY=auto-generate
SKIP_PROMPTS=true
TELEMETRY_ENABLED=false

The bootstrap script performs comprehensive system validation before downloading anything.

CheckRequirementSeverityAction on Failure
Root privilegesUID 0FatalExit with instructions
Operating systemLinuxFatalExit with error
Architectureamd64, arm64, or armFatalExit with error
curl availableIn PATHFatalExit with install hint
tar availableIn PATHFatalExit with install hint
systemctl availableIn PATHFatalExit with error
Disk space>= 2 GB in /optFatalExit with current usage
Memory>= 2 GB RAMWarningContinue with warning
CPU cores>= 2 coresWarningContinue with warning
Network connectivityCan reach Vault serverFatalExit + collect diagnostics
Port 8090Not in useWarningContinue with warning
lsof availableIn PATHWarningPort process identification skipped

Disk space: Free space in /opt or choose a different installation directory via the INSTALL_DIR config option.

Memory warning: The installer will continue, but performance may be limited on systems with less than 2 GB RAM.

Port conflicts: If port 8090 is in use, the installer warns you. Use --port to specify an alternative, or use Quick/Development mode which auto-selects an available port in the 8090-8099 range.

Missing dependencies: Install the required packages for your distribution:

Terminal window
# Debian/Ubuntu
sudo apt-get install -y curl tar
# RHEL/CentOS
sudo yum install -y curl tar
# Fedora
sudo dnf install -y curl tar
StepNameAction
1user_createdCreates spear system user (no home, no login shell)
2directories_createdCreates /opt/spear, /var/lib/spear, /var/log/spear (mode 750)
3binary_installedCopies SPEAR binary to /opt/spear/spear (mode 755)
4service_createdCreates systemd service at /etc/systemd/system/spear.service
5service_startedEnables and starts the SPEAR service

The installer displays visual progress during installation:

  • Step counters (e.g., [2/5] Creating directories...)
  • Color-coded output (green for success, red for errors, yellow for warnings)
  • A progress bar with percentage completion

Typical installation completes in under 2 minutes, depending on network speed for the binary download. The installer tracks duration and reports it on completion.

After starting the service, the installer automatically verifies the installation by polling the health endpoint:

  • Endpoint: http://localhost:{PORT}/api/health
  • Retries: 30 attempts
  • Interval: 2 seconds between attempts
  • Total timeout: 60 seconds
  • Pre-check: Verifies service is running via systemctl is-active

If the health check does not pass within the timeout period:

  1. The installer logs the failure with details
  2. Automatic rollback is triggered (if a backup exists)
  3. The previous SPEAR version is restored and restarted
  4. The state file is preserved so you can retry
Terminal window
# Check service status
sudo systemctl status spear
# Check health endpoint
curl -s http://localhost:8090/api/health
# View recent logs
sudo journalctl -u spear --since "5 minutes ago" --no-pager
# Check port binding
sudo ss -tlnp | grep 8090

Rollback activates automatically when the installation fails after modifying the system (e.g., binary installed but service fails to start, or health check times out).

ComponentAction
BinaryPrevious binary restored from backup
Service filePrevious systemd unit file restored
ConfigurationPrevious install info restored
ServicePrevious version restarted

Backups are stored at {INSTALL_DIR}/backup-YYYYMMDD_HHMMSS/ (e.g., /opt/spear/backup-20260206_143022/).

If automatic rollback fails:

Terminal window
# List available backups
ls /opt/spear/backup-*/
# Restore binary manually
sudo cp /opt/spear/backup-<timestamp>/spear /opt/spear/spear
sudo chmod 755 /opt/spear/spear
# Restore service file
sudo cp /opt/spear/backup-<timestamp>/spear.service /etc/systemd/system/
# Reload and restart
sudo systemctl daemon-reload
sudo systemctl restart spear

If an installation is interrupted, the installer saves progress to a state file so you can resume later.

  • State file: /tmp/spear-install-state
  • Valid for: 1 hour from last update
  • Contents: Completed step, license key, platform, timestamp, all configuration values
  • Auto-resume: Set RESUME_INSTALLATION=true environment variable
Terminal window
# Interactive resume (will prompt to resume or start fresh)
curl -sSL https://install.spear.vtemlabs.com | sudo bash
# Automatic resume (non-interactive)
curl -sSL https://install.spear.vtemlabs.com | sudo env RESUME_INSTALLATION=true bash
ScenarioAction
State file less than 1 hour oldResume (prompted or automatic)
State file older than 1 hourStart fresh (old state is unreliable)
Different server or configurationDelete state file and start fresh
Corrupted state fileDelete state file and start fresh

To force a fresh installation:

Terminal window
sudo rm -f /tmp/spear-install-state

In interactive modes (Default, Production), the installer offers an optional configuration wizard after installation.

ServiceDescriptionConfig File
SMTPEmail sending with provider presets (Gmail, Office 365, SendGrid, custom){DATA_DIR}/smtp-config.json
BackupsAutomated backup schedules (hourly, daily, weekly, custom cron){DATA_DIR}/backup-config.json
SSO/OAuth2Single sign-on with Google, Azure AD, GitHub, GitLab, custom OAuth2, or SAML{DATA_DIR}/sso-config.json

The wizard is automatically skipped in Quick, Development, and Non-Interactive modes. All features configured by the wizard can also be set up later through the SPEAR web UI.

The installer sends a single anonymous telemetry event upon successful installation:

FieldExamplePurpose
eventinstallation_completeEvent type
platformlinux-amd64Target platform
osLinuxOperating system
archx86_64CPU architecture
installer_version1.0Installer version
ssl_modeletsencryptSSL configuration
duration_seconds45Installation duration
timestamp2026-01-15T10:30:00ZEvent timestamp
  • Anonymous: No personal data, license keys, domain names, or IP-identifying information is included
  • IP address: Used server-side for rate limiting only, not stored with telemetry data
  • Non-blocking: Telemetry is sent in the background and never delays or fails the installation
  • Rate limited: 10 events per IP per hour
Terminal window
# Via environment variable
curl -sSL https://install.spear.vtemlabs.com | sudo env TELEMETRY_ENABLED=false bash
# Via config file
TELEMETRY_ENABLED=false

After successful installation, a detailed report is generated at:

/var/lib/spear/installation-report.txt
  • System information (hostname, OS, architecture, timezone)
  • Configuration details (port, domain, SSL mode, directories)
  • Service status
  • Health check result
  • Next steps for accessing the admin UI
Terminal window
cat /var/lib/spear/installation-report.txt

Installation metadata is also saved to /var/lib/spear/.spear-install-info for internal reference.

For deploying SPEAR across multiple servers, use the multi-deploy.sh tool.

server,license-key,domain[,port][,ssl-mode]
prod-1.example.com,SPEAR-PROD-xxxx,spear.example.com,8090,letsencrypt
dev-1.example.com,SPEAR-DEV-xxxx,dev.example.com
ModeFlagDefault ConcurrencyBest For
Sequential(default)1Production, debugging
Parallel--parallel3 (configurable)Large-scale rollouts
Terminal window
# 1. Create server list from example
cp servers.example.csv servers.csv
# 2. Edit with your server details
vim servers.csv
# 3. Validate with dry run
./multi-deploy.sh --file servers.csv --dry-run
# 4. Deploy sequentially (safer)
./multi-deploy.sh --file servers.csv --ssh-key ~/.ssh/deploy_key
# 5. Or deploy in parallel (faster)
./multi-deploy.sh --file servers.csv --ssh-key ~/.ssh/deploy_key --parallel --concurrency 5
OptionDefaultDescription
--file FILE(required)CSV server list
--parallelSequentialEnable parallel deployment
--concurrency N3Max parallel deployments
--dry-runValidate and show plan only
--ssh-user USERrootSSH username
--ssh-key PATHSystem defaultSSH private key
--timeout SECONDS600Timeout per server

A deployment summary report is generated after completion, detailing the status of each server.

The uninstall.sh script safely removes SPEAR with optional data backup.

Terminal window
# Interactive uninstall (recommended - includes backup)
sudo ./uninstall.sh
# Automated uninstall (skip confirmation, still backs up data)
sudo ./uninstall.sh --force
# Fast uninstall (no backup - not recommended for production)
sudo ./uninstall.sh --force --no-backup
ItemPathNotes
Systemd service/etc/systemd/system/spear.serviceStopped, disabled, removed
Installation directory/opt/spearBinary and configuration
Data directory/var/lib/spearDatabase, uploads, configs
Log directory/var/log/spearApplication logs
System userspearService account

By default, the data directory is backed up before removal:

  • Backup location: /var/lib/spear-backup-YYYYMMDD_HHMMSS
  • Contents: Complete copy of /var/lib/spear
  • Skip backup: --no-backup flag (not recommended)
Terminal window
sudo mkdir -p /var/lib/spear
sudo cp -a /var/lib/spear-backup-<timestamp>/. /var/lib/spear/
sudo chown -R spear:spear /var/lib/spear
Terminal window
# Download and run installer (will prompt for license key)
curl -sSL https://install.spear.vtemlabs.com | sudo bash
# Follow the prompts:
# 1. Enter license key
# 2. Choose port (default: 8090)
# 3. Enter domain (optional, for SSL)
# 4. Select SSL mode (1=Let's Encrypt, 2=Traefik, 3=None)
# 5. Choose installation directory (default: /opt/spear)
# 6. Choose data directory (default: /var/lib/spear)
# 7. Enter or auto-generate encryption key
# 8. Configure SMTP, backups, SSO (optional)
Terminal window
# Create config file
sudo mkdir -p /etc/spear
cat <<EOF | sudo tee /etc/spear/install.conf
LICENSE_KEY=SPEAR-PROD-xxxx-xxxx-xxxx
PORT=8090
DOMAIN=spear.company.com
SSL_MODE=letsencrypt
ENCRYPTION_KEY=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
SKIP_PROMPTS=true
EOF
sudo chmod 600 /etc/spear/install.conf
# Install with production mode
curl -sSL https://install.spear.vtemlabs.com | sudo bash -s -- --production --config /etc/spear/install.conf
Terminal window
# Auto-selects port, disables SSL, enables debug logging
curl -sSL https://install.spear.vtemlabs.com | sudo bash -s -- --development
Terminal window
# Minimal prompts, smart defaults, auto port selection
curl -sSL https://install.spear.vtemlabs.com | sudo LICENSE_KEY=your-key bash -s -- --quick
Terminal window
# The installer automatically backs up the existing installation before upgrading.
# If the upgrade fails, it rolls back to the previous version.
curl -sSL https://install.spear.vtemlabs.com | sudo bash -s -- --config /etc/spear/install.conf
Terminal window
# Automatically resume if state file exists and is valid (< 1 hour old)
curl -sSL https://install.spear.vtemlabs.com | sudo env RESUME_INSTALLATION=true bash
Terminal window
# Prepare server list and deploy in parallel
cp servers.example.csv production-servers.csv
vim production-servers.csv
./multi-deploy.sh --file production-servers.csv --ssh-key ~/.ssh/deploy --parallel --concurrency 5
HTTP CodeMeaningResolution
401 / 403License authentication failedVerify license key at your account portal. Check for typos. Ensure the license is not revoked or expired.
404Platform not foundYour platform may not have a published binary. Contact support.
429Rate limit exceededWait approximately 15 minutes and retry.
000Connection failedCheck network connectivity to vault.spear.vtemlabs.com. Verify DNS resolution. Check firewall rules.
5xxServer errorVault server may be temporarily unavailable. Retry in a few minutes. Check diagnostics file.
CheckErrorResolution
Root”This installer must be run as root”Run with sudo
Disk space”Insufficient disk space”Free space in /opt (need 2 GB+)
Network”Cannot reach Vault server”Check DNS, firewall, and proxy settings
Dependencies”curl/tar/systemctl not found”Install missing package: apt install curl or yum install curl

If the health check fails after installation:

Terminal window
# 1. Check service status
sudo systemctl status spear
# 2. Check logs
sudo journalctl -u spear --no-pager -n 100
# 3. Check port binding
sudo lsof -i :8090
# 4. Manual health check
curl -v http://localhost:8090/api/health
# 5. Check permissions
ls -la /opt/spear/ /var/lib/spear/

If automatic rollback fails:

Terminal window
# 1. Check if backup exists
ls /opt/spear/backup-*/
# 2. Manually restore binary
sudo cp /opt/spear/backup-*/spear /opt/spear/spear
# 3. Restore service file
sudo cp /opt/spear/backup-*/spear.service /etc/systemd/system/
# 4. Reload and restart
sudo systemctl daemon-reload && sudo systemctl restart spear
Terminal window
# Check what's using port 8090
sudo lsof -i :8090
# or
sudo ss -tlnp | grep 8090
# Use a different port during installation
curl -sSL https://install.spear.vtemlabs.com | sudo bash -s -- --port 9090
Terminal window
# Fix directory ownership
sudo chown -R spear:spear /opt/spear /var/lib/spear /var/log/spear
# Fix directory permissions
sudo chmod 750 /opt/spear /var/lib/spear /var/log/spear
# Fix binary permissions
sudo chmod 755 /opt/spear/spear
IssueResolution
Let’s Encrypt failsEnsure ports 80/443 are open and domain DNS points to the server
Certificate renewalSPEAR handles auto-renewal. Check logs if failing.
Behind TraefikUse --ssl traefik and configure Traefik separately. See Traefik SSL.
IssueResolution
State file not foundNo previous installation to resume. Start fresh.
State expired (> 1 hour)Start a fresh installation. Old state is unreliable.
State file corruptedDelete /tmp/spear-install-state and start fresh.

When fatal errors occur (network failures, server errors), the installer automatically collects diagnostics and saves them to /tmp/spear-install-diagnostics-YYYYMMDD_HHMMSS.txt.

Collected information:

  • CPU info and core count
  • Memory info (free -h)
  • Disk usage (df -h /opt)
  • Port 8090 usage
  • SPEAR service status
  • Recent journal logs

When contacting support, include:

  1. Diagnostics file: /tmp/spear-install-diagnostics-*.txt (auto-generated on failure)
  2. Installation report: /var/lib/spear/installation-report.txt
  3. Service logs: sudo journalctl -u spear --no-pager -n 200
  4. System info: OS version, architecture, available disk/memory

Contact: [email protected]

A successful SPEAR installation must satisfy all of the following pass conditions:

CriteriaVerificationPass Condition
Service activesudo systemctl is-active spearReturns active
Health check OKcurl -s http://localhost:{PORT}/api/healthReturns HTTP 200 with valid response
Installation report generatedcat /var/lib/spear/installation-report.txtFile exists and contains system info, configuration, and status
Rollback works on failureSimulate failure during upgradePrevious version is restored and service returns to active state

Additional pass conditions for specific modes:

  • Production mode: SSL recommendation is presented, encryption key is validated as 32 characters, confirmation step is shown
  • Config file mode: All values from the config file are applied correctly and override defaults
  • Multi-server mode: Deployment summary report is generated with per-server status

The following scenarios should be validated to ensure installer reliability:

OS / DistributionArchitectureStatus
Ubuntu 22.04+amd64Supported
Ubuntu 22.04+arm64Supported
Debian 12+amd64Supported
Debian 12+arm64Supported
RHEL 9+ / CentOS Stream 9+amd64Supported
Any Linux with systemdarmv7Supported
ScenarioCommand / ConfigExpected Outcome
Quick mode--quickAuto-selects port, minimal prompts, service active
Production mode--productionFull prompts, SSL recommendation, 32-char key enforced
Development mode--developmentNo prompts, SSL forced to none, debug logging enabled
Non-interactive mode--non-interactive / -yAll defaults applied, no prompts, service active
Config file install--config /etc/spear/install.confAll config values applied, overrides defaults
ScenarioStepsExpected Outcome
Resume after interruptionKill installer mid-install, re-run within 1 hourResumes from last completed step
Rollback on verification failureInstall with a corrupted binary or blocked portAutomatic rollback restores previous version
Expired state fileWait > 1 hour after interruption, re-runFresh installation starts (old state discarded)
ScenarioConfigExpected Outcome
Telemetry enabled (default)No opt-out setAnonymous event sent on success, installation not delayed
Telemetry disabledTELEMETRY_ENABLED=falseNo telemetry event sent, installation completes normally
ScenarioCommandExpected Outcome
Sequential deployment./multi-deploy.sh --file servers.csvServers deployed one at a time, summary report generated
Parallel deployment./multi-deploy.sh --file servers.csv --parallel --concurrency 5Up to 5 servers deployed simultaneously, summary report generated
Dry run validation./multi-deploy.sh --file servers.csv --dry-runPlan displayed, no changes made to any server
FilePathPurpose
Install scriptcurl -sSL https://install.spear.vtemlabs.comBootstrap installer
Setup scriptExtracted from release tarballInstallation orchestrator
Config file/etc/spear/install.confAuto-loaded configuration
State file/tmp/spear-install-stateResume state (temporary, 1 hour)
Install report/var/lib/spear/installation-report.txtHuman-readable report
Install info/var/lib/spear/.spear-install-infoInstallation metadata
Diagnostics/tmp/spear-install-diagnostics-*.txtError diagnostics
Binary/opt/spear/spearSPEAR executable
Service file/etc/systemd/system/spear.serviceSystemd unit
Data directory/var/lib/spearDatabase, uploads, config
Log directory/var/log/spearApplication logs
SMTP config/var/lib/spear/smtp-config.jsonEmail configuration
Backup config/var/lib/spear/backup-config.jsonBackup schedule
SSO config/var/lib/spear/sso-config.jsonSSO/OAuth2 settings
VariableUsed ByDescription
LICENSE_KEYinstall.shPre-set license key (skip prompt)
SKIP_VERSION_CHECKinstall.shSet true to skip version check
TELEMETRY_ENABLEDsetup.shSet false to disable telemetry
RESUME_INSTALLATIONsetup.shSet to any value to auto-resume
SPEAR_LICENSE_KEYsetup.shLicense key (set by install.sh)
SPEAR_INSTALL_SOURCEsetup.shSource directory (set by install.sh)
SPEAR_CONFIG_FILEsetup.shConfig file path (set by install.sh)
SPEAR_LOG_LEVELsystemd serviceSet to debug in development mode
VAULT_URLAll scriptsOverride Vault server URL
ArgumentDescription
--config FILELoad configuration from file
--skip-version-checkSkip querying Vault for latest version
ArgumentDescription
--from-installerMarks execution from install.sh (internal)
--config FILELoad configuration from file
--port PORTSet SPEAR listening port
--domain DOMAINSet domain for SSL
--ssl MODESSL mode: none, letsencrypt, traefik
--install-dir DIRInstallation directory
--data-dir DIRData directory
--encryption-key KEY32-character encryption key
--quickQuick mode (minimal prompts, smart defaults)
--productionProduction mode (full prompts, security-focused)
--developmentDevelopment mode (no prompts, debug logging)
--non-interactive / -yUse defaults without prompting
--help / -hShow help
ScriptCodeMeaning
install.sh0Success
install.sh1Fatal error (see diagnostics)
setup.sh0Success
setup.sh1Installation failed (rollback attempted)
uninstall.sh0Success (or SPEAR not installed)
uninstall.sh1Uninstall failed
multi-deploy.sh0All deployments succeeded
multi-deploy.sh1One or more deployments failed
  • Never commit license keys to version control
  • Use config files with chmod 600 permissions for automated deployments
  • Use environment variables for CI/CD pipelines
  • Hidden input: The interactive prompt hides license key input (stty -echo)
Terminal window
sudo chmod 600 /etc/spear/install.conf
sudo chown root:root /etc/spear/install.conf
  • Use dedicated SSH keys for deployment (not personal keys)
  • Restrict SSH keys to specific commands if possible
  • Use a dedicated deployment user with minimal permissions
  • Set chmod 600 on CSV files containing license keys
  • Firewall: Only expose the SPEAR port (default 8090) to required networks
  • SSL: Use Let’s Encrypt or Traefik for production deployments
  • Port restrictions: Change from the default port in production if desired

The generated systemd service includes security hardening by default:

SettingValuePurpose
NoNewPrivilegestruePrevents privilege escalation
PrivateTmptrueIsolated temporary directory
ProtectSystemstrictRead-only filesystem (except explicit paths)
ProtectHometrueNo access to home directories
ReadWritePathsdata, log, install dirsExplicit whitelist for writable directories

All installation-related events are logged:

  • License validation attempts (success/failure) on the Vault server
  • Binary downloads with IP and license info
  • Telemetry events (anonymous)
  • Multi-deploy per-server logs in /tmp/spear-multi-deploy-*/
  • Quick Deploy — Build-from-source deployment with systemd
  • Traefik SSL — Configure Traefik reverse proxy with SSL
  • Environment Variables — Full environment variable reference
  • Installer README — Detailed installer script documentation and developer reference
  • Set up automated backups via the Admin panel
  • Configure branding and RBAC in the admin UI