Формат .deb
deb — это формат бинарных пакетов, используемый в операционных системах на основе ядра Linux, в первую очередь в дистрибутивах семейства Debian (Debian, Ubuntu, Linux Mint и их производных). Файл с расширением .deb представляет собой архив, содержащий исполняемые файлы, библиотеки, конфигурационные данные, документацию и метаинформацию, необходимую для установки, обновления и удаления программного обеспечения с помощью системы управления пакетами.
История
Формат deb был разработан в 1993—1994 годах для дистрибутива Debian, который создавался как полностью свободная операционная система. Первоначально для управления пакетами использовалась утилита dpkg, а сам формат представлял собой простой tar-архив с определённой структурой. В 1995 году с выходом Debian 1.1 «Buzz» была введена система управления пакетами APT (Advanced Package Tool), которая автоматизировала разрешение зависимостей и загрузку пакетов из репозиториев. С тех пор формат deb остаётся основным для Debian и его производных, пройдя несколько этапов стандартизации и улучшения, включая поддержку цифровых подписей для верификации подлинности пакетов.
Структура файла .deb
Файл .deb представляет собой архив в формате ar (Unix-архиватор), который содержит три обязательных компонента:
- debian-binary — текстовый файл с версией формата (обычно содержит строку
2.0). - control.tar.gz (или control.tar.xz) — архив с метаданными пакета: файлы
control(описание, зависимости, версия),md5sums(контрольные суммы),conffiles(список конфигурационных файлов),preinst,postinst,prerm,postrm(скрипты, выполняемые до и после установки/удаления). - data.tar.gz (или data.tar.xz, data.tar.bz2, data.tar.zst) — архив с файлами, которые будут установлены в файловую систему (исполняемые файлы, библиотеки, документация и т.д.).
Сжатие data-архива может различаться: в современных дистрибутивах всё чаще используется zstd (расширение .zst) для более быстрой распаковки, хотя gzip остаётся наиболее распространённым.
Система управления пакетами
dpkg
dpkg (Debian Package) — низкоуровневая утилита для установки, удаления и управления пакетами .deb. Она работает напрямую с файлами пакетов, но не разрешает зависимости автоматически. Основные команды: dpkg -i package.deb (установка), dpkg -r package (удаление), dpkg -l (список установленных пакетов).
APT
APT (Advanced Package Tool) — инструмент более высокого уровня, который автоматически загружает пакеты из репозиториев, разрешает зависимости и управляет обновлениями. APT использует dpkg для фактической установки пакетов, но добавляет функциональность работы с репозиториями (файл /etc/apt/sources.list), кэширование метаданных и интеллектуальное разрешение конфликтов.
Другие инструменты
- Aptitude — консольный интерфейс для APT с текстовым меню и возможностью поиска.
- Synaptic — графический менеджер пакетов на основе GTK.
- GDebi — утилита для установки локальных .deb-файлов с автоматическим разрешением зависимостей через APT.
Метаданные пакета
Файл control содержит обязательные и опциональные поля, описывающие пакет:
| Поле | Описание | Пример |
|---|---|---|
| Package | Имя пакета | firefox |
| Version | Версия пакета | 1:115.0.2+build1-0ubuntu0.22.04.1 |
| Section | Категория (например, net, utils, devel) | web |
| Priority | Приоритет (required, important, standard, optional, extra) | optional |
| Architecture | Архитектура (amd64, i386, arm64, all) | amd64 |
| Depends | Список зависимостей (другие пакеты, необходимые для работы) | libc6 (>= 2.35), libgtk-3-0 |
| Recommends | Рекомендуемые пакеты (не обязательны, но желательны) | fonts-dejavu-core |
| Suggests | Предлагаемые пакеты (необязательные) | firefox-locale-ru |
| Description | Краткое и полное описание | Mozilla Firefox web browser |
Разрешение зависимостей
Одна из ключевых особенностей формата deb — система зависимостей. Пакет может указывать:
- Depends — пакеты, которые должны быть установлены обязательно.
- Pre-Depends — пакеты, которые должны быть установлены и настроены до установки данного пакета (используется для критических компонентов, например, dpkg).
- Recommends — пакеты, которые обычно устанавливаются вместе, но не обязательны.
- Suggests — пакеты, которые могут быть полезны, но не требуются.
- Conflicts — пакеты, которые не могут быть установлены одновременно.
- Replaces — пакеты, которые заменяются данным пакетом.
- Provides — виртуальные пакеты, которые данный пакет предоставляет (например,
mail-transport-agent).
APT автоматически разрешает эти зависимости, загружая и устанавливая все необходимые пакеты из репозиториев.
Процесс установки
Установка пакета .deb с помощью dpkg включает следующие шаги:
- Распаковка архива ar и извлечение control.tar.gz и data.tar.gz.
- Проверка целостности (контрольные суммы) и соответствия зависимостям.
- Выполнение скрипта
preinst(если есть). - Распаковка data.tar.gz в корневую файловую систему.
- Выполнение скрипта
postinst(настройка, запуск служб, обновление базы данных). - Обновление базы данных установленных пакетов в
/var/lib/dpkg/.
При удалении выполняются скрипты prerm и postrm, а файлы, отмеченные как конфигурационные, могут оставаться в системе (если не указана опция --purge).
Отличия от других форматов
- RPM (Red Hat Package Manager) — основной формат в дистрибутивах Red Hat, Fedora, CentOS, openSUSE. RPM использует другой формат архива (cpio) и иную систему метаданных. Инструменты управления —
rpmиdnf/yum. - Flatpak, Snap, AppImage — современные форматы, ориентированные на изоляцию приложений и контейнеризацию. Они не требуют разрешения зависимостей на уровне системы и могут работать в разных дистрибутивах, но занимают больше места и имеют свои механизмы обновления.
Инструменты для создания .deb-пакетов
Создание пакета .deb требует соблюдения определённой структуры каталогов и правил. Основные инструменты:
- dpkg-deb — утилита для сборки и распаковки .deb-файлов.
- debhelper — набор скриптов для автоматизации сборки (наиболее распространён).
- dh-make — генератор шаблонов для создания пакета из исходного кода.
- Checkinstall — утилита, которая отслеживает установку программы из исходников и создаёт .deb-пакет на основе изменений в файловой системе.
- equivs — инструмент для создания пустых пакетов-заглушек (например, для удовлетворения зависимостей).
Репозитории и распространение
Пакеты .deb распространяются через репозитории — каталоги, содержащие метаданные (файлы Packages.gz или Packages.xz) и сами пакеты. Репозитории могут быть официальными (например, репозитории Debian или Ubuntu) или сторонними (PPA для Ubuntu, репозитории разработчиков). Для обеспечения безопасности пакеты подписываются цифровыми подписями GPG, а APT проверяет подлинность репозитория.
Критика и ограничения
- Зависимости — сложная система зависимостей может приводить к конфликтам, особенно при установке пакетов из разных репозиториев.
- Фрагментация — пакеты .deb, созданные для одного дистрибутива (например, Ubuntu), могут не работать в другом (Debian) из-за различий в версиях библиотек.
- Отсутствие изоляции — в отличие от Flatpak или Snap, пакеты .deb устанавливаются в общую файловую систему и могут конфликтовать с другими пакетами.
- Сложность создания — для создания корректного пакета требуется знание структуры и правил Debian Policy, что может быть сложно для новичков.
Источники
- Debian Policy Manual (раздел о структуре пакетов)
- dpkg man-страницы (dpkg, dpkg-deb)
- APT HOWTO (документация Debian)
- Ubuntu Packaging Guide
- «The Debian System» by Martin F. Krafft
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →