Обновление прошивки¶
Установленная машина обновляется без флешки. Пакет обновления встаёт рядом с работающей версией, а не поверх неё: настройки, данные и пароли обновление переживают, а прежняя версия остаётся на загрузочном разделе для отката.
Машина ничего не скачивает и не ставит сама. Установка обновления — всегда явный запрос: с экрана интерфейса, из программного интерфейса или руками с консоли.
Пакет обновления¶
Пакет — это архив с тем, что ложится на загрузочный раздел: загрузочный файл новой версии, образы её слоёв, запись меню загрузчика, описание продукта и манифест контрольных сумм. Рядом с пакетом публикуется его собственная контрольная сумма.
Канал обновлений¶
Откуда машина узнаёт о новых версиях — из индекса канала обновлений, адрес которого вшит в сборку. Машина читает индекс и перечисляет версии своего продукта и своей архитектуры; те, что уже стоят на разделе, помечены.
Сборка без канала о нём не знает вовсе, и ставить на неё можно только по адресу или файлом.
Установка¶
Из веб-интерфейса¶
Раздел Обновления первым делом называет две версии: какая работает и какая загрузится следующей. Рядом кнопка перезагрузки — когда следующая версия отличается от работающей, она подсвечена, и экран говорит, что именно сменится при перезагрузке.
Индекс канала читается при открытии интерфейса: значок пункта меню несёт метку, когда в канале есть версия, которой на разделе нет. Кнопка Проверить обновления перечитывает индекс.
Через программный интерфейс¶
Ответ приходит сразу, установка идёт в фоне.
Поставить пакет файлом:
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
Что происходит при установке¶
- Демон распаковывает пакет на раздел изменяемых данных.
- Сверяет каждый файл с манифестом контрольных сумм, а продукт, архитектуру и профиль железа — с работающими.
- Только после этого перемонтирует загрузочный раздел на запись и копирует недостающее. Образы слоёв, общие с уже установленными версиями, не копируются.
- Переводит запись загрузчика по умолчанию на новую версию.
После установки на разделе остаются работающая версия и новая. Остальные убираются вместе с образами слоёв, которые больше никому не нужны.
Новая версия начинает работать только после перезагрузки — установка сама машину не перезагружает.
Откат¶
Откат — это выбор прежней версии и перезагрузка:
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
Чего пока нет
Автоматического отката при неудачной загрузке новой версии нет: если машина не поднялась, загрузочную запись по умолчанию возвращают руками из меню загрузчика. Машины ранних выпусков несут загрузочный раздел на одну версию, и обновление по месту туда не помещается — такие машины один раз переустанавливают с флешки.