Server-tools: [RFC] module_auto_update: средство обновления модуля сообщества

Созданный на 22 мар. 2017  ·  15Комментарии  ·  Источник: OCA/server-tools

Этот модуль предоставит работающую систему автоматического обновления для сообщества Odoo v10.

Столбец checksum_dir будет добавлен к ir.module.module , который будет представлять контрольную сумму sha1 каталога (используйте checksumdir ). Также будет добавлен столбец checksum_installed который будет представлять контрольную сумму версии модуля, которая установлена ​​в данный момент.

Текущее меню Updates в Приложениях будет заменено меню с идентичным наименованием, в котором будет отображаться древовидное представление записей ir.module.module , имеющих checksum_dir , отличное от checksum_installed .

Возможно, имеет смысл добавить кнопку в заголовок приведенного выше древовидного представления, чтобы обеспечить функциональность Update Apps List , которая сделает процесс более гибким. Или, может быть, это следует просто неявно вызывать при просмотре списка обновлений.

Модули для обновления будут выбраны в древовидной структуре, а в меню Action возможность запланировать их обновление.

Само обновление будет запланировано с использованием стандартного механизма Odoo установки ir.module.status на to upgrade . Оттуда будет работать уже существующая кнопка Apply Scheduled Upgrades в пользовательском интерфейсе.

Чтобы продвинуться дальше, мы также добавим параметр сервера для настройки задания cron для автоматического обновления модулей в определенные моменты времени.

Приятно иметь возможность перенаправлять все входящие веб-запросы на определенный статический шаблон во время обновления, что позволило бы продлить период обслуживания.

У кого-нибудь есть мысли об этом или уже существующий код, на котором я мог бы это основать?

question

Самый полезный комментарий

@ Yenthe666 - Добавить функцию достаточно просто, поэтому мы продолжим и реализуем это. Это также поможет в наших средах разработки, которые не имеют такой безопасности, как наши продукты.

В качестве примечания, я не рекомендую конфигурацию, которая разрешает пользователю Odoo доступ на запись к файлам, которые ему явно не нужно записывать. Это общий вектор атаки для других CMS, таких как Wordpress и Magento, поэтому я чувствую, что здесь будет то же самое. Обычно, если злоумышленник получает контроль над Odoo, он может внедрить вредоносный код в места, куда вы бы никогда не заглянули.

Все 15 Комментарий

@lasley и автоматический git fetch и git reset? Мне бы понравилось это.

Не все используют Git, поэтому это невозможно.

: +1: для функции обновления сообщества.

Некоторые из наших экземпляров все еще не Dockerized, так что я мог бы согласиться добавить обработку git в качестве опции, чтобы немного упростить работу с устаревшими версиями и немного отодвинуть обновления.

Единственная проблема, с которой мы столкнемся, по крайней мере, при моих развертываниях, заключается в том, что пользователь Odoo не имеет доступа на запись в каталоги модулей, за исключением некоторых редких случаев (и даже тогда, только их ./static dir). Разве это не ваш случай @ Yenthe666?

Привет @lasley ,

Нет, у нас нет этой проблемы. Именно для этого у нашего пользователя Odoo есть доступ к папкам /odoo .

С Уважением,
Yenthe

Также @pedrobaeza это можно легко настроить как параметр, чтобы разрешить его тем, кто этого хочет или использует git.

хорошо, тогда

@ Yenthe666 - Добавить функцию достаточно просто, поэтому мы продолжим и реализуем это. Это также поможет в наших средах разработки, которые не имеют такой безопасности, как наши продукты.

В качестве примечания, я не рекомендую конфигурацию, которая разрешает пользователю Odoo доступ на запись к файлам, которые ему явно не нужно записывать. Это общий вектор атаки для других CMS, таких как Wordpress и Magento, поэтому я чувствую, что здесь будет то же самое. Обычно, если злоумышленник получает контроль над Odoo, он может внедрить вредоносный код в места, куда вы бы никогда не заглянули.

