Server-tools: [RFC] module_auto_update: Actualizador de módulos de la comunidad

Creado en 22 mar. 2017  ·  15Comentarios  ·  Fuente: OCA/server-tools

Este módulo proporcionará un sistema de actualización automático en funcionamiento para la comunidad Odoo v10.

Se agregará una columna checksum_dir a ir.module.module , que representará la suma de comprobación sha1 del directorio (use checksumdir ). También se agregará una columna checksum_installed que representará la suma de comprobación de la versión del módulo que está instalada actualmente.

El menú actual Updates en Apps será reemplazado por un menú de nombres idénticos que mostrará una vista de árbol de registros ir.module.module que tienen un checksum_dir que es diferente al checksum_installed .

Podría tener sentido agregar un botón en el encabezado de la vista de árbol anterior para permitir la funcionalidad Update Apps List , lo que haría un proceso más fluido. O tal vez esto debería llamarse implícitamente al ver la lista de actualizaciones.

Los módulos para actualizar se seleccionarán en la vista de árbol, con una opción proporcionada en el menú Action para programarlos para la actualización.

La actualización en sí se programará utilizando el mecanismo estándar de Odoo de establecer ir.module.status en to upgrade . A partir de ahí, funcionará el botón Apply Scheduled Upgrades preexistente en la interfaz de usuario.

Para ir un paso más allá, también agregaremos un parámetro de servidor para configurar un trabajo cron para la actualización automática de módulos en tiempos específicos.

Una característica interesante sería redirigir todas las solicitudes web entrantes a una plantilla estática definida durante la actualización, lo que permitiría un período de mantenimiento más elegante.

¿Alguien tiene alguna idea sobre esto o un código preexistente en el que podría basar esto?

question

Comentario más útil

@ Yenthe666 - Es bastante fácil agregar la función, así que seguiremos adelante e implementaremos esto. También ayudará en nuestros entornos de desarrollo, que no tienen la seguridad que tienen nuestros productos.

Como nota, no recomiendo la configuración para permitir al usuario de Odoo acceso de escritura a archivos que no necesita escribir explícitamente. Este es un vector de ataque común para otros CMS como Wordpress y Magento, por lo que creo que sería lo mismo aquí. Básicamente, si un atacante obtiene el control de Odoo, puede plantar código malicioso en lugares donde nunca miraría.

Todos 15 comentarios

@lasley y anautomatic git fetch y git reset? Amaría eso.

No todo el mundo usa Git, por lo que esto no es posible.

: +1: para la función de actualización de la comunidad.

Algunas de nuestras instancias aún no están Dockerizadas, por lo que podría estar de acuerdo con agregar el manejo de git como una opción para hacer que el legado sea un poco más fácil de trabajar y retrasar un poco las actualizaciones.

El único problema con el que nos encontraremos, al menos en mis implementaciones, es que el usuario de Odoo no tiene acceso de escritura a los directorios del módulo, excepto en algunos casos raros (e incluso entonces, solo su ./static dir). ¿No es este tu caso @ Yenthe666?

Hola @lasley ,

No, no tenemos ese problema. Nuestro usuario de Odoo tiene acceso dentro de las carpetas /odoo exactamente para esto.

Saludos,
Yenthe

También @pedrobaeza esto podría ser fácilmente configurable como un ajuste para permitirlo para aquellos que lo deseen o usen git.

OK entonces

@ Yenthe666 - Es bastante fácil agregar la función, así que seguiremos adelante e implementaremos esto. También ayudará en nuestros entornos de desarrollo, que no tienen la seguridad que tienen nuestros productos.

Como nota, no recomiendo la configuración para permitir al usuario de Odoo acceso de escritura a archivos que no necesita escribir explícitamente. Este es un vector de ataque común para otros CMS como Wordpress y Magento, por lo que creo que sería lo mismo aquí. Básicamente, si un atacante obtiene el control de Odoo, puede plantar código malicioso en lugares donde nunca miraría.

