Какие инструменты используют разработчики дистрибутива (например, Ubuntu, Fedora) для управления сборкой / зависимостями?


Задний план

Я хотел бы, строго ради исследования и проверки концепции, разветвить существующий дистрибутив Linux, такой как Ubuntu (или, возможно, Fedora). У меня есть небольшой кластер vagrant виртуальных машин, и я хотел бы поэкспериментировать с этим, чтобы понять, насколько большие (с открытым исходным кодом) проекты обрабатывают сборки и управление зависимостями.


Подробности

Хотя вытащить соответствующие деревья исходных текстов, патчи и т.д .; одна вещь, которая ускользает от меня, - это как они собирают каждый пакет? Насколько я понимаю, для того, чтобы сделать что-то вроде ночной сборки, сопровождающему дистрибутива необходимо:

  • Настройте среду сборки с инструментами / компиляторами для всех поддерживаемых платформ (т.е. x86, x86_64, arm, armhf, aarch64, mips и т. Д.).
  • Извлеките архивы / репозитории с исходным кодом для каждого пакета.
  • Разверните заголовки для всех пакетов библиотеки.
  • Соберите и разверните библиотеки (т.е. файлы .a и .so) для всех пакетов библиотек.
  • Создайте и разверните приложения / двоичные файлы, которые (возможно) зависят от ранее созданных библиотек.
  • Упакуйте каждую библиотеку / приложение как собственное _10 _ / _ 11_ / tarball.
  • Создайте общий установщик, включающий все пакеты.

Вопрос

Как разработчики дистрибутива все это настраивают? Существует ли общая / стандартная структура, используемая разработчиками дистрибутива, или все они сами создают собственное решение?


person Cloud    schedule 20.09.2018    source источник
comment
@Fabiotk Это очень полезно. Если вы можете преобразовать этот ответ в вопрос (чуть более длинный) (плюс ссылку на источник книги), я отмечу его как принятый. Спасибо.   -  person Cloud    schedule 21.09.2018


Ответы (1)


Многие из этих шагов вы можете изучить в Linux с нуля книга. Хотя эта книга ориентирована на платформу x86_64, то, что вы из нее узнаете, можно перенести на другие. Когда позже вы создадите, например, для ARM, вы можете следовать руководствам типа this для ядра и для конкретных пакетов / библиотек, соответствующих им команд для кросс-компиляции, это будет зависеть от программы. После прочтения этой книги вы сможете понять, по крайней мере, первые пять пунктов в деталях вашего сообщения.

Что касается упаковки пакетов .deb, .rpm, это будет специфично для разветвленного дистрибутива, вам нужно будет прочитать некоторые документы по этому поводу. Если вы планируете выпустить форк, вам также понадобится онлайн-провайдер для пакетов (примеры, sourceforge, github, gitlab). Таким образом, вам нужно будет настроить репозитории для исходных и двоичных файлов, чтобы ваш диспетчер пакетов указывал на (в случае apt это будут те, на которые указывает /etc/apt/sources.list.)

Наконец, вы захотите упаковать все это в .iso файл для установки. После того, как ваша LFS будет запущена на вашем компьютере, вы можете просто сгенерировать из нее образ, предполагая, что он состоит из одного раздела в /dev/sda1:

dd if=/dev/sda1 of=my-distro-iso.iso

А потом сожгите и загрузитесь в него. Этого будет достаточно, чтобы другие люди установили ваш дистрибутив. Если вы хотите сделать больше и создать установщик, возможно, вы можете использовать построители дистрибутивов, такие как Ubiquity или Anaconda. Это не будет тривиально, и вам придется прочитать, как их использовать, но для тех, кто только что прошел тест LFS, это будет легко;)

Вы также можете положиться на книгу Расширенное программирование Linux при разработке приложений для вашего дистрибутива.

person Fabiotk    schedule 21.09.2018