Техническая архитектура¶
InfraMedia собирается образом и не изменяется на машине. Корень файловой системы составлен из слоёв, каждый слой — образ squashfs, упакованный при сборке. Всё, что машина пишет, лежит на отдельных разделах.
Слои прошивки¶
| Слой | Содержимое |
|---|---|
| Базовый | линукс с systemd, демон управления, веб-интерфейс, модули ядра |
postgres |
сервер базы данных для продуктов, которым он нужен |
| Прикладной | медиасервер: исполняемые файлы и то, что им нужно сверх базового слоя |
Слой прикладной программы — приращение над базовым: в него попадает только разница с базовым слоем. Библиотеки, которые уже есть внизу, наверх не едут.
Разделы диска¶
Установщик размечает диск на три раздела.
- FIRMWARE — загрузочный раздел EFI: загрузочные файлы версий, образы слоёв, меню загрузчика.
- SETTINGS — настройки машины: хранилище конфигуратора и оверлей
/etc. - VAR — изменяемые данные: журналы, каталог данных базы, рабочие файлы прикладной программы.
Корень при этом остаётся только для чтения. Домашний каталог root — tmpfs и живёт до перезагрузки; то, что должно её пережить, лежит на разделе изменяемых данных.
Загрузка¶
Машина грузится через systemd-boot. Ядро, initrd, командная строка и манифест состава склеены в один загрузочный файл. Это сделано ради одного свойства: выбор загрузочной записи выбирает ядро, initrd и список слоёв вместе, рассинхронизировать их нельзя. Две версии прошивки на диске — это две записи в меню, и откат возвращает состав целиком.
Порядок загрузки такой.
- Прошивка UEFI передаёт управление загрузчику, тот запускает загрузочный файл версии, выбранной в меню.
- initrd читает манифест, находит на загрузочном разделе образы слоёв и сверяет их sha256 с манифестом.
- Слои подключаются и собираются в корень; сверху подключается оверлей
/etcс раздела настроек. - Управление передаётся systemd, который поднимает демон управления и прикладную программу.
initrd — сценарий на busybox: он не зависит от прикладной программы и собирается один раз на архитектуру.
Конфигуратор¶
Конфигуратор — демон управления машиной. Он слушает HTTP на порту 8090 и отдаёт программный интерфейс: обзор машины, сетевые интерфейсы, имя машины и серверы времени, прошивка, перезагрузка и выключение. Он же раздаёт веб-интерфейс — отдельного порта под интерфейс нет.
Воздействие на систему идёт через вызовы штатных программ и запись конфигурационных файлов — ip, networkctl, resolvectl, hostnamectl, timedatectl, systemctl и файлы в /etc/systemd/.
Хранилище настроек¶
Единственный источник правды о том, как настроена машина, — хранилище настроек конфигуратора. Файлы systemd рендерятся из него и никогда не читаются обратно.
Из этого следуют два практических правила.
- Править сгенерированные файлы руками бессмысленно: следующий рендеринг вернёт заданное значение.
- Заданное значение и фактическое состояние — разные вещи. Заданное берётся из хранилища, фактическое конфигуратор снимает с работающей системы машиночитаемым выводом системных утилит, и они могут расходиться.
Сессия изменения¶
Изменения сети применяются в режиме «подтверди или откачу». Изменение открывает сессию, и пока она открыта, хранилище заморожено целиком. Если подтверждения в срок не пришло, хранилище возвращается к сохранённой копии, а настройки — к прежним. Открытых сессий не более одной.
Смысл механизма прикладной: ошибка в настройке интерфейса больше не означает потерю доступа к машине.
Ограниченный режим¶
Если хранилище прочитать не удалось — файл повреждён или его версия новее самого демона, — конфигуратор переходит в ограниченный режим: читающие операции работают, изменения отклоняются, рендеринг не выполняется. Машина продолжает работать на том, что уже отрендерено.
Профиль железа¶
Профиль железа описывает машины, на которые едет прошивка этой архитектуры: конфигурацию ядра с их драйверами и правила, приводящие физические интерфейсы к каноническим именам по пути устройства. Драйверы всех поддерживаемых машин встроены в одно ядро, и на любой из них грузится один и тот же образ.
Канонические имена назначаются по роли интерфейса — manage для управляющих, streaming для потоковых, с порядковым номером. Настраивать через программный интерфейс можно только интерфейс, получивший каноническое имя; физический интерфейс без него виден, но не настраивается.
Веб-интерфейс¶
Веб-интерфейс едет базовым слоем и раздаётся самим демоном — он обязан работать на машине, где прикладной программы нет вовсе или она не поднялась. Разделов пять: Обзор, Интерфейсы, Система, Обновления, Питание.
Экраны собраны отдельно от оболочки: они не несут ни темы, ни маршрутизатора, ни авторизации и не знают, по какому адресу лежит программный интерфейс. Поэтому у них два входа — приложение на порту конфигуратора и раздел внутри консоли прикладной программы, которая подгружает экраны с самой машины. Оператор настраивает шасси там же, где работает с медиасервером.
Две версии¶
У операционной системы и у прошивки сервера разные номера. Прошивка — это InfraMedia такой-то версии плюс прикладная программа такой-то; обе записаны в манифесте загрузочного файла. Прикладная программа собирается на опубликованных частях операционной системы, а не пересобирает её.