Instalando Odoo desde código fuente: guía paso a paso

De cero a producción en Linux, macOS y Windows WSL

Arte generativo Infrastructure Crystallization

1. Requisitos previos por sistema operativo

1.1 Linux — Debian / Ubuntu

Versiones recomendadas:

  • Odoo <= 16.0: Debian 11 (Bullseye), Debian 12 (Bookworm), Ubuntu 20.04, Ubuntu 22.04
  • Odoo >= 17.0: Debian 12 (Bookworm), Debian 13 (Trixie), Ubuntu 22.04, Ubuntu 24.04
  • Odoo 19.0: Debian 13 (Trixie), Ubuntu 24.04 (recomendado, porque trae Python 3.12)

Odoo.sh (la plataforma oficial de Odoo) trabaja sobre Debian, por lo que Debian es la distribución de referencia.

Debian 12 (Bookworm) — Python 3.11

sudo apt update && sudo apt upgrade -y
sudo apt install -y \
    git python3.11 python3.11-dev python3.11-venv python3-pip \
    libpq-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev \
    libjpeg-dev zlib1g-dev libfreetype6-dev wkhtmltopdf build-essential wget

Debian 13 (Trixie) — Python 3.12

sudo apt update && sudo apt upgrade -y
sudo apt install -y \
    git python3.12 python3.12-dev python3.12-venv python3-pip \
    libpq-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev \
    libjpeg-dev zlib1g-dev libfreetype6-dev wkhtmltopdf build-essential wget

Ubuntu 22.04 (Jammy) — Python 3.10

sudo apt update && sudo apt upgrade -y
sudo apt install -y \
    git python3.10 python3.10-dev python3.10-venv python3-pip \
    libpq-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev \
    libjpeg-dev zlib1g-dev libfreetype6-dev wkhtmltopdf build-essential wget

Ubuntu 24.04 (Noble) — Python 3.12

sudo apt update && sudo apt upgrade -y
sudo apt install -y \
    git python3.12 python3.12-dev python3.12-venv python3-pip \
    libpq-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev \
    libjpeg-dev zlib1g-dev libfreetype6-dev wkhtmltopdf build-essential wget

1.2 macOS

# Instalar Homebrew (si no está instalado)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Instalar dependencias
brew install python@3.12 postgresql git libxml2 libxslt jpeg libpng freetype wkhtmltopdf
brew services start postgresql

1.3 Windows (WSL)

Versión recomendada: Ubuntu 24.04 LTS (incluye Python 3.12). Ubuntu 22.04 LTS termina su soporte en menos de un año, por lo que se recomienda Ubuntu 24.04 para instalaciones nuevas.

1.3.1 Preparar Windows para WSL

Paso 1: habilitar la Plataforma de máquina virtual (requerido para WSL2)

El componente «Plataforma de máquina virtual» debe estar habilitado en Windows para que WSL2 funcione.

  • Abrir Panel de control > Programas > Activar o desactivar las características de Windows
  • Buscar y marcar Plataforma de máquina virtual
  • Reiniciar el equipo

Si no se habilita, al ejecutar wsl --install se producirá el siguiente error:

WSL2 no se puede iniciar porque la virtualización no está habilitada en esta máquina.
Código de error: Wsl/InstallDistro/Service/RegisterDistro/CreateVm/HCS/HCS_E_HYPERV_NOT_INSTALLED

Paso 2: activar la virtualización en la BIOS (si aplica)

Si la Plataforma de máquina virtual ya está habilitada pero el error persiste, hay que activar la virtualización en la BIOS/UEFI del equipo:

  • Reiniciar el equipo y entrar en la BIOS (normalmente con F2, F10 o Supr)
  • Buscar la sección CPU o Advanced
  • Activar Intel VT-x (Intel) o AMD-V (AMD)
  • Guardar y reiniciar

Nota: en máquinas virtuales (Proxmox, VMware, VirtualBox), la virtualización anidada debe estar habilitada en la configuración de la VM.

Paso 3: instalar WSL

Abrir PowerShell como administrador y ejecutar:

# Actualizar WSL a la última versión
wsl --update

# Reiniciar WSL
wsl --shutdown

# Ver las distribuciones disponibles
wsl --list --online

Paso 4: instalar Ubuntu 24.04

wsl --install -d Ubuntu-24.04

