QUICKSTART Zero-Touch Linux Installation & Socket Setup • Fedora, Debian, Ubuntu, Arch, RHEL

Prerequisites

Component Minimum Requirement Recommended / Optimal
Linux Kernel 6.1 LTS+ with cgroups v2 & PSI enabled 6.6+ with Landlock ABI v3+
Init System systemd v252+ with socket activation systemd v256+ with varlinkctl bundled
Architecture x86_64 or aarch64 x86_64 with AVX-512 / AMX or aarch64 Neon
Hardware Accelerators CPU vector fallback (supported natively) DRM GPU (NVIDIA / AMD / Intel) or NPU

Installation

Choose your preferred installation method.

1. Universal Installer Script (Recommended)

Detects your Linux distribution, downloads the appropriate signed release binaries, and registers the systemd unit files:

Terminal
curl -fsSL https://syntropd.github.io/install.sh | sudo bash

Optionally pass your Hugging Face token for unthrottled downloads of gated models: curl -fsSL https://syntropd.github.io/install.sh | sudo bash -s -- --hf-token <TOKEN> (or enter it when prompted).

2. Distribution Package Managers

Fedora / RHEL / CentOS Stream:
Terminal
sudo dnf copr enable syntropd/release
sudo dnf install syntropd syntropctl
Debian / Ubuntu:
Terminal
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://syntropd.github.io/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/syntropd.gpg
echo "deb [signed-by=/etc/apt/keyrings/syntropd.gpg] https://syntropd.github.io/deb stable main" | sudo tee /etc/apt/sources.list.d/syntropd.list
sudo apt-get update && sudo apt-get install -y syntropd syntropctl
Arch Linux (AUR):
Terminal
yay -S syntropd-bin syntropctl-bin

3. Rust Toolchain / crates.io

Install the entire suite via the umbrella meta-crate, or install daemons individually via cargo install:

Terminal
# Option A: Install full suite via umbrella meta-crate
cargo install syntropd

# Option B: Install operator CLI and daemons individually
cargo install syntropctl
cargo install syntrop-sentry
cargo install syntrop-inferenced
cargo install syntrop-modeld
cargo install syntrop-contextd
cargo install syntrop-toold
cargo install syntrop-runtimed
cargo install syntrop-routerd
cargo install routerctl

Socket Activation & Health Verification

Bring up the socket listeners and verify zero-idle state.

Step 1: Enable & Start Socket Units

Enable the unified socket target. This binds the Unix domain sockets under /run/syntrop/ without starting background daemon processes.

Terminal
sudo systemctl enable --now syntrop-sockets.target

Step 2: Inspect Socket Health

Verify that all Varlink and wire reverse-proxy endpoints are in the listening state:

$ systemctl list-sockets "syntrop-*" "routerd*" "inferenced*" "modeld*" "contextd*" "toold*" "runtimed*" "*sentry*"
LISTEN                                 UNIT                     ACTIVATES
127.0.0.1:32768                        routerd.socket           routerd.service
[::1]:32768                            routerd.socket           routerd.service
/run/syntrop/router.sock               routerd.socket           routerd.service
/run/syntrop/io.syntrop.Router1        routerd.socket           routerd.service
/run/syntrop/io.syntrop.Inference1     inferenced.socket        inferenced.service
/run/syntrop/gateway.sock              inferenced.socket        inferenced.service
/run/syntrop/io.syntrop.Model1         modeld.socket            modeld.service
/run/syntrop/io.syntrop.Context1       contextd.socket          contextd.service
/run/syntrop/io.syntrop.Tool1          toold.socket             toold.service
/run/syntrop/io.syntrop.Runtime1       runtimed.socket          runtimed.service
/run/systemd-sentry/sentry.sock        systemd-sentry.socket    systemd-sentry.service

One front door: syn

Every tool is reachable as syn <namespace> <command> (syntrop works identically). Namespaces: router, runtime, store, hardware, context, tools, fleet, system. Run syn with no arguments for the map. Bare words are a question: syn say hello in one sentence asks the fleet and prints the reply.

