-
Notifications
You must be signed in to change notification settings - Fork 1
Unified Installer
An Ansible playbook that provisions a fresh Ubuntu 24.04/26.04 or
Debian Trixie machine (x64 or arm64) into a working Rivolution install
end to end — the same steps as Build From Source,
automated. Lives in its own repo,
rivolution-unified-installer,
separate from the application repo so the two can move at different
paces.
Tip
The standalone/Ubuntu path is a direct translation of the manual walkthrough above, already verified on a DigitalOcean droplet, a UTM VM, and physical hardware. Debian Trixie, the server/client install modes, advanced broadcast-tool mode, and security hardening are newly implemented and not yet verified end-to-end on real hardware — if you try one of those paths, open an issue with what you found.
./configure.sh is the interactive front end. It asks once for
install mode, build user, advanced mode, and security hardening, then
either pushes over SSH to a separate host you give it, runs directly
against the box you're already logged into (no SSH needed — this is
what you want if you SSH'd into the target yourself and are running
configure.sh on it directly), or writes a fully filled-in script for
you to paste into a cloud provider's startup-script field for a box
that doesn't exist yet. The target itself never has to answer a
prompt — by the time anything runs unattended, every answer is already
baked in.
git clone https://github.com/anjeleno/rivolution-unified-installer.gitcd rivolution-unified-installer && ./configure.shIf you'd rather skip the prompts, all three usage methods below also work by hand.
For a Droplet, UTM VM, or physical box that's already SSH-reachable as root (or any sudo-capable user), run this from a separate machine:
- Add the target to
inventory/hosts.ini. ansible-galaxy install -r requirements.ymlansible-playbook site.yml
If you're already logged into the box, run this on that same box,
as root or a user with passwordless sudo:
ansible-galaxy install -r requirements.ymlansible-playbook -i "localhost," -c local site.yml
bootstrap.sh is meant to be pasted directly into DigitalOcean's
Droplet creation screen (Additional Options → Startup scripts (Free)),
or run as-is on a freshly installed UTM VM / physical box. It installs
Ansible and uses ansible-pull to fetch the repo and run site.yml
against the local machine — no inbound SSH or separate control node
required. Edit the variables at the top of
bootstrap.sh
first, then paste the whole script in.
By default this builds the public anjeleno/rivolution repo on
main — no access or key needed to use the defaults as-is.
rivolution_install_mode (default standalone) picks one of three
shapes:
- standalone — everything local: database, audio store, desktop.
- server — standalone, plus the database and audio store exposed to other Rivendell hosts over NFS.
- client — only the Rivendell application itself, pointed at a remote MySQL/MariaDB host and a remote NFS-mounted audio store instead of provisioning either locally.
rivolution_advanced_broadcast_config (default false) deploys a
fixed bundle of broadcast-tool configuration — Icecast (with
install-time-generated passwords), Liquidsoap, VLC, JACK patches,
Stereo Tool (fetched directly from Thimeo, never bundled — see the
license note printed when this runs), and a seed database — as a
stopgap until the Rivolution Go dashboard exists to manage this
properly. Public, no SSH key or auth required. It's not a general
configuration tool: no per-feature prompts, just an on/off switch.
Two hard requirements:
-
rivolution_hostnamemust be exactlyonair— the seed data is keyed to that host name. The playbook fails fast if it isn't. - The first time this runs, it replaces the existing database (after an automatic backup). Safe to enable later on an already-provisioned host — it's guarded by its own marker, independent of the base install's.
Tip
This software is provided as-is, with no warranty. Keep your own backup too, not just the automatic one, if the existing database matters to you.
rivolution_harden_security (default false), independent of
advanced mode — installs ufw (allowing Icecast's port, SSH, and
optional external-IP/LAN-subnet allowances), then disables SSH
password authentication, but only if an authorized_keys file already
exists for the build user. If one doesn't exist yet, SSH hardening is
skipped with a warning instead of risking a lockout.
- Phase 0 — creating the Droplet, or installing a base OS on a UTM VM or physical box. This playbook starts from "fresh Ubuntu/Debian, reachable as root," not before.
- Disk imaging/cloning a literal golden image — this playbook is the replacement for that workflow, not an addition to it. Run it fresh on each target instead of cloning a disk image.
- Per-station configuration inside Rivendell itself (Dropboxes, carts, schedule codes, RDAdmin host settings) — this gets you to a running Rivendell with a test tone in the library, not a configured station.
Everything except the database/test-tone step is safe to re-run (it'll just confirm the existing state and move on). The database step is deliberately not idempotent — it drops and rebuilds the schema from scratch — so it's guarded by a marker file and only ever runs once per host.
See the repo's own README for full detail on every variable and the private-repo/deploy-key path.