Si el nombre exacto no funciona, listar las distribuciones disponibles:

wsl --list --online

Ejemplo de salida:

NAME                    FRIENDLY NAME
Ubuntu                  Ubuntu
Ubuntu-26.04            Ubuntu 26.04 LTS
Ubuntu-24.04            Ubuntu 24.04 LTS
Ubuntu-22.04            Ubuntu 22.04 LTS
Debian                  Debian GNU/Linux
kali-linux              Kali Linux Rolling

Durante la instalación se pedirá crear un usuario y una contraseña:

Create a default Unix user account: fernando
New password:
Retype new password:

Paso 5: configurar el acceso SSH desde el host Windows (opcional)

Para acceder a la instancia WSL desde otras máquinas de la red local:

Desde dentro de Ubuntu (WSL):

sudo apt update && sudo apt install -y openssh-server
sudo systemctl start ssh
sudo systemctl status ssh

Desde PowerShell (como administrador), obtener la IP de WSL:

wsl hostname -I
# Ejemplo: 172.27.215.137

Configurar el reenvío de puertos en Windows para redirigir el tráfico SSH a WSL:

# Redirigir el puerto 2222 del host al puerto 22 de WSL
netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=172.27.215.137

# Crear una regla de firewall que permita el puerto 2222
New-NetFirewallRule -DisplayName "WSL SSH 2222" -Direction Inbound -Protocol TCP -LocalPort 2222 -Action Allow

Importante: la IP de WSL puede cambiar después de un reinicio. Ejecutar wsl hostname -I de nuevo si la conexión falla.

Conectar desde otra máquina:

ssh fernando@192.168.1.83 -p 2222

1.3.2 Instalar dependencias dentro de WSL (Ubuntu 24.04)

Una vez dentro de Ubuntu (WSL):

sudo apt update && sudo apt upgrade -y
sudo apt install -y \
    git python3.12 python3.12-dev python3.12-venv python3-pip \
    libpq-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev \
    libjpeg-dev zlib1g-dev libfreetype6-dev wkhtmltopdf build-essential wget

2. Crear el usuario de sistema odoo

El usuario odoo se usa para ejecutar el servicio con privilegios mínimos.

2.1 Linux (Debian/Ubuntu)

# Crear el usuario odoo con su directorio home en /opt/odoo
sudo useradd -m -d /opt/odoo -U -r -s /bin/bash odoo

# Añadirlo al grupo postgres (para acceso directo a la base de datos)
sudo usermod -aG postgres odoo

# Añadirlo a sudoers (opcional, para mantenimiento)
echo "odoo ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/odoo

2.2 macOS

# Crear el usuario odoo
sudo dscl . -create /Users/odoo
sudo dscl . -create /Users/odoo UserShell /bin/bash
sudo dscl . -create /Users/odoo RealName "Odoo Service"
sudo dscl . -create /Users/odoo UniqueID 1100
sudo dscl . -create /Users/odoo PrimaryGroupID 1000
sudo dscl . -create /Users/odoo NFSHomeDirectory /opt/odoo
sudo dscl . -append /Groups/admin GroupMembership odoo

# Crear el directorio home
sudo mkdir -p /opt/odoo
sudo chown odoo:admin /opt/odoo

3. Instalar PostgreSQL

3.1 Linux (Debian/Ubuntu)

sudo apt install -y postgresql
sudo systemctl enable postgresql
sudo systemctl start postgresql

3.2 macOS

brew install postgresql@15
brew services start postgresql@15

3.3 Windows (WSL)

Igual que en Linux: PostgreSQL se instala dentro de WSL.

3.4 Crear el usuario de PostgreSQL para Odoo

# Crear el rol de PostgreSQL (sin privilegios de superusuario)
sudo -u postgres createuser --createdb --no-superuser --no-createrole odoo

Importante: el usuario de PostgreSQL NO debe ser superusuario en producción. Solo necesita CREATEDB para crear bases de datos.


4. Instalar Python y el entorno virtual

4.1 Comprobar la versión de Python

python3 --version

4.2 Crear el entorno virtual

# Cambiar al usuario odoo
sudo su - odoo

# Crear el directorio de trabajo
mkdir -p /opt/odoo
cd /opt/odoo

# Crear el entorno virtual (usar la versión de Python instalada)
python3 -m venv /opt/odoo/odoo-venv

