Cuando Odoo presenta nuevas versiones, incluye muchas funcionalidades y módulos nuevos. El problema surge debido a que Odoo no incorpora un proceso de actualización automática en la versión Community, aunque podemos actualizar a una versión superior utilizando Openupgrade, un proyecto gratuito que está disponible en github y nos permite migrar nuestra base de datos Postgres de Odoo.

Puede actualizar cualquier versión, por ejemplo, Odoo 10.0 -> Odoo 11.0, Odoo 11-> Odoo 12.

El problema es que no podemos migrar dos o más versiones, sí queremos migrar desde Odoo 10 a Odoo 12, primero debemos migrar de Odoo 10 a Odoo 11 y de Odoo 11.0 a Odoo 12.

Como este proceso es bastante complejo y la idea es pasar de Odoo 10 a Odoo 14 una base de datos en producción, voy a documentarlo todo ya que cuando funcione tendré que realizar el proceso de la base de datos en producción en poco tiempo, por tanto lo documento todo de forma que funcione mi instalación, no quiere decir que si lo pruebas en la tuya funcione, pero puede que te ayude.

Vamos a ello.

1. Preparar un servidor con una instalación de Odoo 10 y OpenUpgrade para migrar a Odoo 11. (Servidor 1)

1.1 Instalar Odoo 10

En mi caso he utilizado este script para instalar Odoo 10 en  un servidor con Ubuntu 18.04:

https://github.com/Yenthe666/InstallScript/tree/10.0

Con esto ya tenemos un servidor con Odoo 10 instalado.

1.2 Instalar el script de migración OpenUpgrade.

Nos conectamos con ssh con el usuario de odoo en el directorio /odoo y vamos a comprobar la version de python que tenemos instalada:

# python --version
Python 2.7.17
# python3 --version
Python 3.6.9

Instalamos pip3 y actualizamos con la última versión, en mi caso no tengo en estos momentos

# sudo apt-get install python3-pip
# sudo pip3 install --upgrade pip

Descargargamos OpenUpgrade

# git clone https://github.com/OCA/OpenUpgrade.git

Instalamos los requisitos de python para OpenUpgrade

# cd OpenUpgrade
# git checkout 11.0
# sudo pip3 install -r requirements.txt

Instalamos openupgradelib

# sudo pip3 install --ignore-installed git+https://github.com/OCA/openupgradelib.git@master

1.3 Comparamos nuestros módulos con los módulos compatibles con OpenUpgrade, y después de hacer una copia de nuestra base de datos y desinstalar los módulos no compatibles en la copia, ejecutamos la migración a Odoo 11.

Comparamos el conjunto de módulos instalados en nuestra instalación de Odoo con los módulos que cubre el proyecto OpenUpgrade, como se puede ver en el comando siguiente apuntamos a la carpeta addons de nuestro odoo (odoo-server/addons) y la comparamos con la carpeta addons de OpenUpgrade (Openupgrade/addons), estás rutas pueden cambiar en tu servidor:

# cd ..
# diff odoo-server/addons OpenUpgrade/addons/ | grep -v "Common subdirectories" | grep -v "OpenUpgrade"

Nos dirigimos en nuestra navegador a http://<servidor1>:8069/web/database/manager y duplicamos nuestra basededatos_v10 a basededatos_v11

Y paramos el servicio odoo

# sudo service odoo-server stop

Y ahora llega uno de los momentos clave,  ejecutamos openupgrade

OpenUpgrade/odoo-bin --addons-path OpenUpgrade/addons --database basededatos_v11 --update all --stop-after-init --logfile /tmp/migration.log

Como normalmente tenemos módulos no cubiertos tendremos que ir desinstalando o corrigiendo errores, y repitiendo la ejecución de openupgrade hasta que no nos aparezca ningún CRITICAL como este en el archivo migration.log:

2018-10-05 11:25:08,516 12695 CRITICAL migr1 odoo.service.server: Failed to initialize database `basededatos_v11`.

Cuando después de ejecutar la migración no tengamos ningún CRITIAL en el archivo migration.log es momento de iniciar de nuevo el servicio Odoo:

# sudo service odoo-server start

1.4 Copia de seguridad de la base de datos actualizada con OpenUpgrade para seguir en el paso 2.

