arculaДокументация

Агенты и панель

Обновить агентов

Новая версия агента приходит вместе с панелью: после выкатки её раздаёт панель. Но агенты ставят только версию, подписанную вашим ключом релизов. Так взломанная или подменённая панель не поставит свой бинарник на серверы. Пока версия не подписана, агенты остаются на прежней, бэкапы идут как шли.

Ключ — minisign. Закрытая часть только у вас: ~/.minisign/arcula-release.key и копия в менеджере паролей. Открытая вшита в агента.

Как понять, что пора

ЛК → «Настройки» → «Обновления агента». Там версия, которую раздаёт панель, и метка: «не подписана» — «Агенты эту версию не поставят, пока вы её не подпишете». Ниже — сколько агентов уже на ней и какие серверы старее.

У сервера — «Обзор» → «Агент»: «arcula 0.1.0 · панель раздаёт 0.1.1».

Одной командой

На своём компьютере, в клоне репозитория, после пуша. HEAD должен быть запушен:

make agent-release PANEL=https://panel.example.com SSH=panel-host

SSH — сервер панели для ssh, как в ~/.ssh/config. Скрипт:

  1. ждёт до 30 минут, пока панель начнёт раздавать агента из этого коммита;
  2. пересобирает агента из того же коммита и сверяет его байт в байт с тем, что раздаёт панель, для amd64 и arm64;
  3. спрашивает пароль ключа и подписывает — только если сборки совпали;
  4. загружает подпись на панель по ssh;
  5. отправляет «Обновить везде».

Ключ с компьютера не уходит: по ssh едет только подпись. Подписать и загрузить без «Обновить везде» — make sign-agent PANEL=https://panel.example.com SSH=panel-host WAIT=1.

Нужны minisign, go, git, Docker, curl и shasum. Ключ лежит в другом месте — укажите путь: ARCULA_SIGN_KEY=/путь/к/ключу.

По шагам

Если ssh к серверу панели нет:

  1. Дождитесь выкатки: в «Обновления агента» появится новая версия с меткой «не подписана».
  2. В папке репозитория выполните make sign-agent PANEL=https://panel.example.com. Скрипт скачает версию, пересоберёт её, сверит и спросит пароль ключа. Итог — файл arcula-<версия>.SHA256SUMS.minisig в текущей папке.
  3. ЛК → «Настройки» → «Обновления агента» → «Загрузить подпись», выберите файл. Метка сменится на «подписана»: «Подписана ключом … — агенты её поставят».
  4. Там же нажмите «Обновить везде». Команда уйдёт на все серверы, где агент старее.

Файл .minisig после загрузки не нужен, он не секретный. Подписать не последнюю версию — V=0.1.0-main.N.

Обновить один сервер

В ЛК: сервер → «Обзор» → «Агент» → «Обновить агента». Или на самом сервере:

sudo arcula update

sudo arcula update --check только покажет, есть ли новая версия.

Агент скачивает версию, проверяет подпись и сумму, ждёт конца идущего бэкапа и заменяет бинарник. Пока идёт замена, у сервера — «Агент обновляется…». Итог — в журнале сервера, фильтр «Агент»: «Агент обновлён» с версиями или «Агент не обновился» с причиной.

Если не обновляется

Что видноЧто делать
Метка «не подписана», «Обновить везде» не нажимаетсяПодписать версию, как выше
«Подпись не подходит» при загрузкеПодписана другая версия. ЛК показывает, для какой версии нужна подпись, — подпишите её
«сборка панели не совпала с вашей из коммита — не подписываю»Не подписывать. На панели собрано не то, что в репозитории. Сначала разберитесь
«коммита … нет в клоне»git fetch origin в клоне и запустить снова
В журнале сервера «not signed by the release key»Подпись не загружена или загружена для другой версии
«Агент обновится до …, когда выйдет на связь»Агент сейчас не на связи. Обновится, когда появится
«Агент не выполнил: обновить агента»Причина — в той же строке журнала, например идёт другое задание. Повторите позже
sudo arcula update пишет про pin_versionВерсия закреплена в /etc/arcula/agent.yaml. Обновить явно: sudo arcula update --version X.Y.Z

На сервере помогут:

sudo arcula doctor
journalctl -u arcula-agent

arcula doctor в строке version покажет, какую версию раздаёт панель и какая стоит.

Откат

Новая версия не запустилась за 3 минуты — агент сам возвращает прежнюю. Прежний бинарник лежит рядом: /usr/local/bin/arcula.prev. В журнале сервера — «Агент не обновился» с причиной, например «arcula X did not start within 3m0s — rolled back to …». Автоматический откат работает под systemd.

На старую версию по команде из ЛК агент не переходит. Поставить старую можно только на самом сервере — если панель её раздаёт и она подписана:

sudo arcula update --version 0.1.0

Та же статья — в панели, в разделе «Справка».