Агенты и панель
Обновления агента и подпись
Откуда берутся новые версии
Новая версия агента приходит вместе с новой версией панели: панель раздаёт агента своей версии. Что с ней — «Настройки» → «Обновления агента»: номер версии, подписана ли она, сколько агентов уже на ней и какие старее.
Зачем подпись
Агент работает от root на каждом сервере. Если бы он ставил всё, что раздаёт панель, взломанная или подменённая панель поставила бы свой бинарник на все серверы разом.
Поэтому агент ставит обновление, только если список контрольных сумм версии (SHA256SUMS) подписан ключом владельца:
- закрытая часть ключа — только у вас: на вашем компьютере и в менеджере паролей. Её нет ни на панели, ни в CI;
- открытая часть вшита в самого агента. Подпись проверяет агент, а не панель;
- панель подпись только хранит и раздаёт — подделать её она не может;
- подпись одной версии к другой не подходит.
Статусы версии
| В ЛК | Что значит |
|---|---|
| «подписана» | «Подписана ключом … — агенты её поставят» |
| «не подписана» | «Агенты эту версию не поставят, пока вы её не подпишете». Агенты остаются на прежней версии и работают как работали |
| «без подписи» | В сборке панели нет ключа релизов: агенты ставят обновления по одной сверке SHA256SUMS |
Как подписать
На своём компьютере, в репозитории arcula:
make sign-agent PANEL=https://<адрес панели>Скрипт скачивает версию с панели, пересобирает агента из того же коммита и подписывает, только если сборки совпали байт в байт. Готовую подпись загрузите кнопкой «Загрузить подпись» в «Обновления агента»: панель проверит, что она подходит к версии и ключу. По шагам — Как обновить агентов.
«Обновить агента» и «Обновить везде»
- «Обновить агента» — на обзоре сервера, в строке «Агент», когда версия агента отличается от версии панели: «arcula 0.1.0 · панель раздаёт 0.2.0».
- «Обновить везде (N)» — в «Настройки» → «Обновления агента»: та же команда всем серверам, где агент старее. Пока версия не подписана, кнопка недоступна.
Что делает агент:
- Забирает команду — обычно в течение минуты.
- Скачивает версию, проверяет подпись вшитым ключом и суммы файлов.
- Ждёт, пока закончатся идущие бэкапы.
- Заменяет бинарник. Прежний остаётся рядом —
/usr/local/bin/arcula.prev.
Пока идёт обновление, у сервера — «Агент обновляется…». Итог — в журнале сервера: «Агент обновлён» с версиями или «Агент не обновился» с причиной.
Если агент не на связи, команда ждёт его 30 минут и пропадает. Отправьте её снова, когда агент вернётся.
Автоматический откат
Через 3 минуты после замены прежний бинарник проверяет, отвечает ли служба arcula-agent новой версией. Не отвечает — прежний возвращается на место, служба перезапускается, в журнале — «Агент не обновился». Откат работает, когда агент стоит службой systemd; без systemd отката нет.
Чего не бывает
- Агент не ставит неподписанную версию.
- По команде из ЛК агент не переходит на версию старее своей. Вернуть старую можно только на самом сервере — команда ниже.
- Первая установка подписью не защищена:
install.shсверяет агента только с суммами самой панели. Повторный запускinstall.sh— тоже. Подпись защищает обновления: по кнопке из ЛК и командойsudo arcula update.
sudo arcula update --version X.Y.ZТа же статья — в панели, в разделе «Справка».