Вопрос или проблема
Несмотря на поиск в интернете, я так и не смог найти чёткого описания, как ‘dpkg’ в Debian сравнивается с установкой из исходников.
В частности, если я устанавливаю пакет из исходников, я могу указать различные флаги сборки или настроить Makefile перед установкой. Как я могу найти эквивалентные настройки, использованные при создании результирующего бинарного файла из ‘.deb’ файла?
Я могу придумать два варианта:
- Запускается стандартная команда ‘./config’ и ‘make’ с флагами сборки. Полученные бинарные файлы затем объединяются в пакет ‘.deb’.
- Пакет ‘.deb’ содержит исходный код. Программное обеспечение ‘dpkg’ затем указывает необходимые настройки ‘./config’ и флаги сборки.
Внутренняя структура “deb” пакета состоит из трех основных частей: секции управления, секции данных и дополнительной секции скриптов. Каждая из этих частей выполняет специфическую функцию, обеспечивающую правильное распространение, установку и работу упакованного программного обеспечения.
Секция управления: эта секция содержит метаданные пакета, включая такие сведения, как имя пакета, версия, описание, архитектура, зависимости и другая информация, необходимая для правильного управления пакетом. Файлы в этой секции хранятся в каталоге с именем DEBIAN (заглавными буквами) внутри “deb” пакета.
Секция данных: эта секция содержит файлы и каталоги, которые будут установлены на целевой системе. Структура каталогов в этой секции отражает структуру каталогов файловой системы целевой системы.
Дополнительные скрипты: .deb пакеты могут включать скрипты, которые выполняются до или после установки или при удалении пакета. Эти скрипты, которые являются частью секции управления, помогают настроить программное обеспечение, решить проблемы с зависимостями или выполнить другие задачи, необходимые для корректной установки программного обеспечения. Следующие имена стандартизированы для скриптов:
preinst: выполняется перед установкой файлов пакета.
postinst: выполняется после установки файлов пакета.
prerm: выполняется перед удалением файлов пакета.
postrm: выполняется после удаления файлов пакета.
.deb пакеты являются двоичными файлами в формате ar, которые могут быть извлечены с помощью инструментов, таких как ar или dpkg.
Используя их, вы получите три файла:
debian-binary: небольшой файл, указывающий версию формата пакета.
control.tar.gz: сжатый tar файл, содержащий секцию управления пакета.
data.tar.gz или data.tar.xz: сжатый tar файл, содержащий секцию данных пакета.
Как упаковать программу в формате “deb”.
Необходимые инструменты: dpkg-dev debhelper devscripts
Получите исходный код
Создайте каталог, содержащий структуру каталогов, которая будет отражаться в файловой системе целевой системы при установке пакета.
Создайте файл управления внутри каталога DEBIAN, который должен содержать основные метаданные о пакете, такие как имя, версия, архитектура, зависимости и описание.
Создайте .deb пакет из родительского каталога пакета, используя команду dpkg-deb.
Ответ или решение
Чтобы найти детали конфигурации бинарного файла ‘.deb’, когда вы интересуетесь, какие параметры сборки использовались, важно понять внутреннюю структуру и процесс создания этих пакетов. В отличие от сборки из исходного кода, где вы можете самому указать различные флаги и настроить Makefile, пакеты ‘.deb’ уже содержат предварительно собранный бинарный код и включают различные компоненты, которые позволяют легко управлять установкой и удалением программ.
Основные элементы структуры ‘.deb’
-
Раздел управления: Этот раздел включает метаданные пакета — информация о названии пакета, версии, описании, архитектуре и зависимостях. Эти файлы находятся в директории DEBIAN и играют решающую роль в управлении пакетами.
-
Данные и скрипты: Раздел данных содержит сами файлы программы и их целевую структуру файловой системы. Кроме того, в пакете могут быть файлы скриптов, которые запускаются до или после установки/удаления. Эти скрипты могут включать команды для настройки окружения или выполнения других задач.
-
Формат и инструменты для работы с ‘.deb’: ‘.deb’ пакеты представляют собой бинарные файлы формата ar и их можно извлекать с помощью утилит, таких как
ar
илиdpkg
. Командаdpkg-deb -x пакет.deb целевая_папка
позволяет извлекать содержимое пакета. Это поможет в изучении структуры и содержимого пакета, но не раскрывает детали сборки.
Как узнать параметры сборки?
Чтобы выяснить параметры, использованные при сборке программ в пакете ‘.deb’, вы можете попытаться восстановить процесс следующим образом:
-
Исходный код и исходные пакеты: Некоторые дистрибутивы (например, Ubuntu или Debian) могут предоставлять исходные пакеты с именем, заканчивающимся на
*.dsc
. Вы можете скачать такие пакеты и изучить файлы конфигурации. -
Политики и документация: Часто разработчики пакетов публикуют документацию или дебаг-логи, где описывают процесс сборки. Изучение документации может дать представление о флагах сборки и других настройках.
-
Использование
dpkg-source
иdebuild
: Эти утилиты позволяют восстановить процесс сборки пакета из исходников. Используя командыdpkg-source -x файл.dsc
иdebuild
, вы можете попытаться воспроизвести сборку самостоятельно. -
Анализ билд-скриптов: Если в ‘.deb’ есть скрипты, такие как
postinst
илиprerm
в директории DEBIAN, они могут дать дополнительную информацию о том, как программы подготавливаются или настраиваются после установки.
Ведение подробных журналов (логов) и системная документация помогут вам лучше понять, как была собрана конечная программа. Это особенно важно в профессиональной IT-среде, где необходимо точно знать, какие версии и конфигурации используются в различных частях информационной системы.