История изменений
Исправление ValdikSS, (текущая версия) :
Есть два принципиальных подхода:
- Сборщик всего мира, а-ля buildroot и yocto: соберёт сначала компилятор+libc (тулчейн), затем ядро/загрузчик/обвязку, затем юзерспейс, всё из исходников, затем всё это выдаст в виде образа в необходимом формате, и вы получаете «дистрибутив» в изначальном смысле слова;
- Сборщик образов существующего дистрибутива в определённом формате, ничего не компилирует: mkosi, packer, bootc
Первое — если у вас ембеддед-ембеддед (нетипичные архитектуры, нетипичные конфигурации, какой-нибудь NOMMU, требования по минимизации SBOM/памяти/компиляционным флагам обвязки, особый libc), и вам нужно контролировать всё.
Второе — если вам принципиально подходит пакетная база какого-то из существующих дистрибутивов (arm/risc-v/mips/whatever типичное ходовое, устраивают их сборочные флаги готовых библиотек) и вам нужно сфокусироваться на запуске вашего ПО — это экономит время и ресурсы на обновления и отслеживания уязвимостей, а ядро, загрузчик и своё ПО вы можете собрать отдельно и использовать как артефакт при сборке образа.
Я обычно всем рекомендую пакетную базу, пакетный менеджер и систему сборки пакетов Debian/Ubuntu, потому что она позволяет чрезвычайно легко кросс-компилировать на любой архитектуре под любую другую архитектуру, устанавливая пакеты и заголовочные файлы неродной архитектуры прямо из репозиториев, штатным образом (позволяет смешивать какое угодно количество архитектур на хосте, и готовые тулчейны подо всё), и не задумываться о настройке сборочной системы вообще, благодаря встроенным автоматизирующим врапперам для autoconf, cmake, qmake, meson, ninja, ant, perl/python, maven, gradle, bmake, golang, и наверняка другим системам.
Я у себя использую двустадийный mkosi: сначала собирается builder-образ на основе Debian, в котором кросс-компилируется необходимое ПО и выдаётся в виде .deb’ов, а затем собирается image-образ нужной архитектуры, в который устанавливается базовый комплект ОС и собственное ПО из .deb’ов, и выдаётся в виде готового образа (mkosi штатно поддерживает кучу разных output’ов).
mkosi поддерживает слои, но относительно простенькие. Ускоряет начальный bootstrap базового образа.
Исправление ValdikSS, :
Есть два принципиальных подхода:
- Сборщик всего мира, а-ля buildroot и yocto: соберёт сначала компилятор+libc (тулчейн), затем ядро/загрузчик/обвязку, затем юзерспейс, всё из исходников, затем всё это выдаст в виде образа в необходимом формате, и вы получаете «дистрибутив» в изначальном смысле слова;
- Сборщик образов существующего дистрибутива в определённом формате, ничего не компилирует: mkosi, packer, bootc
Первое — если у вас ембеддед-ембеддед (нетипичные архитектуры, нетипичные конфигурации, требования по минимизации SBOM/памяти/компиляционным флагам обвязки, особый libc), и вам нужно контролировать всё.
Второе — если вам принципиально подходит пакетная база какого-то из существующих дистрибутивов (arm/risc-v/mips/whatever типичное ходовое, устраивают их сборочные флаги готовых библиотек) и вам нужно сфокусироваться на запуске вашего ПО — это экономит время и ресурсы на обновления и отслеживания уязвимостей, а ядро, загрузчик и своё ПО вы можете собрать отдельно и использовать как артефакт при сборке образа.
Я обычно всем рекомендую пакетную базу, пакетный менеджер и систему сборки пакетов Debian/Ubuntu, потому что она позволяет чрезвычайно легко кросс-компилировать на любой архитектуре под любую другую архитектуру, устанавливая пакеты и заголовочные файлы неродной архитектуры прямо из репозиториев, штатным образом (позволяет смешивать какое угодно количество архитектур на хосте, и готовые тулчейны подо всё), и не задумываться о настройке сборочной системы вообще, благодаря встроенным автоматизирующим врапперам для autoconf, cmake, qmake, meson, ninja, ant, perl/python, maven, gradle, bmake, golang, и наверняка другим системам.
Я у себя использую двустадийный mkosi: сначала собирается builder-образ на основе Debian, в котором кросс-компилируется необходимое ПО и выдаётся в виде .deb’ов, а затем собирается image-образ нужной архитектуры, в который устанавливается базовый комплект ОС и собственное ПО из .deb’ов, и выдаётся в виде готового образа (mkosi штатно поддерживает кучу разных output’ов).
mkosi поддерживает слои, но относительно простенькие. Ускоряет начальный bootstrap базового образа.
Исходная версия ValdikSS, :
Есть два принципиальных подхода:
- Сборщик всего мира, а-ля buildroot и yocto: соберёт сначала компилятор+libc (тулчейн), затем ядро/загрузчик/обвязку, затем юзерспейс, всё из исходников, затем всё это выдаст в виде образа в необходимом формате, и вы получаете «дистрибутив» в изначальном смысле слова;
- Сборщик образов существующего дистрибутива в определённом формате, ничего не компилирует: mkosi, packer, bootc
Если у вас ембеддед-ембеддед (нетипичные архитектуры, нетипичные конфигурации, требования по минимизации SBOM/памяти/компиляционным флагам обвязки) то вам нужно первое.
Если же вам принципиально подходит пакетная база какого-то из существующих дистрибутивов (arm/risc-v/mips/whatever типичное ходовое), вам подойдёт второе — это экономит время и ресурсы на обновления и отслеживания уязвимостей, а ядро, загрузчик и своё ПО вы можете собрать отдельно и использовать как артефакт при сборке образа.
Я обычно всем рекомендую пакетную базу, пакетный менеджер и систему сборки пакетов Debian/Ubuntu, потому что она позволяет чрезвычайно легко кросс-компилировать на любой архитектуре под любую другую архитектуру, устанавливая пакеты и заголовочные файлы неродной архитектуры прямо из репозиториев, штатным образом (позволяет смешивать какое угодно количество архитектур на хосте), и не задумываться о настройке сборочной системы вообще, благодаря встроенным автоматизирующим врапперам для autoconf, cmake, qmake, meson, ninja, ant, perl/python, maven, gradle, bmake, golang, и наверняка другим системам.
Я у себя использую двустадийный mkosi: сначала собирается builder-образ на основе Debian, в котором кросс-компилируется необходимое ПО и выдаётся в виде .deb’ов, а затем собирается image-образ нужной архитектуры, в который устанавливается базовый комплект ОС и собственное ПО из .deb’ов, и выдаётся в виде готового образа (mkosi штатно поддерживает кучу разных output’ов).
mkosi поддерживает слои, но относительно простенькие. Ускоряет начальный bootstrap базового образа.