# Activar el entorno virtual
source /opt/odoo/odoo-venv/bin/activate

# Actualizar pip
pip install --upgrade pip

4.3 Versiones de Python compatibles con cada versión de Odoo

Versión de OdooPython recomendadoNotas
14.03.6 – 3.9
15.03.8 – 3.10
16.03.10No usar 3.12 (incompatibilidades con las dependencias)
17.03.10 – 3.11
18.03.10 – 3.12
19.03.11 – 3.12

Fuente oficial: odoo.com/documentation/18.0/administration/on_premise/source.html


5. Descargar el código de Odoo y los addons OCA con git-aggregator

5.1 Instalar git-aggregator

# Con el entorno virtual activado
pip install git-aggregator

5.2 Crear repos.yaml

Crear el archivo /opt/odoo/repos.yaml con los repositorios que se van a clonar. Sustituir 18.0 por la rama de Odoo que se quiera instalar.

Estructura básica (ejemplo para Odoo 18.0):

/opt/odoo/odoo:
  remotes:
    origin: https://github.com/odoo/odoo.git
  merges:
    - origin 18.0
  target: origin 18.0
  depth: 1

/opt/odoo/addons/account-analytic:
  remotes:
    origin: https://github.com/OCA/account-analytic.git
  merges:
    - origin 18.0
  target: origin 18.0
  depth: 1

/opt/odoo/addons/account-financial-tools:
  remotes:
    origin: https://github.com/OCA/account-financial-tools.git
  merges:
    - origin 18.0
  target: origin 18.0
  depth: 1

/opt/odoo/addons/account-invoicing:
  remotes:
    origin: https://github.com/OCA/account-invoicing.git
  merges:
    - origin 18.0
  target: origin 18.0
  depth: 1

/opt/odoo/addons/l10n-spain:
  remotes:
    origin: https://github.com/OCA/l10n-spain.git
  merges:
    - origin 18.0
  target: origin 18.0
  depth: 1

/opt/odoo/addons/server-tools:
  remotes:
    origin: https://github.com/OCA/server-tools.git
  merges:
    - origin 18.0
  target: origin 18.0
  depth: 1

/opt/odoo/addons/web:
  remotes:
    origin: https://github.com/OCA/web.git
  merges:
    - origin 18.0
  target: origin 18.0
  depth: 1

Estructura para Odoo 16.0 (cambiar la rama a 16.0):

/opt/odoo/odoo:
  remotes:
    origin: https://github.com/odoo/odoo.git
  merges:
    - origin 16.0
  target: origin 16.0
  depth: 1

/opt/odoo/addons/l10n-spain:
  remotes:
    origin: https://github.com/OCA/l10n-spain.git
  merges:
    - origin 16.0
  target: origin 16.0
  depth: 1

La clave depth: 1 hace un clonado superficial (shallow clone) que solo descarga el último commit de la rama, lo que reduce mucho el tiempo de descarga y el espacio en disco.

Repositorios OCA populares: el catálogo completo está en github.com/OCA

5.3 Ejecutar git-aggregator

# Con el entorno virtual activado y como usuario odoo
cd /opt/odoo
gitaggregate -c /opt/odoo/repos.yaml

5.4 Estructura resultante

/opt/odoo/
├── repos.yaml              # Configuración de git-aggregator
├── odoo-venv/              # Entorno virtual de Python
├── odoo/                   # Código fuente de Odoo (clonado por git-aggregator)
│   ├── odoo-bin
│   ├── addons/             # Módulos core de Odoo
│   └── ...
├── addons/                 # Repositorios OCA (clonados por git-aggregator)
│   ├── l10n-spain/
│   │   ├── l10n_es/
│   │   ├── l10n_es_aeat/
│   │   └── requirements.txt
│   ├── account-financial-tools/
│   └── ...
├── conf/                   # Archivos de configuración
│   └── odoo.conf
├── data/                   # Datos de Odoo (filestore, sesiones)
└── scripts/                # Scripts de arranque
    └── odoo-launcher.sh

6. Instalar las dependencias de Python

6.1 Dependencias del core de Odoo

# Con el entorno virtual activado
pip install -r /opt/odoo/odoo/requirements.txt

6.2 Dependencias de los repositorios OCA

