мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
glossary:gnu_linux:deb_pkg [2026/03/03 13:27] radi0devglossary:gnu_linux:deb_pkg [2026/03/03 14:07] (текущий) radi0dev
Строка 1: Строка 1:
 ====== deb пакет ====== ====== deb пакет ======
 +
 +deb пакеты делятся на бинарные (.deb) и исходные (.tar.gz).
  
 Deb-пакет это обычный архив файлов, содержащий файлы, предназначенные для установки в систему, а так же некоторые служебные файлы, необходимые для того чтобы эту установку сделать гибкой. При помощи программы ar упаковано в один файл: Deb-пакет это обычный архив файлов, содержащий файлы, предназначенные для установки в систему, а так же некоторые служебные файлы, необходимые для того чтобы эту установку сделать гибкой. При помощи программы ar упаковано в один файл:
Строка 33: Строка 35:
   * Архитектуру для которой данный пакет собран;    * Архитектуру для которой данный пакет собран; 
   * Некоторые другие параметры.    * Некоторые другие параметры. 
 +
 +[[https://www.debian.org/doc/debian-policy/ch-controlfields.html|подробнее о control-файле]]
  
 ==== Опциональное содержимое ==== ==== Опциональное содержимое ====
  
 +=== md5sums ===
 +
 +''md5sums'' - Содержит md5 хеши для всех файлов кроме файлов находящихся в каталоге DEBIAN/. Данный файл необязателен для deb-пакета, однако программы верификации пакетов считают пакеты, несодержащие этот файл ошибочными. Может использоваться некоторыми программами администрирования системы для верификации изменений в файловой системе. 
 +
 +=== Скрипты для установки/удаления пакета ===
 +
 +Пакет может содержать несколько скриптов (или программ), которые будут вызываться при установке/удалении пакета. Эти скрипты позволяют майнтенеру выполнять некоторые действия при установке/удалении. Например этими скриптами могут создаваться/удаляться каталоги в которых программа будет хранить свои временные данные, может производиться добавление/удаление программы в меню вашего оконного менеджера, первичное конфигурирование программы и так далее. 
 +
 +
 +Виды скриптов:
 +  * ''preinst'' - скрипт, вызывающийся перед распаковкой пакета в файловую систему. Обычно при помощи этого скрипта пользователю задаются вопросы, позволяющие позже сконфигурировать программу. Так же возможно производится сбор информации, которая потребуется позже для конфигурирования программы. Если скрипт завершится с кодом ошибки, то пакет не будет установлен в систему;
 +  * ''postinst'' - скрипт, вызывающийся после распаковки пакета. При помощи этого скрипта производится конфигурирование уже установленной программы. Конфигурирование происходит с использованием информации полученной на предыдущем этапе от пользователя. Задавать вопросы пользователю из скрипта postinst не принято.;
 +  * ''prerm'' - скрипт, вызывающийся перед удалением пакета. Может задать пользователю некоторые вопросы, связанные с удалением. Например вопрос что делать с лог-файлами итп. Если скрипт завершится с кодом ошибки, пакет останется установленным в систему;
 +  * ''postrm'' - скрипт, вызывающийся после удаления пакета;
 +  * ''config'' - скрипт, вызывающийся на стадии конфигурирования и переконфигурирования пакета. Это дополнительный скрипт, который используется системой Debconf. Вызывается перед скриптом postinst, используется для того чтобы задать пользователю вопросы в системе диалогов debconf. 
 +
 +В разных ситуациях эти скрипты вызываются с разными опциями. В общем виде пакет может:
 +  * Устанавливаться в систему (первичная установка);
 +  * Устанавливаться новая версия пакета (upgrade);
 +  * Устанавливаться старая версия пакета (downgrade);
 +  * Удаляться из системы. 
 +
 +Соответственно порядок вызова скриптов и опции их вызова может быть разный. Скрипты могут вызываться со следующими параметрами (полный перечень можно найти в [[https://www.debian.org/doc/debian-policy/ch-maintainerscripts.html|Debian-policy]]): 
 +++++параметры|
 +^ Параметр ^ Доп. параметры ^ Описание ^
 +| **preinst** |||
 +| install | Номер версии* | Вызывается перед распаковкой пакета. Номер версии указывает на пакет, который стоял ранее, но был удален без ключа --purge, то есть конфигурационные файлы сохранены. С данным параметром скрипт вызывается если в системе пакет не установлен. |
 +| upgrade | Номер версии | Вызывается перед распаковкой пакета. Номер версии указывает на пакет, который стоял ранее. Выполняется upgrade или downgrade для пакета. Зная текущую версию пакета и сравнив её с передаваемым здесь значением мы можем определить что происходит upgrade или downgrade |
 +| abort-upgrade | Номер версии | Вызывается если preinst upgrade вызванное для нового пакета завершилось неудачей. Номер версии соответствует номеру версии нового пакета, который пытались установить. Таким вызовом установленный пакет информируется о том что его попытались неудачно проапгрейдить. |
 +| **postinst** |||
 +| configure | Номер версии* | Вызывается после распаковки пакета. Номер версии содержит версию пакета корректно сконфигурированного ранее. То есть того для которого данный вызов завершился без ошибки. По номеру версии скрипт конфигурации может принять решение о том каким образом необходимо производить апгрейд конфигурационных файлов программы. |
 +| reconfigure | Номер версии | Вызывается системой Debconf после переконфигурации пакета. Выполняет все необходимые действия по переконфигурации. |
 +| abort-upgrade | Номер версии | Вызывается если preinstall upgrade нового пакета завершился неудачей. Новый пакет не устанавливается, а старый при этом может провести собственную переконфигурацию для того чтобы сохранить работоспособность. |
 +| **prerm** |||
 +| remove | | Вызывается перед удалением пакета. |
 +| upgrade | Номер версии | Вызывается перед удалением пакета при его апгрейде. Номер версии указывает на версию устанавливаемого пакета. |
 +| failed-upgrade | Номер версии | Вызывается для устанавливаемого пакета, если prerm upgrade удаляемого пакета завершился с кодом ошибки. Номер версии указывает на удаляемый пакет. |
 +| **postrm** |||
 +| remove | | Вызывается после удаления пакета |
 +| purge | | Вызывается после удаления пакета. Если вызван dpkg --purge |
 +| upgrade | Номер версии | Вызывается после удаления пакета при его апгрейде. Номер версии указывает на новый пакет. |
 +| failed-upgrade | Номер версии | Вызывается после удаления пакета при его апгрейде. Вызывается в случае если postrm upgrade вернул код ошибки. Номер версии указывает на удаляемый пакет. Вызов скрипта происходит во вновь устанавливаемом пакете. |
 +| abort-install | Номер версии* | Вызывается если preinst install вернул код ошибки. Номер версии соответствует номеру версии передаваемому preinst install |
 +| **config** |||
 +| configure | Номер версии | Вызывается во время предварительной настройки пакета из dpkg-preconfigure. Этот вызов проходит во время установки/апгрейда пакета. Номер версии указывает на версию установленного на данный момент пакета. |
 +| reconfigure | Номер версии | Вызывается при повторной настройке пакета. Номер версии - номер установленной версии пакета. Инициировать вызов можно дав команду dpkg-reconfigure package из командной строки. После этого вызова системой Debconf будет вызван сценарий postinst reconfigure |
 +++++
 +
 +=== templates ===
 +
 +Если используется возможность конфигурации/реконфигурации пакета в системе Debconf (скрипт config), то этот файл содержит шаблоны диалогов с пользователем.
 +
 +=== conffiles ===
 +
 +Содержит перечень файлов пакета, которые являются конфигурационными. По одному файлу на одну строку. Эти файлы при апгрейдах пакета заменяться не будут (или же будут задаваться вопросы с предложением о замене). Подробнее о содержимом см. ''man debconf-devel''.
 +
 +==== Утилиты для работы/генерации содержимого DEBIAN/ ====
 +
 +=== dpkg-gencontrol ===
 +
 +Осуществляет генерацию файла control на базе шаблона этого файла, составляемого майнтенером, а так же дополнительных параметров, передаваемых из командной строки. В частности, устанавливает номер версии пакета, архитектуру итп. Номер версии обычно берется из файла changelog, однако иногда бывает необходимо из одного src-пакета собрать несколько deb-пакетов с разными номерами версий. Опция -v поможет Вам в этом.
 +
 +=== dpkg-shlibdeps ===
 +
 +
 +Вычисляет зависимости для исполняемых файлов и библиотек. Майнтенер обычно указывает Build-зависимости (зависимости сборки), а Depend-зависимости (зависимости необходимые для работы) вычисляются с помощью этой (или подобных) утилит. Такой подход дает возможность не привлекать майнтенера при смене имен библиотек от которых зависит пакет.
 +
 +=== dpkg-parsechangelog ===
 +
 +Позволяет извлекать из changelog-файла некоторые параметры, вроде номера версии, координат и имени майнтенера итп. Результаты работы этой утилиты могут использоваться как входные параметры для утилит вроде dpkg-gencontrol.
 +
 +=== dpkg-architecture ===
 +
 +Позволяет извлекать информацию (манипулировать ей) об архитектуре системы для которой собирается пакет или на которой собирается пакет. Выходные данные так же могут использоваться для использования в других утилитах. Например при генерации файла control утилитой dpkg-gencontrol. 
 +
 +==== Проверка соответствия пакета современным требованиям Debian ====
 +
 +После того как пакет создан, можно получить информацию о его содержимом с помощью вышеупомянутой утилиты dpkg:
 +  * ''dpkg -I package.deb'' - выведет общую информацию о пакете, включая содержимое control-файла; 
 +  * ''dpkg -c package.deb'' - выведет полный перечень файлов пакета. 
 +
 +После этих двух проверок (все файлы на месте, информация в финальном control корректна), можно запустить одну из двух проверки пакета на соответствие текущему полиси.
  
 +Такие проверки осуществляются при помощи программы lintian. Проверяются такие параметры, как правильность расположения двоичных файлов, наличие man-страниц, проверяется на наличие ошибок описание пакета в control-файле, просматривается файл copyright и так далее. Идеальный вариант - добиться от создаваемого пакета такого состояния, что lintian не выводит предупреждений/сообщений об ошибках:
 +  * ''lintian -is package.deb'' - покажет подробную информацию о проблемах в пакете.