LINUX.ORG.RU

История изменений

Исправление 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 базового образа.