# Buscar e instalar automáticamente todos los requirements.txt de los addons OCA
find /opt/odoo/addons -maxdepth 2 -name requirements.txt -exec \
    /opt/odoo/odoo-venv/bin/pip install --quiet -r {} \; 2>&1 | tail -20 || true

Qué hace: la búsqueda recorre los repositorios OCA de /opt/odoo/addons/ con una profundidad máxima de 2 niveles (raíz del repositorio más un subdirectorio), localiza cada requirements.txt y ejecuta pip install sobre él. El || true evita que el script falle si algún repositorio no tiene requirements.txt. Se usa profundidad 2 porque los repos OCA guardan su requirements.txt en la raíz del repositorio o en un subdirectorio directo.

6.3 Dependencias adicionales recomendadas

pip install \
    phonenumbers \
    num2words \
    PyPDF2 \
    python-stdnum \
    pytz \
    requests \
    simplejson \
    vatnumber \
    vcard \
    openpyxl \
    xlsxwriter

6.4 Dependencias de sistema para los informes PDF

# Linux (Debian/Ubuntu) - wkhtmltopdf viene en los repositorios oficiales
sudo apt install -y wkhtmltopdf

# macOS
brew install wkhtmltopdf

# Comprobar la instalación
wkhtmltopdf --version

Versión recomendada de wkhtmltopdf: 0.12.6.1 o superior. Consultar la tabla de compatibilidad de la sección 12.


7. Configurar Odoo

7.1 Crear los directorios

sudo mkdir -p /opt/odoo/conf
sudo mkdir -p /opt/odoo/data
sudo chown -R odoo:odoo /opt/odoo/conf /opt/odoo/data

7.2 Crear el archivo odoo.conf

cat > /opt/odoo/conf/odoo.conf << 'EOF'
[options]
; Conexión a PostgreSQL
db_host = localhost
db_port = 5432
db_user = odoo
db_password = False

; Contraseña del administrador (cambiar en producción)
admin_passwd = admin

; Directorios
addons_path = /opt/odoo/odoo/addons,/opt/odoo/addons
data_dir = /opt/odoo/data

; Configuración de red
proxy_mode = False

; Configuración de workers (0 = threading, N = prefork)
workers = 0
max_cron_threads = 1

; Límites de memoria (en bytes, solo aplica con workers > 0)
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_request = 8192
limit_time_cpu = 60
limit_time_real = 120

; Datos de demostración (False = sin datos de demostración)
without_demo = False

; Base de datos
db_template = template1
EOF

7.3 Asignar permisos según el sistema operativo

Linux (Debian/Ubuntu)

sudo chown odoo:odoo /opt/odoo/conf/odoo.conf
sudo chmod 640 /opt/odoo/conf/odoo.conf

macOS

sudo chown odoo:admin /opt/odoo/conf/odoo.conf
sudo chmod 640 /opt/odoo/conf/odoo.conf

Sobre data_dir: este parámetro define dónde guarda Odoo el filestore (los archivos adjuntos), las sesiones, la caché y otros datos temporales. En esta configuración apunta a /opt/odoo/data.


8. Lanzador con addons_path dinámico

El lanzador construye --addons-path sobre la marcha escaneando los repositorios clonados en /opt/odoo/addons/ e incluyendo solo los directorios que contienen módulos de verdad (los que tienen __manifest__.py). Así, añadir o quitar repositorios con git-aggregator nunca obliga a editar a mano el archivo de configuración.

8.1 Crear el script del lanzador

cat > /opt/odoo/scripts/odoo-launcher.sh << 'LAUNCHER'
#!/bin/bash
set -e

ODOO_BIN="/opt/odoo/odoo/odoo-bin"
ODOO_CONF="/opt/odoo/conf/odoo.conf"
PYTHON="/opt/odoo/odoo-venv/bin/python3"
ADDONS_BASE="/opt/odoo/odoo/addons"
ADDONS_OCA="/opt/odoo/addons"

ADDONS_PATH="${ADDONS_BASE}"

