Skip to main content

Prerequisites

Written by Aron Day

Everything you need before you run the single-server installer, laid out as a short series of steps. Work through them in order. Each item explains why it is needed and how to check it.

Scope: This covers the single-server install driven by bootstrap.sh and setup.sh (for evaluations — POVs and POCs). Production installs on Kubernetes with the Helm chart have their own prerequisites — see the Helm installation guide.

At-a-glance checklist

  • OCI registry access granted, with the 3b repository

  • Your Tines tenant name and OCI registry API key to hand

  • The release version to install (e.g. v2.0.0)

  • Your signed 3B license token (3bl_v1_…)

  • A 64-bit (amd64 / x86_64) Linux server, correctly sized (step 2)

  • Root / sudo access on that server

  • Linux kernel 5.19 or newer

  • Unprivileged user namespaces available in the kernel

  • curl, openssl, and python3 installed

  • Outbound access to oci.tines.com (step 3) — or an air-gapped plan

  • DNS records, plus open firewall ports, for your URLs (step 4)

  • A TLS plan — HTTPS is effectively required (AI providers need it); terminate TLS at 3B or at a load balancer in front (step 5)

  • (Optional) SMTP details if 3B should send email (step 6)

Step 1 — Get registry access and your license

3B is downloaded from the Tines OCI registry (oci.tines.com).

  1. Complete the onboarding. Follow accessing the OCI registry to get an account.

  2. Note the values you receive:

    • Tines tenant name — your username for oci.tines.com.

    • Tines OCI registry API key — your password for oci.tines.com. Treat it like any password; the installer enters it hidden and stores it only in the root-protected /opt/3b/.env.

Step 2 — Prepare the server

Hardware sizing

Everything runs on one machine, so size it for your workload. These are starting points; some heavier automation may need more.

Use case

vCPU

RAM

Disk (SSD)

Light smoke test

8

16 GB

250 GB

Recommended POC starting point

8

32 GB

500 GB

Heavier POC

16

64 GB

500 GB – 1 TB

Why: 3B runs roughly a dozen services plus a database and sandboxed automation runtimes on the same box; under-sizing leads to slow performance or services failing to start.

Operating system and architecture

A 64-bit Linux server on amd64 / x86_64. Arm and other CPU architectures are not currently supported. Recent mainstream distributions all work: Ubuntu 22.04+, Debian 12, Amazon Linux 2023, Oracle Linux 8/9, RHEL 8/9, and similar.

uname -m   # must print x86_64 (or amd64); aarch64 is not supported

Why: The 3B container images and the sandbox runtime are built for amd64 Linux only.

Use a clean, dedicated server. The installer sets up k3s and expects to own the machine. Do not install it on a host that already runs another Kubernetes, or that you use for other workloads.

Root access

You must run the installer as root, normally by adding sudo in front of the command.

sudo -v   # confirms you have sudo rights

Why: The installer installs system packages, adjusts kernel settings, creates system directories, and starts services — all of which require administrative privileges. It refuses to run as a normal user.

Kernel 5.19 or newer

uname -r   # read the first two numbers: 6.5.x is fine; 5.15.x is too old

Why: 3B runs untrusted automation code inside secure sandboxes (gVisor) that rely on modern kernel features. The installer refuses to run below kernel 5.12 (k3s needs idmapped mounts); on kernels between 5.12 and 5.19 it automatically configures a slower containerd fallback, so 5.19+ is what we recommend.

Too old? Update to a newer kernel package, or use a newer OS image, then re-check. On long-term-support distributions this often means installing a newer “hardware enablement” kernel.

Unprivileged user namespaces

The kernel must allow unprivileged user namespaces, which the sandboxes use to isolate automation execution. Most distributions enable this by default, and the installer automatically writes the common kernel settings (in /etc/sysctl.d/99-3b-userns.conf) where your kernel exposes them — including the AppArmor restriction Ubuntu ships.

cat /proc/sys/kernel/unprivileged_userns_clone 2>/dev/null   # 1 = enabled; absent = fine

You usually need to do nothing here. On a hardened or locked-down host, confirm with your platform team that user namespaces are not disabled by policy.

Command-line tools

Tool

Used by

Notes

curl

both scripts

Installer can install it if missing.

tar

bootstrap.sh

Installer can install it if missing.

unzip

