No description
Find a file
Mathieu Benoit b5209ee226 [ADD] VM imbriquées : déployer sur Proxmox, mesurer la profondeur
Vingt-six commits : le déploiement Proxmox durci par l'usage, et deux tests
longs qui créent de vraies machines pour mesurer ce qu'aucune documentation ne
dit.

CE QUE LES MESURES ONT ÉTABLI

Sur 28 cœurs AMD, trois étages d'hyperviseurs imbriqués tiennent en 16 minutes
pour QEMU, 34 pour Proxmox. Le quatrième FONCTIONNE — un Proxmox s'y est
installé complètement — mais coûte 15 à 30 fois plus : 4 h 20 d'amorçage et
7 h 18 d'installation. Ce n'est pas un refus du matériel, c'est une
dégradation super-linéaire, et elle tombe là où les fabricants cessent de
documenter l'imbrication. La profondeur par défaut est donc trois.

CE QUE LES TESTS PROUVENT AU LIEU DE SUPPOSER

deploy_qemu.py n'échoue pas quand /dev/kvm manque : il pose --virt-type qemu
et crée une VM ÉMULÉE, sept minutes et demie de démarrage, sans qu'aucun code
de retour ne le dise. Chaque étage doit montrer /dev/kvm, « nested » à Y et un
domaine en type='kvm' — ce qui n'a pas été lu vaut NON. Sans cela, la descente
mesurerait de la TCG empilée en croyant mesurer de l'imbrication.

CE QUE « --detruire » NE FAIT JAMAIS

Détruire ce qu'il n'a pas créé. Un champ « cree », écrit à l'instant où la
machine existe, commande la liste, le repli par nom et le retrait des entrées
~/.ssh/config ; il refuse tant qu'une descente tourne, et chaque pile ne voit
que ses propres rapports.

CÔTÉ PROXMOX

Le pont interne ne prend plus l'adresse de sa propre passerelle, pmxcfs est
remis debout par l'écran lui-même, le suivi reconnaît une VM par son VMID et
son hôte plutôt que par son nom, et le pare-feu n'est plus démarré depuis
l'extérieur.

--- EN ---

Twenty-six commits: Proxmox deployment hardened by use, and two long tests
that create real machines to measure what no documentation states.

WHAT THE MEASUREMENTS ESTABLISHED

On 28 AMD cores, three levels of nested hypervisors take 16 minutes for QEMU,
34 for Proxmox. The fourth WORKS — a Proxmox installed completely there — but
costs 15 to 30 times more: 4h20 of boot and 7h18 of install. Not a hardware
refusal, a super-linear degradation, landing exactly where vendors stop
documenting nesting. The default depth is therefore three.

WHAT THE TESTS PROVE INSTEAD OF ASSUMING

deploy_qemu.py does not fail when /dev/kvm is missing: it sets --virt-type
qemu and creates an EMULATED VM, seven and a half minutes to boot, with no
exit code to say so. Every level must show /dev/kvm, "nested" at Y and a
type='kvm' domain — what was not read counts as NO. Without that, the descent
would measure stacked TCG believing it measured nesting.

WHAT "--detruire" NEVER DOES

Destroy what it did not create. A "cree" field, written the instant the
machine exists, governs the list, the fallback to the name and the removal of
~/.ssh/config entries; it refuses while a descent runs, and each stack sees
only its own reports.

ON THE PROXMOX SIDE

The internal bridge no longer takes its own gateway's address, pmxcfs is
brought back up by the screen itself, the monitor identifies a VM by its VMID
and host rather than by its name, and the firewall is no longer started from
outside.