if [ -d "${ADDONS_OCA}" ]; then
    for dir in "${ADDONS_OCA}"/*/; do
        if [ -d "$dir" ]; then
            if find "$dir" -maxdepth 2 -name __manifest__.py -print -quit 2>/dev/null | grep -q .; then
                ADDONS_PATH="${ADDONS_PATH},${dir%/}"
            fi
        fi
    done
fi

if [ "$1" = "shell" ]; then
    shift
    exec "${PYTHON}" "${ODOO_BIN}" shell \
        --config="${ODOO_CONF}" \
        --addons-path="${ADDONS_PATH}" \
        "$@"
elif [ "$1" = "init" ]; then
    DB=${2:-odoo}
    shift 2
    exec "${PYTHON}" "${ODOO_BIN}" \
        --config="${ODOO_CONF}" \
        --addons-path="${ADDONS_PATH}" \
        -d "${DB}" -i base --stop-after-init --no-http --workers=0 \
        "$@"
else
    exec "${PYTHON}" "${ODOO_BIN}" \
        --config="${ODOO_CONF}" \
        --addons-path="${ADDONS_PATH}" \
        "$@"
fi
LAUNCHER

chmod +x /opt/odoo/scripts/odoo-launcher.sh

8.2 Usar el lanzador

# Iniciar Odoo normalmente
/opt/odoo/scripts/odoo-launcher.sh --http-port=8069

# Abrir el shell de Odoo
/opt/odoo/scripts/odoo-launcher.sh shell

# Crear la base de datos inicial
/opt/odoo/scripts/odoo-launcher.sh init mi_base_de_datos

9. Arrancar Odoo

9.1 Modo desarrollo (directamente)

# Cambiar al usuario odoo
sudo su - odoo

# Arrancar con el lanzador dinámico (usa él mismo el intérprete del venv)
/opt/odoo/scripts/odoo-launcher.sh --http-port=8069

9.2 Crear la base de datos inicial

# En el navegador, acceder a:
# http://localhost:8069/web/database/manager

# O desde la línea de comandos:
/opt/odoo/scripts/odoo-launcher.sh init mi_base_de_datos

9.3 Servicio systemd (producción)

cat > /tmp/odoo.service << 'EOF'
[Unit]
Description=Odoo 18.0
After=network.target postgresql.service

[Service]
Type=simple
SyslogIdentifier=odoo
PermissionsStartOnly=true
User=odoo
Group=odoo
ExecStart=/opt/odoo/scripts/odoo-launcher.sh
StandardOutput=journal+console

[Install]
WantedBy=multi-user.target
EOF

sudo cp /tmp/odoo.service /etc/systemd/system/odoo.service

# Habilitar e iniciar
sudo systemctl daemon-reload
sudo systemctl enable odoo
sudo systemctl start odoo

# Ver los registros
sudo journalctl -u odoo -f

10. Tabla de compatibilidad por versión

VersiónPythonPostgreSQLDebianUbuntuwkhtmltopdfNotas
14.03.6-3.910-141118.04-20.040.12.5
15.03.8-3.1010-1411-1220.04-22.040.12.5
16.03.1012-151222.040.12.6.1No usar Python 3.12
17.03.10-3.1112-151222.04-24.040.12.6.1
18.03.10-3.1212-1612-1322.04-24.040.12.6.1
19.03.11-3.1214-161324.040.12.6.1

Fuente: las tablas de compatibilidad del propio fabricante en odoo.com/documentation/18.0/administration/on_premise/packages.html


11. Tablas de dependencias por versión

Fuente: análisis directo de los archivos requirements.txt del repositorio oficial de Odoo (github.com/odoo/odoo) en cada rama. Los valores son las versiones exactas que Odoo instala por defecto. Los valores en negrita son fijaciones críticas que NO deben cambiarse.

11.1 Odoo 16.0 (Python 3.10, Ubuntu 22.04 Jammy)

PaqueteVersiónNotas
Babel2.9.1
chardet4.0.0
cryptography3.4.8No usar >= 37.0 en Python < 3.12
decorator4.4.2
docutils0.16
ebaysdk2.1.5
freezegun0.3.15
gevent22.10.2Solo para Python > 3.10 y < 3.12
greenlet2.0.2Solo para Python > 3.10 y < 3.12
idna2.10
Jinja23.1.2Para Python > 3.10
libsass0.20.1Para Python < 3.12
lxml4.9.3Para Python > 3.10 y < 3.12
MarkupSafe2.1.2Para Python > 3.10 y < 3.12
num2words0.5.9
ofxparse0.21
passlib1.7.4
Pillow9.4.0Para Python > 3.10 y < 3.12
polib1.1.0
psutil5.9.4Para Python > 3.10 y < 3.12
psycopg22.9.5Para Python >= 3.11 y < 3.12
PyDot1.4.2
pyparsing2.4.7
pyserial3.5
python-dateutil2.8.2
python-stdnum1.17
pytz2022.7
qrcode7.4.2
reportlab3.6.12
requests2.28.2
rjsmin1.0.1
simplejson3.19.1
six1.16.0
urllib31.26.5
vobject0.9.6.1
Werkzeug2.0.2No usar >= 2.1
xlrd2.0.1
xlwt1.3.0
xlsxwriter3.0.3
xlwings0.29.12Solo Windows

11.2 Odoo 18.0 (Python 3.10-3.12, Ubuntu 22.04 / 24.04)

PaqueteVersión (Py 3.10)Versión (Py >= 3.12)Notas
Babel2.9.12.9.1
chardet4.0.04.0.0
cryptography3.4.842.0.8
decorator4.4.24.4.2
docutils0.170.20.1
freezegun0.3.150.3.15
gevent21.8.024.2.1
greenlet1.1.23.0.3
idna2.102.10
Jinja22.11.33.1.2
libsass0.20.10.22.0
lxml4.6.55.2.1
MarkupSafe1.1.12.1.5
num2words0.5.120.5.12
ofxparse0.210.21
passlib1.7.41.7.4
Pillow9.0.110.2.0
polib1.1.01.1.0
psutil5.8.05.9.8
psycopg22.9.22.9.9
PyPDF23.0.13.0.1
PySocks1.7.11.7.1
python-dateutil2.8.22.9.0
python-stdnum1.171.17
pytz2022.72024.1
qrcode7.4.27.4.2
reportlab4.0.84.1.0
requests2.31.02.31.0
rjsmin1.2.01.2.0
simplejson3.19.23.19.2
urllib32.0.72.2.2
vobject0.9.6.10.9.6.1
Werkzeug2.3.83.0.6
xlrd2.0.12.0.1
xlsxwriter3.1.93.1.9
xlwings0.29.120.30.10Solo Windows
zeep4.2.14.2.1

11.3 Odoo 19.0 (Python 3.11-3.12, Debian 13 / Ubuntu 24.04)

PaqueteVersiónNotas
Babel2.15.0
chardet4.0.0
cryptography43.0.3
decorator4.4.2
docutils0.21.1
gevent24.11.1
greenlet3.1.1
Jinja23.1.4
lxml5.3.0
MarkupSafe2.1.5
num2words0.5.13
passlib1.7.4
Pillow10.4.0
polib1.2.0
psutil5.9.8
psycopg22.9.9
PyPDF23.0.1
python-dateutil2.9.0
python-stdnum1.17
pytz2024.2
qrcode7.4.2
reportlab4.2.2
requests2.32.3
rjsmin1.2.0
simplejson3.19.2
Werkzeug3.1.3
xlrd2.0.1
xlsxwriter3.2.0

12. Tabla de wkhtmltopdf por distribución

DistribuciónPaquete aptVersión incluidaVersión recomendada
Debian 11 (Bullseye)wkhtmltopdf0.12.6-10.12.6-1
Debian 12 (Bookworm)wkhtmltopdf0.12.6-2+b10.12.6-2+b1
Debian 13 (Trixie)wkhtmltopdf0.12.6-2+b10.12.6-2+b1
Ubuntu 20.04 (Focal)wkhtmltopdf0.12.5-10.12.5-1
Ubuntu 22.04 (Jammy)wkhtmltopdf0.12.6.1-20.12.6.1-2 (recomendada)
Ubuntu 24.04 (Noble)wkhtmltopdf0.12.6.1-20.12.6.1-2 (recomendada)

12.1 Instalación manual (cuando la versión del repositorio no basta)

Descargar desde github.com/wkhtmltopdf/packaging/releases:

Sistema operativoArquitecturaPaquete
Ubuntu 22.04 (Jammy)amd64wkhtmltox_0.12.6.1-3.jammy_amd64.deb
Ubuntu 22.04 (Jammy)arm64wkhtmltox_0.12.6.1-3.jammy_arm64.deb
Ubuntu 20.04 (Focal)amd64wkhtmltox_0.12.6-1.focal_amd64.deb
Debian 12 (Bookworm)amd64wkhtmltox_0.12.6.1-3.bookworm_amd64.deb
Debian 12 (Bookworm)arm64wkhtmltox_0.12.6.1-3.bookworm_arm64.deb
Debian 11 (Bullseye)amd64wkhtmltox_0.12.6.1-3.bullseye_amd64.deb
Debian 11 (Bullseye)arm64wkhtmltox_0.12.6.1-3.bullseye_arm64.deb
macOScocoawkhtmltox-0.12.6-2.macos-cocoa.pkg

Ubuntu 24.04 (Noble): el proyecto no publica ningún paquete para Noble. Hay que instalarlo desde los repositorios de la distribución (sudo apt install -y wkhtmltopdf, que trae la 0.12.6.1-2) o usar la build de Jammy, que funciona en Noble.


13. Problemas frecuentes

13.1 Error «psycopg2» al instalar las dependencias

# Instalar libpq-dev (las cabeceras de PostgreSQL)
sudo apt install -y libpq-dev

# Si falla, instalar desde un wheel
pip install psycopg2-binary

13.2 Error «wkhtmltopdf» no encontrado

# Instalar desde los repositorios oficiales
sudo apt install -y wkhtmltopdf

# Si la versión del repositorio es demasiado antigua, instalarlo manualmente.
# Todas las versiones disponibles están en:
# https://github.com/wkhtmltopdf/packaging/releases

13.3 Error de permisos en la base de datos

# Comprobar que el rol odoo existe en PostgreSQL
sudo -u postgres psql -c "\du odoo"

# Si no existe, crearlo:
sudo -u postgres createuser --createdb --no-superuser odoo

13.4 Error: «gevent» no compila

# Instalar las dependencias de compilación
sudo apt install -y python3-dev build-essential libffi-dev

# Para Odoo 16.0, fijar las versiones:
pip install gevent==22.10.2 greenlet==2.0.2

13.5 Odoo no arranca: «addons path not found»

# Comprobar que las rutas existen
ls -la /opt/odoo/odoo/addons
ls -la /opt/odoo/addons

# Ejecutar el lanzador directamente para ver la ruta que construye
/opt/odoo/scripts/odoo-launcher.sh --http-port=8069

13.6 WSL: «WSL2 no se puede iniciar porque la virtualización no está habilitada»

Este error aparece cuando la Plataforma de máquina virtual no está habilitada en Windows.

# Solución 1: habilitar la Plataforma de máquina virtual
# Abrir Panel de control > Activar o desactivar las características de Windows
# Marcar «Plataforma de máquina virtual»
# Reiniciar el equipo

# Solución 2: activar la virtualización en la BIOS/UEFI
# Reiniciar el equipo > entrar en la BIOS (F2/F10/Supr)
# Buscar la sección CPU > Advanced
# Activar Intel VT-x (Intel) o AMD-V (AMD)
# Guardar y reiniciar

# Solución 3: en máquinas virtuales (Proxmox, VMware, VirtualBox)
# Habilitar la virtualización anidada en la configuración de la VM
# Proxmox: VM > Options > Processor > vCPU type = host
# VMware: VM > Settings > Processor > Virtualize Intel VT-x/EPT
# VirtualBox: VM > Settings > System > Acceleration > Enable VT-x/AMD-V

13.7 WSL: la IP de WSL cambia después de un reinicio

# Obtener la nueva IP de WSL
wsl hostname -I

# Actualizar el reenvío de puertos
netsh interface portproxy delete v4tov4 listenport=2222 listenaddress=0.0.0.0
netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=<NUEVA_IP>

13.8 WSL: el SSH no funciona desde el host

# Comprobar que el servicio SSH está corriendo dentro de WSL
wsl -d Ubuntu-24.04 -u root -- service ssh status

# Reiniciar el servicio SSH si hace falta
wsl -d Ubuntu-24.04 -u root -- service ssh restart

# Comprobar la regla de firewall
Get-NetFirewallRule -DisplayName "WSL SSH 2222"

# Si no existe, crearla de nuevo
New-NetFirewallRule -DisplayName "WSL SSH 2222" -Direction Inbound -Protocol TCP -LocalPort 2222 -Action Allow

Referencias

¿Puede la IA arreglar mi teléfono?
Un teléfono que «se había roto» y mostraba todas las imágenes en blanco y negro. Dos minutos de preparación, un prompt y un diagnóstico que nadie esperaba.