c'est une étape compliqué car il n'existe pas formellement de procédure unique et elle dépend des versions sachant qu'il faut faire gaffe aux dépendences entre les modules. En outre, il faut que la version des modules soient homogène au risque d'y avoir des messages d'alertes
Sources :
1. Il y a besoin de backup les bases et filestores :
su - postgres pg_dump prod > prod.sql
Et d'importer la base + le filestore (qui peut contenir des fichiers de caches et factures pdf). Se rendre sur https://DOMAINE.org/web/database/manager
2. Depuis le site web, enlever les modules que l'on utilise pas. Cela devrait réduire le nombres d'erreurs :
3. Installer le module “database cleanup” et l'executer pour enlever les résidus depuis l'interface d'administration en mode développeur.
cd - git clone -b 13.0 https://github.com/OCA/server-tools.git cp -ir server-tools/database_cleanup/ odoo/addons/
C'est à dire d'une version de commit git vers une plus récente.
Soit, ce type de procédure :
cd /etc/ git add . && git commit -am "balais" apt update && apt upgrade -y su - odoo source /home/odoo/.venv/bin/activate cd odoo cp -i debian/odoo.conf /tmp/ git checkout debian/odoo.conf systemctl stop odoo git pull --depth=1 cp -i /tmp/odoo.conf debian/ ./odoo-bin -c debian/odoo.conf -d 2023 -u all --stop-after-init --no-http systemctl start odoo
Vérifier sur le site s'il y a des paramètres qui ont sauté comme :
Python 3.7.3 fonctionne
On stoppe l'instance Odoo12 et on utilise le compte odoo en activant l'environnement virtual de python :
su - odoo source .venv/bin/activate pip install git+https://github.com/OCA/openupgradelib.git@master # pip install psycopg2-binary #optionnel ? pip install -r odoo/requirements.txt
mv -i odoo odoo12 git clone --depth=1 -b 13.0 https://github.com/OCA/OpenUpgrade.git odoo cp -i odoo12/debian/odoo.conf odoo/debian/odoo.conf
Désactiver temporairement les tâches cron pour éviter qu'ils se lance en double :
max_cron_threads = 0
Copier les modules à la version 13 dans un dossier dédié par l'instance :
mkdir /home/odoo/odoo/addons-migration
Ajouter ce dossier dans la directive “addons_path” du fichier de configuration.
Lancer l'openupgrade pour mettre à jour la base avec ses addons:
./odoo-bin -c debian/odoo.conf -d BASE_A_UPGRADE -u all --stop-after-init --no-http --data-dir=/tmp/
Conseils :
ERROR test odoo.modules.loading: Some modules have inconsistent states, some dependencies may be missing: ['database_cleanup', 'dms', 'report_xlsx', 'theme_common', 'web_responsive']
Attention à bien vérifier leurs dépendances décritent dans le fichier manifest.py du module.
ERROR test OpenUpgrade: dms: error in migration script dms/migrations/13.0.4.0.0/pre-migration.py: relation “dms_directory” does not exist
./odoo12/odoo.log:2022-08-12 08:06:03,508 6141 INFO test odoo.addons.base.models.ir_module: ALLOW access to module.button_install on ['Phone Numbers Validation', 'MuK Large Objects Field', 'Phone Numbers Validation'] to user __system__ #1 via n/a
2022-08-12 08:31:51,893 6303 CRITICAL test odoo.modules.module: Couldn't load module muk_utils 2022-08-12 08:31:51,894 6303 CRITICAL test odoo.modules.module: module 'odoo.api' has no attribute 'multi'
2022-08-12 08:41:54,783 6744 INFO test odoo.addons.base.models.ir_ui_view: Element '<xpath expr="//field[@name='datas_fname']">' cannot be located in parent view Contexte de l'erreur : Vue `ir_attachment.tree` [view_id: 2438, xml_id: muk_utils.view_attachment_tree, model: ir.attachment, parent_id: 50 [...] 'index_content': self._index(bin_data, attach.datas_fname, attach.mimetype), odoo.tools.convert.ParseError: "'ir.attachment' object has no attribute 'datas_fname'" while parsing /home/odoo/odoo/addons/calendar/views/calendar_views.xml:2, near
https://www.holdenrehg.com/blog/2019-03-09_odoo-images-and-attachments-explain-regenerate-assets
INFO test odoo.modules.loading: Model mail.mass_mailing.campaign is declared but cannot be loaded! (Perhaps a module was partiall y removed or renamed) INFO test odoo.addons.base.models.ir_model: Deleting 449@ir.model (mass_mailing.model_mail_mass_mailing_campaign) ERROR test odoo.sql_db: bad query: DELETE FROM ir_model WHERE id IN (449) ERROR: update or delete on table "ir_model" violates foreign key constraint "ir_model_relation_model_fkey" on table "ir_model_relation" DETAIL: Key (id)=(449) is still referenced from table "ir_model_relation".
Regardons dans la base à quoi correspond la clé 449 :
select * from ir_model where id = 449; id | name | model | info | state | transient | create_uid | create_date | write_uid | write_date | is_mail_thread | website_form_access | website_form_default_field_id | website_form_label | is_mail_activity | is_mail_blacklist | website_form_key -----+-----------------------+----------------------------+-----------------------------------+-------+-----------+------------+-------------+-----------+------------+----------------+---------------------+-------------------------------+--------------------+------------------+-------------------+------------------ 449 | Mass Mailing Campaign | mail.mass_mailing.campaign | Model of mass mailing campaigns. | base | f | | | | | f | | | | | | (1 row) test=# select * from ir_model_relation where model = 449; id | name | model | module | date_update | date_init | create_uid | create_date | write_uid | write_date -----+---------------------------+-------+--------+----------------------------+----------------------------+------------+-------------+-----------+------------ 166 | mail_mass_mailing_tag_rel | 449 | 27 | 2020-03-02 08:49:32.121023 | 2020-03-02 08:49:32.121023 | | | | (1 row)
On supprime cette entrée dans la table ir_model_relation :
test=# delete from ir_model_relation where model = 449; DELETE 1
Puis on verra apparaitre ce type de ligne indiquant que l'application a réussi à supprimer l'entrée :
INFO test odoo.addons.base.models.ir_model: Deleting 449@ir.model (mass_mailing.model_mail_mass_mailing_campaign)
chown odoo: /usr/lib/python3/dist-packages/odoo/ -R mv -i /usr/lib/python3/dist-packages/odoo/ /usr/lib/python3/dist-packages/odoo.old ln -s /var/lib/odoo/OpenUpgrade/addons /usr/lib/python3/dist-packages/odoo/addons
Dans postgres, il y aurait besoin de désactiver le contrôle de trigger :
su - postgres psql $BASE alter table pos_config DISABLE TRIGGER all; alter table account_journal DISABLE TRIGGER all; alter table product_template DISABLE TRIGGER all; \q exit
Python 3.7.3 fonctionne
On télécharge le module qui va permettre de mettre à jour ceux de l'instance en production:
su - odoo mv -i odoo odoo13 git clone --depth=1 -b 14.0 https://github.com/odoo/odoo.git cp -i odoo13/debian/odoo.conf odoo/debian/odoo.conf git clone --depth=1 -b 14.0 https://github.com/OCA/OpenUpgrade.git source .venv/bin/activate pip install git+https://github.com/OCA/openupgradelib.git@master pip install importlib pip install -r odoo/requirements.txt
Vérifier qu'il y ait bien les dossiers des addons de selectionnés :
addons_path = /home/odoo/odoo/odoo/addons,/home/odoo/odoo/addons,/home/odoo/OpenUpgrade
Il nous reste plus qu'a mettre à jour la base de donnée :
./odoo-bin --config /home/odoo/odoo/debian/odoo.conf --logfile /home/odoo/odoo/debian/odoo.log -d MA_BASE -u all --stop-after-init --load=base,web,openupgrade_framework --upgrade-path=/home/odoo/OpenUpgrade/openupgrade_scripts/scripts/
S'il arrive à arriver jusqu'a la fin, relancer l'upgrade des modules sans OpenUpgrade pour mettre à jour les vues et en modifiant le fichier de conf :
addons_path = /home/odoo/odoo/odoo/addons,/home/odoo/odoo/addons
./odoo-bin --config /home/odoo/odoo/debian/odoo.conf --logfile /home/odoo/odoo/debian/odoo.log -d MA_BASE -u all --stop-after-init
Conseils:
“2022-08-15 13:46:03,091 16469 ERROR odoo12 odoo.modules.loading: Some modules have inconsistent states, some dependencies may be missing: ['partner_autocomplete', 'sms', 'snailmail']”
/home/odoo/.venv/bin/python3 /home/odoo/odoo/odoo-bin -c /home/odoo/odoo/debian/odoo.conf -d odoo12 -u sms --stop-after-init
"Could not get content for /web_diagram/static/src/scss/diagram_view.scss defined in bundle 'web.assets_backend'"
Alors il faudra re-installer le module web_diagram de la version 13…
WARNING odoo12 py.warnings: /home/odoo/.venv/lib/python3.7/site-packages/jinja2/sandbox.py:82: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working from collections import MutableSet, MutableMapping, MutableSequence
WARNING ? py.warnings: /home/odoo/.venv/lib/python3.7/site-packages/reportlab/__init__.py:8: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses import sys, os, imp
apt install python3-num2words python3-phonenumbers xfonts-75dpi xfonts-base
Python 3.7.3 fonctionne
On télécharge le module qui va permettre de mettre à jour ceux de l'instance en production:
su - odoo mv -i odoo odoo14 git clone --depth=1 -b 15.0 https://github.com/odoo/odoo.git cp -i odoo14/debian/odoo.conf odoo/debian/odoo.conf git clone --depth=1 -b 15.0 https://github.com/OCA/OpenUpgrade.git source .venv/bin/activate pip install git+https://github.com/OCA/openupgradelib.git@master pip install importlib pip install -r odoo/requirements.txt
Vérifier qu'il y ait bien les dossiers des addons de selectionnés :
addons_path = /home/odoo/odoo/odoo/addons,/home/odoo/odoo/addons,/home/odoo/OpenUpgrade
Il nous reste plus qu'a mettre à jour la base de donnée :
./odoo-bin --config /home/odoo/odoo/debian/odoo.conf --logfile /home/odoo/odoo/debian/odoo.log -d MA_BASE -u all --stop-after-init --load=base,web,openupgrade_framework --upgrade-path=/home/odoo/OpenUpgrade/openupgrade_scripts/scripts/
S'il arrive à arriver jusqu'a la fin, relancer l'upgrade des modules sans OpenUpgrade pour mettre à jour les vues et en modifiant le fichier de conf :
addons_path = /home/odoo/odoo/odoo/addons,/home/odoo/odoo/addons
./odoo-bin --config /home/odoo/odoo/debian/odoo.conf --logfile /home/odoo/odoo/debian/odoo.log -d MA_BASE -u all --stop-after-init
Conseils:
“ERROR odoo12 odoo.sql_db: bad query: CREATE UNIQUE INDEX IF NOT EXISTS mail_channel_partner_partner_unique ON mail_channel_partner (channel_id, partner_id) WHERE partner_id IS NOT NULL ERROR: ERREUR: n'a pas pu créer l'index unique « mail_channel_partner_partner_unique » DETAIL: La clé (channel_id, partner_id)=(1, 3) est dupliquée.”
odoo12=# select * from mail_channel_partner where channel_id = 1 and partner_id=3; id | partner_id | channel_id | seen_message_id | fold_state | is_minimized | is_pinned | create_uid | create_date | write_uid | write_date | custom_channel_name | fetched_message_id ----+------------+------------+-----------------+------------+--------------+-----------+------------+----------------------------+-----------+----------------------------+---------------------+-------------------- 6 | 3 | 1 | 1 | open | | t | 1 | 2022-08-15 13:45:40.576803 | 1 | 2022-08-15 13:45:40.576803 | | 1 2 | 3 | 1 | | | | t | | | 2 | 2022-08-15 14:11:40.75062 | | (2 lignes) odoo12=# delete from mail_channel_partner where channel_id = 1 and partner_id=3; DELETE 2