Skip to content
Omisen edited this page Aug 14, 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.


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.


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