En nuestro navegador nos dirigimos a nuestro servidor (http://<servidor1>:8069/web/database/manager y hacemos una copia de la base de datos que acabamos de actualizar con OpenUpgrade (basededatos_v11), tendremos en nuestro archivo basededatos_v11_2018-xx-xx.zip

Con esto llegamos al paso 2, si ya tenemos preparado el servidor2, vamos al paso 2.3

2. Preparar un servidor con una instalación de Odoo 11 y OpenUpgrade para migrar a Odoo 12. (Servidor 2)

2.1 Instalar Odoo 11

En mi caso tenía un servidor de prueba con Odoo 11 que he utilizado, por tanto solo he tenido que instalar en el Servidor 2, OpenUpgrade.

Recomiendo utilizar este script para instalar Odoo 11 en  un servidor con Debian 9:

https://github.com/Yenthe666/InstallScript/tree/11.0

Con esto ya tenemos un servidor con Odoo 11 instalado.

Yo tengo instalado lo siguiente:

# python --version
Python 3.7.9

# lsb_release -a
No LSB modules are available.
Distributor ID: TurnKey
Description:    TurnKey GNU/Linux 9.8 (stretch)
Release:        9.8
Codename:       stretch

OpenUpgrade lo he instalado en la carpeta root:

/root/OpenUpgrade/

El código de Odoo con su carpeta de Addons está aquí:

/usr/lib/python3/dist-packages/odoo/

Y el ejecutable de Odoo lo tenemos en:

/usr/bin/

2.2 Instalar el script de migración OpenUpgrade.

[Pendiente de documentar]

2.3 Restauramos la basededatos_v11 y la actualizamos a Odoo 11

En nuestro navegador vamos http://<serveridor2>:8069/web/database/manager y restauramos basededatos_v11

Paramos el servicio de Odoo

# service odoo stop

Actualizamos la base de datos a Odoo 11, en mi caso es:

/usr/bin/odoo -u all -d basededatos_v11 --stop-after-init

Es posible que nos salga algún CRITICAL, en ese caso he tenido que desinstalar algunos módulos que daban problemas con, en mi caso eran cinco:

bi_sale_view

bi_professional_reports_templates

survey

website

website_mail

Para solucionarlo he hecho esto:

# psql basededatos_v11
psql (9.6.24)
Type "help" for help.

# update ir_module_module set state='to remove' where name='bi_sale_view' and state='installed';
UPDATE 1
# update ir_module_module set state='to remove' where name='bi_professional_reports_templates' and state='installed';
UPDATE 1
# update ir_module_module set state='to remove' where name='survey' and state='installed'; 
UPDATE 1
# update ir_module_module set state='to remove' where name='website' and state='installed'; 
UPDATE 1
# update ir_module_module set state='to remove' where name='website_mail' and state='installed'; 
UPDATE 1

2.4 Otro momento clave, duplicamos basededatos_v11 y aprovechamos para cambiarle el nombre a basededatos_v12, y ejecutamos OpenUpgrade sobre la base de datos duplicada basededatos_v12, es decir la migración a Odoo 12.

Importante para que no de errores, por lo menos en mi caso:

 

2.4.1 Sacamos la carpeta odoo que está en la siguiente y la ponemos en el directorio superior mientras ejecutamos OpenUpgrade, de lo contrario no funciona:

/usr/lib/python3/dist-packages/odoo/ nos quedaría temporalmente en /usr/lib/python3/odoo

 

2.4.2 He tenido que eliminar o comentar las siguientes líneas del archivo /root/OpenUpgrade/addons/sale/data/mail_data.xml

<record id="mail_act_sale_upsell" model="mail.activity.type">
<field name="name">Order Upsell</field>
<field name="icon">fa-line-chart</field>
<field name="res_model_id" ref="sale.model_sale_order"/>
</record>

 

Y ahora sí, ejecutamos OpenUpgrade,

/root/OpenUpgrade/odoo-bin --addons-path OpenUpgrade/addons --database basededatos_v12 --xmlrpc-port 8079 --update all --stop-after-init --logfile /tmp/migration.log

Si todo ha ido bien seguimos con la Migración a odoo 12, pero ahora terminamos de convertir a v12 la base de datos en el servidor de odoo 12 e instalar OpenUpgrade para actualizar la versión 13

Pero antes hacemos un backup de la basededatos_v12 en la que hemos ejecutado OpenUpgrade para migrar a Odoo 12,

3. Preparar un servidor con una instalación de Odoo 12 y OpenUpgrade para migrar a Odoo 13. (Servidor 3)

Restauramos la copia en el servidor 3, donde está instalado Odoo12,

 

He tenido que eliminar o comentar las siguientes líneas del archivo, esta vez de la propia instalación de Odoo 12 en el servidor 3, están en este archivo:

/usr/lib/python3/dist-package/odoo/addons/sale/data/mail_data.xml

<record id="mail_act_sale_upsell" model="mail.activity.type">
<field name="name">Order Upsell</field>
<field name="icon">fa-line-chart</field>
<field name="res_model_id" ref="sale.model_sale_order"/>
</record>

También tenemos que instalar el siguiente modulo:

pip3 install git+https://github.com/OCA/openupgradelib.git@master#egg=openupgradelib

 

Y ejecutamos esto para que se nos quite la advertencia de que la basededatos_v12 no es compatible:

/odoo-server/odoo-bin -u all --xmlrpc-port 8079 -d database_v12 --stop-after-init

Después no podemos acceder con los usuarios que están creados en la versión anterior, para arreglar:

Odoo 12 and Odoo 13:
Create a hash using Python 3 and change the hash in the Postgres database:

~$ python3
>>> from passlib.context import CryptContext
>>> setpw = CryptContext(schemes=['pbkdf2_sha512'])
>>> setpw.encrypt('YourNewPassword')
Copy the Hash created
Ctrl D
~$  sudo su postgres
~$  psql
postgres=# \connect Your_Database_Name
You are now connected to database "Your_database_Name" as user "postgres"
YOurDatabase_Name=# UPDATE res_users SET password='YourCopiedHash' WHERE id=2;
YOurDatabase_Name=# \q