Skip to content

Обновление прошивки

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

Машина ничего не скачивает и не ставит сама. Установка обновления — всегда явный запрос: с экрана интерфейса, из программного интерфейса или руками с консоли.

Пакет обновления

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

Канал обновлений

Откуда машина узнаёт о новых версиях — из индекса канала обновлений, адрес которого вшит в сборку. Машина читает индекс и перечисляет версии своего продукта и своей архитектуры; те, что уже стоят на разделе, помечены.

Сборка без канала о нём не знает вовсе, и ставить на неё можно только по адресу или файлом.

Установка

Из веб-интерфейса

Раздел Обновления первым делом называет две версии: какая работает и какая загрузится следующей. Рядом кнопка перезагрузки — когда следующая версия отличается от работающей, она подсвечена, и экран говорит, что именно сменится при перезагрузке.

Индекс канала читается при открытии интерфейса: значок пункта меню несёт метку, когда в канале есть версия, которой на разделе нет. Кнопка Проверить обновления перечитывает индекс.

Через программный интерфейс

Ответ приходит сразу, установка идёт в фоне.

Поставить пакет файлом:

curl -u admin:пароль -H 'content-type: application/x-tar' \
    --data-binary @mcaster-<версия>-amd64.update.tar http://<машина>:8090/system/firmware

Поставить пакет по адресу:

curl -u admin:пароль -H 'content-type: application/json' \
    -d '{"url":"https://…/mcaster-<версия>-amd64.update.tar"}' \
    http://<машина>:8090/system/firmware/install

Посмотреть ход операции, установленные версии и ту, что загрузится следующей:

curl -u admin:пароль http://<машина>:8090/system/firmware

Перечислить версии канала обновлений:

curl -u admin:пароль http://<машина>:8090/system/firmware/available

Перезагрузиться в новую версию:

curl -u admin:пароль -X POST http://<машина>:8090/system/reboot

Что происходит при установке

  1. Демон распаковывает пакет на раздел изменяемых данных.
  2. Сверяет каждый файл с манифестом контрольных сумм, а продукт, архитектуру и профиль железа — с работающими.
  3. Только после этого перемонтирует загрузочный раздел на запись и копирует недостающее. Образы слоёв, общие с уже установленными версиями, не копируются.
  4. Переводит запись загрузчика по умолчанию на новую версию.

После установки на разделе остаются работающая версия и новая. Остальные убираются вместе с образами слоёв, которые больше никому не нужны.

Новая версия начинает работать только после перезагрузки — установка сама машину не перезагружает.

Откат

Откат — это выбор прежней версии и перезагрузка:

curl -u admin:пароль -X POST http://<машина>:8090/system/firmware/<версия>/select
curl -u admin:пароль -X POST http://<машина>:8090/system/reboot

Удалить ненужную версию:

curl -u admin:пароль -X DELETE http://<машина>:8090/system/firmware/<версия>

Работающую и выбранную версии удалить нельзя.

Когда демона нет

Если демон не поднялся или до него не достучаться, тот же путь проходится руками с консоли под root. Программа firmware-update лежит в базовом слое, зависит только от оболочки и утилит слоя и делает ровно три вещи — скачать, переложить, переключить — с теми же проверками, что и демон. Она ничего не удаляет.

firmware-update install https://…/mcaster-<версия>-amd64.update.tar   # или путь к файлу
firmware-update list                     # версии на разделе: работающая и следующая
firmware-update select <версия>          # следующая загрузка с прежней версии
systemctl reboot

Чего пока нет

Автоматического отката при неудачной загрузке новой версии нет: если машина не поднялась, загрузочную запись по умолчанию возвращают руками из меню загрузчика. Машины ранних выпусков несут загрузочный раздел на одну версию, и обновление по месту туда не помещается — такие машины один раз переустанавливают с флешки.