Una solución es olvidarse de git y versiones, y usar sumas de comprobación SHA en su lugar. El trabajo ir.cron :

  1. Genere una suma de comprobación para toda la carpeta del complemento.
  2. Compruébelo con la última suma de comprobación que tenía almacenada.
  3. Si ha cambiado, configure el complemento para actualizar y almacenar la nueva suma de comprobación.
  4. Cuando termine de hacer esto con todos los complementos, active el sistema de actualización.

@lasley Tenemos este módulo que cubre parcialmente lo que sugieres y también la copia de seguridad automática https://github.com/ingadhoc/odoo-support/tree/9.0/database_tools.
Ya presentamos los días de odoo y los días de sprint de oca, pero no llamó la atención
Puede consultar la presentación disponible en el archivo Léame. Hemos agregado un "cli" para que pueda arreglar la base de datos desde la línea de comandos con algo como "odoo.py fixdb". Mientras arregla db, inicia un webclient en el mismo xmlrpc con una página estática que le indica que se encuentra en una actualización.
Hay muchas cosas feas en el módulo, pero lo usaremos en producción durante menos de 3 años.

@Yajo - Oh, buena idea. RFC actualizado. ¿Tiene sentido simplemente generar las sumas de verificación del directorio en el arranque de Odoo, o tal vez necesitamos un botón?

@jjscarafia - ¡Gracias por

Supongo que el botón predeterminado "Ejecutar cron ahora" funcionaría. De hecho, sería necesario en mi humilde opinión, pero ya lo tienes allí.

También sería lo menos inteligente posible y dejaría checksum_installed vacío de forma predeterminada. La próxima iteración cron lo consideraría una falta de coincidencia y actualizaría todo. Y a partir de ese punto, todo iría bien. Cron debe estar preconfigurado para ejecutarse aproximadamente a las 3 a. M.

@lasley Sí, se duplica mucho, pero este fue antes de que exista uno. Tengo una tarea pendiente para verificar los de oca y desaprobar esa funcionalidad al migrar a odoo 10, así que alineado con eso, tener la funcionalidad de los módulos de actualización en otro módulo sería genial. Todavía no estoy muy familiarizado con las implicaciones de cambiar a LGPL, pero no hay problema para mí. ¿Qué debo hacer para permitir el uso del código y el cambio de licencia?

@jjscarafia : la principal implicación para LGPL es que es posible que alguien haga un derivado de código cerrado de su aplicación, por lo que definitivamente son bastante pesados. Eche un vistazo a este desglose, que es demasiado simplista, pero creo que transmite el mensaje.

Verá que la "Misma licencia" solo se aplica cuando el derivado no utiliza su software como biblioteca. En términos sencillos, esto significa que las licencias GPL y AGPL se filtrarán en cualquier cosa que dependa de su módulo en el manifiesto. LGPL solo sangrará en el código que realice modificaciones al código real de su módulo, por lo que simplemente depender de él en el manifiesto le permitirá elegir cualquier licencia (posiblemente propietaria).

Todo lo que necesitamos es su aprobación para el cambio de permiso y licencia. Mi equipo migrará las cosas que necesitamos, luego lo etiquetará en el PR y obtendrá su aprobación allí. Luego tenemos un registro de su aceptación del cambio, y estamos listos para comenzar.

No he profundizado demasiado en tu módulo, pero tenía curiosidad por saber qué hace la parte fix_db . ¿Eso solo ejecuta una actualización de todo?

@lasley gracias por el enlace y la explicación, muy clara ahora. Ok, para mí, espero el ping en el PR.
Este método se puede llamar desde la interfaz de la base de datos y ejecuta una actualización en cada módulo que requiere la actualización (con respecto a los cambios en la versión más reciente e instalada)

El cli "fixdb" llama a ese método para cada base de datos (si no especifica ninguna) o para la base de datos -d.
Lo usamos en el punto de ventana acoplable de horas, por lo que cuando

Cerrando la pista en # 882

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

legalsylvain picture legalsylvain  ·  34Comentarios

lasley picture lasley  ·  22Comentarios

MosabWadea picture MosabWadea  ·  5Comentarios

OCA-git-bot picture OCA-git-bot  ·  30Comentarios

kittiu picture kittiu  ·  5Comentarios