Одно из решений - забыть о git и версиях и вместо этого использовать контрольные суммы SHA. Задание ir.cron будет:

  1. Сгенерируйте контрольную сумму для всей папки надстройки.
  2. Сравните его с последней сохраненной контрольной суммой.
  3. Если он изменился, настройте аддон на обновление и сохраните новую контрольную сумму.
  4. Когда закончите делать это со всеми аддонами, запустите систему обновления.

@lasley У нас есть этот модуль, который частично покрывает то, что вы предлагаете, а также https://github.com/ingadhoc/odoo-support/tree/9.0/database_tools.
Мы уже рассказывали о днях odoo и oca sprint days, но это не привлекло внимания
Вы можете проверить презентацию, доступную в readme. Мы добавили «cli», чтобы вы могли исправить базу данных из командной строки с помощью чего-то вроде «odoo.py fixdb». При исправлении db он запускает веб-клиент на том же xmlrpc со статической страницей, сообщающей, что вы находитесь на этапе обновления.
В модуле много уродливых вещей, но мы используем его на производстве более трех лет.

@Yajo - Отличная идея. RFC обновлен. Имеет ли смысл просто генерировать контрольные суммы каталогов при загрузке Odoo, или, может быть, нам нужна кнопка?

@jjscarafia - Сладкое спасибо, что

Я предполагаю, что кнопка по умолчанию «Запустить cron сейчас» поможет. Он действительно был бы нужен ИМХО, но он у вас уже есть.

Я бы также был как можно менее умным и оставил бы checksum_installed пустым по умолчанию. Следующая итерация cron посчитает это несоответствием и обновит все. И с этого момента все будет хорошо. Cron должен быть предварительно настроен для работы в 3 часа ночи или около того.

@lasley Да, его дубликаты много, но этот был до того, как появился Oca. У меня есть незавершенная задача, чтобы проверить oca, которые не рекомендуют эту функциональность при переходе на odoo 10, поэтому согласовать с этим, чтобы функциональность модулей обновления в другом модуле была бы замечательной. Все еще не очень хорошо знаком с последствиями перехода на LGPL, но для меня это не проблема. Что мне делать, чтобы разрешить использование кода и изменение лицензии?

@jjscarafia - Основное значение для LGPL состоит в том, что кто-то может создать производную от вашего приложения с закрытым исходным кодом, поэтому они определенно довольно тяжелые. Взгляните на эту разбивку, которая слишком упрощена, но я думаю, что она понятна.

Вы увидите, что «Та же лицензия» применяется только тогда, когда производная программа не использует ваше программное обеспечение в качестве библиотеки. С точки зрения непрофессионала это означает, что лицензии GPL и AGPL будут распространяться на все, что зависит от вашего модуля в манифесте. LGPL будет внедряться только в код, который вносит изменения в фактический код вашего модуля, поэтому простая зависимость от него в манифесте позволит вам выбрать любую лицензию (возможно, проприетарную).

Все, что нам нужно, - это ваше согласие на изменение разрешения и лицензии. Моя команда перенесет все, что нам нужно, затем отметит вас в PR и получит ваше одобрение. Затем у нас есть запись вашего согласия на изменение, и мы готовы к работе.

Я не углублялся в ваш модуль, но мне было любопытно, что делает часть fix_db ? Это просто запускает обновление всего?

@lasley, спасибо за ссылку и объяснение, теперь все ясно. Ладно, я жду пинга по пиару.
Этот метод вызывается из интерфейса базы данных и запускает обновление для каждого модуля, который требует обновления (в отношении изменений в последней и установленной версии).

Команда cli "fixdb" вызывает этот метод для каждой базы данных (если вы не указали ее) или для базы данных -d.
Мы используем это в точке входа часового образа докера, поэтому при запуске контейнера мы всегда обновляем модули, если это необходимо.

Закрытие для отслеживания в # 882

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

lasley picture lasley  ·  20Комментарии

naglis picture naglis  ·  3Комментарии

pedrobaeza picture pedrobaeza  ·  19Комментарии

MosabWadea picture MosabWadea  ·  5Комментарии

lasley picture lasley  ·  7Комментарии