$ syn router models
Connected Model
  gemma4:e4b
  qwen2.5-coder:7b

Model Retrieval: syn pull <model>

Download and register GGUF models directly into Content-Addressable Storage (CAS) with streaming SHA-256 integrity verification and automated daemon reload:

$ syn pull qwen2.5:0.5b
Resolving model: qwen2.5:0.5b
  Target: qwen2.5:0.5b
  Source: https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct-GGUF/resolve/main/qwen2.5-0.5b-instruct-q4_k_m.gguf
qwen2.5 [00:00:03] [########################################] 397.66 MiB/397.66 MiB (0s) Download complete
  SHA-256: 7f9a12bc81e3a4...
Successfully pulled and registered qwen2.5:0.5b

Model Family Autoloader: syn setup

Automatically discover your hardware envelope (RAM, VRAM, CPU cores), download and pin a curated model family (Qwen, Granite, or Gemma), wire speculative decoding in /etc/syntrop/routerd.toml, and reload routerd.service:

$ sudo syn setup --family qwen
=== Syntrop Setup: Family [qwen] (Envelope: auto) ===

[1/3] Sizing hardware envelope and dispatching to modelctl bootstrap...
=== Hardware Envelope & Usable Memory Budgets ===
  CPU Cores:        12
  Host RAM:         14.8 GB avail -> 7.4 GB usable draft budget (50%)
  GPU VRAM:         None detected (CPU draft only)

=== Selected Model Family: qwen ===
  CPU Draft:        qwen2.5:0.5b [Q8_0] (~650 MB)
  [✓] modelctl bootstrap completed successfully.

[2/3] Generating speculative routerd.toml configuration...
  [✓] Speculative router configuration written to /etc/syntrop/routerd.toml

[3/3] Reloading routerd.service...
  [✓] routerd.service reloaded successfully.

Setup completed successfully for family: qwen

Step 3: Run the syntropctl Connectivity Probe

Test end-to-end communication and measure socket dispatch latency:

$ syn fleet status
DAEMON       SOCKET                                  STATE    LATENCY   INTERFACES
inferenced   /run/syntrop/io.syntrop.Inference1      ACTIVE    0.41ms   io.syntrop.Inference1, org.varlink.service
modeld       /run/syntrop/io.syntrop.Model1          ACTIVE    0.32ms   io.syntrop.Model1, org.varlink.service
contextd     /run/syntrop/io.syntrop.Context1        ACTIVE    0.28ms   io.syntrop.Context1, org.varlink.service
toold        /run/syntrop/io.syntrop.Tool1           ACTIVE    0.35ms   io.syntrop.Tool1, org.varlink.service
runtimed     /run/syntrop/io.syntrop.Runtime1        STANDBY   0.15ms   io.syntrop.Runtime1, org.varlink.service
routerd      /run/syntrop/io.syntrop.Router1         ACTIVE    0.38ms   io.syntrop.Router1, org.varlink.service

System Status: OPERATIONAL (All sockets listening; 0 MB idle RAM footprint)

Step 4: Verify Compute Plane Acceleration

$ syntropctl devices
PLANE ID           KIND       DEVICE NAME                 TOTAL VRAM   ALLOCATED    PRESSURE
drm-renderD128     DRM_GPU    NVIDIA GeForce RTX 4090     24.00 GiB     0.00 GiB    Normal (0.0% some)
cpu-amx-0          CPU_AMX    Intel Xeon Platinum 8480+   64.00 GiB     0.00 GiB    Normal (0.0% some)

Hardware acceleration is operational.

Step 5: Verify Wire Proxy Ingress & LLM Providers

Verify routerd wire ingress on port 32768 using standard curl and test upstream provider health:

Terminal
# 1. Query available models via HTTP wire proxy ingress
curl http://127.0.0.1:32768/v1/models

# 2. Inspect configured routing providers
routerctl providers list

# 3. Test latency and connectivity to a specific provider
routerctl test runtimed-local
READY FOR STEP 2: PACKAGING WORKFLOWS

The universal install.sh script and release build automation pipelines will be published under the GitHub Actions matrix for multi-distribution CI.