bootstrap.sh

Installer can install it if missing.

oras

bootstrap.sh

Pulls the bundle from the OCI registry. Installer downloads it to /usr/local/bin/oras if missing.

openssl

setup.sh

Generates secrets and certificates. Install yourself if missing.

python3

setup.sh

Used during key generation. Install yourself if missing.

for t in curl tar unzip oras openssl python3; do
  command -v "$t" >/dev/null && echo "ok: $t" || echo "MISSING: $t"
done

If any are missing, install them with your package manager:

  • Debian / Ubuntu: sudo apt-get update && sudo apt-get install -y curl tar unzip openssl python3

  • Fedora / RHEL / Oracle (dnf): sudo dnf install -y curl tar unzip openssl python3

  • Older RHEL / CentOS (yum): sudo yum install -y curl tar unzip openssl python3

Step 3 — Confirm connectivity

Standard install

The server needs outbound HTTPS to:

  • oci.tines.com — the bundle and images live here, and it is the only source of the software (see step 1). Required for the first install and every update.

  • github.com — to fetch the small oras download tool.

Behind an outbound proxy? 3B can use it — you will set HTTP_PROXY, HTTPS_PROXY, and NO_PROXY during install. Make sure the proxy permits the hosts above.

Air-gapped install (server has no internet)

If the target server cannot reach the internet at all, it needs none of the above. Instead:

  1. Run the bootstrap on a separate, connected machine and choose the air-gapped option, which downloads a single self-contained bundle.

  2. Copy that bundle to the offline server and install from it.

The connected machine needs the same oci.tines.com access; the offline server needs none. Full steps are in the air-gapped installation guide.

Step 4 — Plan your URLs, DNS, and ports

3B is configured with four URLs (UI, API, public, and Zero sync — see connectivity requirements for what each does). On a new install the UI, API, and Zero sync URLs share one hostname by default, and the public URL gets its own — so you plan two hostnames under one root domain:

URL

Setting

Default from root domain example.com

UI

EXTERNAL_UI_URL

https://3b.example.com

API

EXTERNAL_API_URL

https://3b.example.com

Zero sync

ZERO_SYNC_URL

https://3b.example.com

Public

EXTERNAL_PUBLIC_URL

https://3b-public.example.com

DNS records (required)

Point each hostname at the server’s IP with a DNS A (or AAAA) record:

3b.example.com         →  <server IP>
3b-public.example.com  →  <server IP>

Why DNS is required: The built-in web front end serves everything on ports 80/443 and routes each request by hostname, so each hostname must resolve. An IP-only setup cannot tell the services apart. (Kubernetes also exposes the same front end on NodePorts 30080 / 30443 if you front it with a load balancer.)

Firewall ports

Setup

Inbound ports to open

HTTPS hostnames

80, 443

HTTP hostnames (evaluation only)

80

The install binds these directly on the host (nginx uses host ports 80 and 443).

Step 5 — Plan TLS / HTTPS

If you use https:// URLs (recommended), decide how encryption is handled. You will pick one of these during install:

  1. An upstream load balancer or proxy terminates TLS — something in front of the server already does HTTPS and forwards plain HTTP. You provide no certificate.

  2. A certificate already on the server — you have a full-chain certificate (PEM) and private key on the box. It must cover every hostname you configured.

  3. A self-signed certificate generated during install — fine for a quick POC; browsers warn until it is trusted.

HTTPS is effectively required, not just recommended. 3B expects requests to reach it over HTTPS, with TLS terminated somewhere in the request path — at 3B itself, or at a load balancer or proxy in front of it. This matters most for AI providers: configuring and using them depends on requests arriving over a secure (HTTPS) connection, so on a plain-HTTP install that step will not work.

Decide now: For option 2 you need the certificate and key files staged on the server before (or during) the install. Whichever option you choose, make sure something terminates TLS so 3B is reached over https://. See TLS termination for details.

Step 6 (optional) — Email (SMTP)

If you want 3B to send email (for example, user invitations), have ready:

  • An SMTP connection string (SMTP_URL).

  • A “from” address (EMAIL_FROM_ADDRESS).

These are optional and can be added later by editing /opt/3b/.env and re-running setup.sh.

You’re ready

When every box in the checklist is ticked, continue to the installation guide and run the installer.

Did this answer your question?