Install Script
scripts/install.sh is the curl-bash bootstrapper that gets new users from “blank machine” to “running Quazzar Cloud OS” in about 90 seconds. Phase В.1 of the GA roadmap polished it — preflight checks, idempotent re-run, phased progress, debug bundle on failure, rollback, and CLI flags.
Usage
curl -fsSL https://get.quazzar.cloud/install | sudo bashFor non-interactive (CI / cloud-init) installs:
curl -fsSL https://get.quazzar.cloud/install | sudo bash -s -- --unattendedSupported platforms
- Ubuntu 22.04 / 24.04
- Debian 12+
- Rocky Linux / AlmaLinux / RHEL 9+
- Fedora 39+
Architectures: x86_64 (amd64), aarch64 (arm64).
The installer aborts gracefully on unsupported distros. Pre-flight checks run before any state-changing operation.
Phases
The install runs in six phases; each prints [N/6] <label>:
- Pre-flight checks — distro, arch, /var disk (warn
<10G, fail<4G), RAM (warn<1500M, fail<800M), systemd present, sudo/root, ports 80/443 (warn if occupied — Caddy falls back to 8080 automatically), outbound HTTPS toapt.quazzar.space. - Adding Quazzar repository — GPG key import, repo file write. Skipped if already present (idempotent re-run).
- Installing quazzar packages —
quazzar+quazzar-clifrom APT or DNF. - Starting services —
systemctl enable --now quazzar. - Waiting for health — polls
http://127.0.0.1:8080/api/healthfor 30s. - Done — prints login URL + recovery info.
Idempotent re-run
If quazzar is already installed, the script:
- Exits 0 with a message if the installed version matches the candidate.
- Upgrades in-place if a newer candidate exists (apt
--only-upgrade/ dnfupgrade). - Refuses to downgrade unless
--allow-downgradeis passed.
Failure handling
A single ERR trap fires on any error:
[FAIL] Install failed at phase 3 (Installing quazzar packages).
Last 100 lines of journald for quazzar.service:
…dump…
Run this and paste the URL into your support ticket:
quazzar-cli debug-bundle | curl --upload-file - https://0x0.stThe ROLLBACK_ACTIONS array tracks every state-mutating operation (GPG key write, repo file write, package install, service enable, port override) and walks them in reverse on hard error so the next attempt starts clean.
In --unattended mode the journald dump is suppressed (CI reads the exit code instead).
Flags
| Flag | Default | Effect |
|---|---|---|
--unattended | off | Skip prompts; warns become errors. CI / cloud-init friendly. |
--channel=<stable|testing> | stable | Pick repo channel. |
--port=<n> | 8080 | Override OS web port; written to /etc/quazzar/web.port. |
--no-tunnel | off | Skip pair-tunnel setup (air-gapped installs). |
--allow-downgrade | off | Permit a version downgrade. |
--skip-health | off | Skip phase 5 (used by image bakers). |
--register=<env_file> | off | Auto-register the node with a Quazzar Control Panel after install (Phase Г.4 cluster autoscaling — set by cloud-init bootstraps). The env file must define QUAZZAR_REGISTER_URL, QUAZZAR_REGISTER_TOKEN, QUAZZAR_TENANT_ID. Implies --unattended. |
--help | — | Print this list. |
--unattended implies DEBIAN_FRONTEND=noninteractive for apt and -y for dnf.
Where it lives
scripts/install.sh— master copy (867 lines, shellcheck clean).quazzar-cloud-landing/install.sh— byte-for-byte mirror served by the landing page.
Updates land in both files together.