Assisted-by: claude-opus-5
2026-08-29 02:08:25 -04:00
.claude [ADD] make: une cible pour les tests unitaires, dépendance mobile déclarée 2026-08-23 02:11:50 -04:00
.github Update issue templates 2026-03-08 16:05:48 -04:00
conf [ADD] make: une cible pour les tests unitaires, dépendance mobile déclarée 2026-08-23 02:11:50 -04:00
contracts [ADD] contracts: add Odoo sync API contract and note mapping 2026-08-07 01:05:37 -04:00
doc [ADD] run: choisir la base au démarrage, sans jamais bloquer 2026-08-23 17:26:41 -04:00
docker [ADD] test: what the tooling imports must be declared 2026-08-17 00:40:01 -04:00
long_test [FIX] long_test : bail attendu, rallumage à froid, marge mémoire 2026-08-29 01:53:03 -04:00
manifest [FIX] todo qemu: find the APK where AGP writes it, and install it as it is 2026-08-23 02:07:42 -04:00
mobile [FIX] mobile: the bundle check refused a real build 2026-08-25 03:28:39 -04:00
private [ADD] migration: see and repair the website COW views 2026-08-10 03:10:50 -04:00
requirement [FIX] odoo 15: declare xlsxwriter, which report_xlsx has always needed 2026-08-23 02:20:23 -04:00
script [UPD] imbrication : le plan QEMU vise 24 Go au premier étage 2026-08-29 01:53:03 -04:00
test [FIX] long_test : bail attendu, rallumage à froid, marge mémoire 2026-08-29 01:53:03 -04:00
.editorconfig [UPD] format with script format.sh 2023-12-02 14:14:23 -05:00
.erplibre-semver-version [IMP] support multi version odoo on same workspace 2025-10-31 01:36:26 -04:00
.flake8 [ADD] maintainer-tools to autopep8, flake8 and pylint-odoo 2021-06-27 00:36:52 -04:00
.gitignore [UPD] mobile rename repo for erplibre_home_mobile 2025-12-28 00:48:38 -05:00
.prettierignore [ADD] makefile: prettier format code_generator 2023-01-01 02:59:33 -05:00
AI_POLICY.base.md [ADD] doc: adopt the OCA generative AI policy 2026-08-07 01:16:20 -04:00
AI_POLICY.fr.md [ADD] doc: adopt the OCA generative AI policy 2026-08-07 01:16:20 -04:00
AI_POLICY.md [ADD] doc: adopt the OCA generative AI policy 2026-08-07 01:16:20 -04:00
CHANGELOG.base.md [FIX] deep_qemu : listes apt, sous-réseau par étage, étape muette 2026-08-29 01:53:03 -04:00
CHANGELOG.fr.md [FIX] deep_qemu : listes apt, sous-réseau par étage, étape muette 2026-08-29 01:53:03 -04:00
CHANGELOG.md [FIX] deep_qemu : listes apt, sous-réseau par étage, étape muette 2026-08-29 01:53:03 -04:00
CLAUDE.md [FIX] deep_qemu : listes apt, sous-réseau par étage, étape muette 2026-08-29 01:53:03 -04:00
coverage_run.sh [IMP] refactoring to support multiple version of Odoo 2025-10-31 01:32:11 -04:00
docker-compose-dev.yml [ADD] docker : new hierchical layout 2020-09-30 20:52:04 -04:00
docker-compose.yml [UPD] docker odoo 18 2026-02-05 02:07:47 -05:00
env_var.sh [ADD] install: uv to place Python packages, pip as fallback 2026-08-16 23:33:49 -04:00
install.sh [IMP] refactoring .venv.erplibre 2025-10-31 01:34:26 -04:00
LICENSE Initial commit 2020-04-12 21:20:13 -04:00
Makefile [FIX] script todo: configurer le projet PyCharm avec le venv, et réessayer 2026-08-23 02:07:42 -04:00
odoo_bin.sh [IMP] refactoring .venv.erplibre 2025-10-31 01:34:26 -04:00
package-lock.json [UPD] change 1.5.0 to 1.6.0 2025-04-25 23:25:43 -04:00
package.json [UPD] change 1.5.0 to 1.6.0 2025-04-25 23:25:43 -04:00
poetry.toml [UPD] poetry: version 1.1.12 2022-01-24 17:56:10 -05:00
README.base.md [UPD] readme: the platforms we actually support 2026-08-17 01:01:50 -04:00
README.fr.md [UPD] readme: the platforms we actually support 2026-08-17 01:01:50 -04:00
README.md [UPD] readme: the platforms we actually support 2026-08-17 01:01:50 -04:00
run.sh [ADD] run: choisir la base au démarrage, sans jamais bloquer 2026-08-23 17:26:41 -04:00
source_repo_addons.csv [ADD] repo JayVora-SerpentCS SerpentCS_Contributions 2024-05-03 23:27:06 -04:00
test.sh [IMP] support multi version odoo on same workspace 2025-10-31 01:36:26 -04:00
TODO.base.md [ADD] Multilingual translation of all documentation (EN/FR) 2026-03-04 22:23:52 -05:00
TODO.fr.md [ADD] Multilingual translation of all documentation (EN/FR) 2026-03-04 22:23:52 -05:00
TODO.md [ADD] Multilingual translation of all documentation (EN/FR) 2026-03-04 22:23:52 -05:00

ERPLibre

ERPLibre is a CRM/ERP platform including automated installation, maintenance, and development of open source modules of the Odoo community version. It is a "soft-fork" of the Odoo Community Edition (OCE), meaning it aims at contributing back upstream. It is based on a set of production-ready modules, supported by the Odoo Community Association (OCA) and an ecosystem of specialized companies. This solution ensures digital sovereignty in a local environment while integrating pre-trained Generative Transformers (GPT), bringing an additional dimension to data management and automation.

Follow us on Mastodon : https://fosstodon.org/@erplibre

