5 признаков почему DEB пакет не является обычным архивом

Компьютерное

Вы управляете пакетами Debian ежедневно, но  никогда не задумывались, что же это а файлы такие? Тогда эта статья для вас… Серьезно,  deb-пакеты нечто большее чем простой файл архива, иначе мы бы просто использовали архивы TAR (ну вы знаете их, они еще заканчиваются на .tar.gz). давайте разберемся, от чего же так!

1. Это два файла TAR архива в одном файле архива AR!

И в самом деле, .deb файл является файлом формата AR, вы можете управлять им через команду ar. Этот архив содержит 3 файла, вы можете сами убедиться в этом скачав любой .deb файл и запустив “ar t” для него:

$ ar t gwibber_2.31.91-1_all.deb
debian-binary
control.tar.gz
data.tar.gz

debian-binary это текстовый файл указывающий версию .deb файла, например “2.0″.

$ ar p gwibber_2.31.91-1_all.deb debian-binary
2.0

data.tar.gz содержит как раз файлы программы, содержимое этого архива будет установлено в вашу корневую директорию когда вы запустите “dpkg —unpack“.

Но самая интересная часть—которая делает .deb-файл чем-то большим чем просто файл архива —это последний файл. control.tar.gz содержит мета-информацию используемую пакетным менеджером. Что это такое?

$ ar p gwibber_2.31.91-1_all.deb control.tar.gz | tar tzf —
./
./postinst
./prerm
./preinst
./postrm
./conffiles
./md5sums
./control

2. Он содержит мета-информацию которая описывает пакет и его зависимости

Файл control из архива control.tar.gz это основной файл. В нем содержится основная информация о пакете, такая как имя пакета, его версия, описание,архитектура для запуска кто поддерживает пакет, и так далее. Он так же содержит поля с зависимостями, так что пакетный менеджер сможет получить все что требуется для установки пакета без вашей ручной работы. Если вы хотите больше узнать о полях с зависимостями, вы можете проверить Binary control файлы в Debian Policy.

Эта информация в конечном итоге сохраняется в файле /var/lib/dpkg/status после того как пакет будет установлен.

3. Он содержит скрипты сопровождения, так что все работает просто из коробки

На различных этапах установки /обновления/удаления  пакета, dpkg запускает скрипты которые соержаться в самом пакете:

  • postinst: после установки
  • preinst: до установки
  • postrm: после удаления
  • prerm: до удаления

Заметьте, что описание сильно упрощено. Фактически во многих случаях скрипты запускаются с различными параметрами. Есть целая глава Debian Policy посвященная этой теме. Нов ы можете прочитать про это в вики Debian: http://wiki.debian.org/MaintainerScripts.

Хотя это и выглядит страшновато, но это очень важная особенность.Она требуется например для того чтобы обновления были совместимы с предыдущими пакетами, для предоставления автоматического конфигурирования, создания системных пользователей на лету и т.д.

4. Специальные конфигурационные файлы

Распакованные файлы из архива перезаписывают предыдущие файлы. Это ожидаемое поведение, которое происходит при обновлении, исключая конфигурационные файлы. Вы же не хотите потерять все ваши настроки?

Поэтому пакет содержит список конфигурационных файлов в файле conffiles, который расположен в control.tar.gz. Таким образом dpkg будет разбираться с этими файлами по особому.

5.Вы всегда можете добавить новую мета-информацию

И в самом деле, многие инструменты уже используют возможность добавления своих файлов в файл control.tar.gz:

  • debsums использует файл md5sums чтобы убедиться что ни один файл не был изменен
  • dpkg-shlibdeps использует файлы shlibs и symbols для генерации зависимостей от библиотек
  • debconf использует скрипт config для сбора конфигурационной информации от пользователя.

Однажды установленные, эти файлы сохраняются dpkg в директории /var/lib/dpkg/info/package.* вместе со скриптами сопровождения.

Оцените статью
( 1 оценка, среднее 5 из 5 )
Блог админа