Обновления и откат
Обновление — одна команда. Архив, контрольная сумма и манифест лежат на сайте проекта 0e5.ru, запасная копия — на зеркале fthost.ru.
Проверить, есть ли новое
mailnode update --check
Ответ вида установлено: 1.0.5, доступно: 1.0.6. Если версии равны — обновляться некуда.
Обновиться
mailnode update
Что происходит по шагам:
- читается манифест
latest.json(сайт проекта, затем зеркало); - скачивается архив релиза, проверяется SHA256;
- старые файлы копируются в
/opt/mailnode/state/backup-ГГГГММДД-ЧЧММСС; - подменяются
mailnode.py,mailpanel.py,caldav_gateway.py; - конфиги пересобираются, службы перезапускаются.
Если скачивание рвётся
Команда пробует несколько источников: адрес из манифеста, сайт проекта 0e5.ru, зеркало fthost.ru. Если ни один не отдал архив — обновление отменяется, ничего не меняется.
Принудительно и без пересборки
mailnode update --force # поставить ту же версию заново
mailnode update --no-render # только файлы, конфиги не трогать
mailnode update --source https://свой-сервер/update
Свой канал обновлений задаётся настройкой update_source — удобно, когда серверы не имеют выхода в интернет.
Откат
Файлы предыдущей версии лежат в /opt/mailnode/state/backup-*:
ls -1 /opt/mailnode/state/ | grep backup
cp /opt/mailnode/state/backup-20261026-150100/*.py /opt/mailnode/
install -m755 /opt/mailnode/mailnode.py /opt/mailnode/mailpanel.py /usr/local/bin/
mailnode render
systemctl restart mailpanel
Откат кода не откатывает базу
Схема базы обновляется вперёд и совместима: старый код читает новую базу, но новые поля игнорирует. Если откатываетесь на версию младше 1.0, сначала сделайте бэкап базы:
cp /opt/mailnode/state/mailnode.db /root/mailnode.db.bakАвтоматические обновления
По умолчанию установщик ставит таймер mailnode-update.timer — воскресенье 04:40. Проверить и выключить:
systemctl list-timers | grep mailnode-update
systemctl disable --now mailnode-update.timer
Где смотреть, что изменилось
Список релизов: 0e5.ru/update. В каждом релизе — архив, контрольная сумма и короткое описание изменений.