Features

  • Multi-version Odoo support : run Odoo 12.0, 13.0, 14.0, 15.0, 16.0, 17.0 and 18.0 in the same workspace, with independent Python virtual environments (.venv.erplibre and .venv.odooXX)
  • Interactive CLI (TODO.py) : guided interactive tool for installation, execution, database management, code formatting, mobile compilation, and more. Launch it with make
  • Code generator : generate Odoo modules automatically with support for views, portal, snippets, inheritance, i18n, and JavaScript
  • Selenium automation : web testing and automation with Selenium Grid, video recording, and login automation
  • Mobile application : ERPLibre Home Mobile (Owl + Capacitor), compiled and deployed via TODO.py
  • Docker deployment : production-ready Docker images with PostgreSQL 18 and PostGIS
  • Deployment tools : Nginx, Apache, Cloudflare DDNS, Certbot SSL, systemd services
  • Database tools : backup, restore, clone, migration between versions, production-to-dev migration
  • Performance tools : request-per-second measurement, parallel test execution, coverage analysis

Supported Odoo versions

Odoo version Python Status
18.0 3.12.10 Active
17.0 3.10.18 Inactive
16.0 3.10.18 Inactive
15.0 3.8.20 Deprecated
14.0 3.8.20 Deprecated
13.0 3.7.17 Deprecated
12.0 3.7.17 Deprecated

Switch between versions with make switch_odoo_18, make switch_odoo_16, etc.

Supported platforms

  • Ubuntu : 24.04, 25.10, 26.04 — 20.04 and 22.04 are dropped, pikepdf requiring a qpdf 12.2 built in C++20
  • Linux Mint : 22.3
  • Debian : 12 (bookworm) and 13 (trixie)
  • Fedora : 41 and later
  • AlmaLinux, Rocky Linux : 9 and 10 — RHEL and CentOS Stream take the same path
  • openSUSE : Leap 16.0 and Tumbleweed
  • Arch Linux : rolling release
  • macOS : through mise or pyenv
  • Windows : through WSL or Docker
  • Architectures : amd64, arm64 and s390x (IBM Z mainframe)

Installation in production

Easy installation on Ubuntu or Debian using Docker

This has been tested in Debian 12 and Ubuntu 24.04 LTS.

Note : This is meant for a test environment, on a local network or similar environment not directly exposed to the Internet.

  1. Make sure Docker and nginx web server are installed:
    sudo apt install docker.io docker-compose-v2 nginx

  2. Get the latest ERPLibre Docker compose file:
    wget https://raw.githubusercontent.com/ERPLibre/ERPLibre/master/docker-compose.yml

  3. Install and run ERPLibre with Docker running as a daemon (web server):
    sudo docker compose up -d

  4. Open the final installation step at this web page :
    http://[server IP]:8069/web/database/manager
    odoo_first_installation.png

  5. Finish the installation by providing a database name, email and password. then click on Create Database. Depending on your system resources this may take more than 2 minutes without feedback ! Check your browser loading indicator.

  6. Next, the web page will reload itself, and you should see the Applications list in ERPLibre:
    odoo_application_list.png

    You can now personalize your ERPLibre installation.

For more information, read Docker guide.

Install from source code

Automated installation

For Debian/Ubuntu

sudo apt install make python3

Clone the project:

git clone https://github.com/ERPLibre/ERPLibre.git
cd ERPLibre

Follow the instruction on the following script, it will try to detect your environment.

make

Manually

Into Ubuntu, minimal dependency:

sudo apt install make git curl

Into Ubuntu, developer dependency:

sudo apt install make build-essential libssl-dev zlib1g-dev libreadline-dev libsqlite3-dev curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev liblzma-dev libbz2-dev libldap2-dev libsasl2-dev

Clone the project:

git clone https://github.com/ERPLibre/ERPLibre.git
cd ERPLibre

make install_os detects the distribution and picks the right dependency script: apt for Ubuntu, Linux Mint and Debian, dnf for Fedora and the RHEL family, zypper for openSUSE, pacman for Arch. See the supported platforms above.

make install_os
make install_odoo_18

Install a specific Odoo version:

make install_odoo_16
make install_odoo_17
make install_odoo_18

Update your configuration if you need to run from another interface than 127.0.0.1, file config.conf

xmlrpc_interface = 0.0.0.0

Show version :

make version

Ready to execute:

make run

Test

Execute ERPLibre test with his code generator.

time make test_full_fast

Documentation

Guide Description
DISCOVER Learn and explore ERPLibre
DEVELOPMENT Development environment setup
PRODUCTION Production server deployment
RUN Execution modes and use cases
CODE_GENERATOR Odoo module code generation
MIGRATION Database migration between versions
GIT_REPO Git repository management
POETRY Python dependency management
FAQ Frequently asked questions
HOWTO How-to guides
WINDOWS_INSTALLATION Windows installation

Contributing

See CONTRIBUTION.md for guidelines.

License

This project is licensed under the GNU Affero General Public License v3.0.