Skip to content
Omisen edited this page Aug 17, 2026 · 16 revisions

Installer for Odoo 16 / 17 / 18 / 19 on Ubuntu ≥ 22.04, Debian ≥ 11 and Fedora ≥ 40, written in Rust, with transactional rollback:

Either the installation succeeds completely, or the system goes back to exactly what it was.

It sets up the system user, dependencies, PostgreSQL, the Odoo sources, a virtualenv, the config file, a systemd service and (optionally) Nginx — and if a step fails, it undoes everything it did without touching the resources that were already there.

All four versions install on all three families. Odoo 16 on Fedora gets an interpreter of its own — Python 3.12, installed for the occasion and removed by the rollback — because its newest gevent pin stops covering anything above 3.12. The ceiling is therefore per Odoo version rather than one number for all of them. The reasoning is in Multi-distribution support.


How to get it

A static binary, with no runtime to install first. Four routes: .tar.gz (any distro), .deb (Ubuntu/Debian), .rpm (Fedora) — all from the Releases page, each with its sha256 — or cargo install invok if you already have Rust. Full commands: README → Install.

The .deb and .rpm packages drop the invok command into /usr/bin plus the short alias vok, and nothing else: Odoo itself is installed at runtime, when you run the command.


Where to start

You are… Go to
🌱 New here, first run Quick start
🛠️ Developer / CI Non-interactive use and CI · Development and contributing
📦 Installing for a customer Customer installations

What sets this installer apart is what it guarantees when something goes wrongThe rollback model.

Running more than one Odoo on the same machine — a second customer, a version to try beside the one in production — is one command and one name → More than one instance.


Quick references

Where things live. The uninstall manifest is /var/lib/invok/state.json, the log /var/log/invok.log, the lock /run/invok.lock — all outside /opt/odoo, which is the perimeter the rollback must be able to remove whole.


What sets it apart

  • Surgical, verified rollback — proven by end-to-end tests and on real machines: the integration CI really installs and uninstalls, and checks that nothing is left behind.
  • One binary, no runtime — a native executable; git, the package manager, psql and venv stay external commands.
  • Multi-distribution with no scattered ifsapt and dnf sit behind two boundaries, and no step knows which distribution it runs on → Multi-distribution support.
  • Resumable — an interrupted installation picks up where it stopped, without losing track of what it had already created. A completed one is never silently overwritten.
  • Interruptible — Ctrl-C rolls back and restores the system instead of leaving it half-done.
  • One flow, two modes — guided (interactive) or non-interactive (--config/flags/CI).

What it does, step by step (technical detail)

Every step records a snapshot before mutating and exposes an undo. In execution order — 25 steps, of which the six Nginx ones only run with --with-nginx:

Foundations · Engine (Step trait, PreState, rollback) · Config (CLI, .env, cascade) · Preflight checks

Steps · PrepareOptRoot · CreateOdooUser · SetupLogDir · SetupCacheDir · AptPackages (delta) · InstallWkhtmltopdf · SetupPostgres · CreateDbRole · CreateDatabase · CloneOdooRepo · CreateVirtualenv · InstallPythonRequirements · GenerateConfig · SetupDataDir · InitializeOdooDatabase · SetupSystemd · Nginx (6 sub-steps) · WriteControlScript + PatchBashrc

Cross-cutting · UI + dry-run · End-to-end rollback + hardening

Clone this wiki locally