[ назад ] [ Содержание ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ вперед ]


The Debian GNU/Linux FAQ
Глава 6 - Основы системы управления пакетами Debian


6.1 Что такое пакет Debian?

Пакеты обычно содержат все файлы необходимые для реализации определенного набора функций. Есть два типа пакетов Debian:

При установке программного обеспечения система управления пакетами использует "зависимости" (dependencies), которые тщательно определены сопровождающим пакет. Эти зависимости указаны в файле control, связанном с каждым пакетом. Например пакет содержащий GNU компилятор C (gcc) "зависит" от пакета binutils, в котором содержатся компоновщик и ассемблер. Если пользователь попытается установить gcc до того как установит binutils, то система управления пакетами (dpkg) выдаст сообщение об ошибке, содержащее указание на необходимость установить binutils, и прервет установку пакета. (Обычно, эта возможность может быть отключена настойчивым пользователем, см. dpkg(8).) Более подробно смотри ниже в Что подразумевают говоря, что пакет Зависит/Рекомендует/Предполагает/Конфликтует/Заменяет/Предоставляет (Depends/Recommends/Suggests/Conflicts/Replaces/Provides) другой пакет?, раздел 6.9.

Инструменты управления пакетами Debian могут использоваться для:


6.2 Какой формат у двоичных пакетов Debian?

"Пакет" Debian, или архив Debian, содержит выполнимые файлы, библиотеки и документацию связанные с определенным набором программ или с множеством взаимосвязанных программ. Как правило, файл архива Debian имеет расширение .deb.

Внутренний формат двоичных пакетов Debian описан в странице руководства deb(5). Этот внутренний формат может быть изменен (в различных выпусках Debian GNU/Linux), поэтому всегда используйте dpkg-deb(1) для различных манипуляций с файлами .deb.


6.3 Почему у пакетов Debian такие длинные имена?

Имена двоичных пакетов Debian удовлетворяют следующему соглашению: <foo>_<VersionNumber>-<DebianRevisionNumber>.deb

Заметим, что foo полагается именем пакета. Для проверки имени пакета связанного с конкретным .deb файлом можно воспользоваться следующими методами:

Компонент VVV -- номер версии определяемый разрабочиком программы. На формат версии нет каких либо ограничений, он может быть различным, напр., "19990513" или "1.3.8pre1".

Компонент RRR номер ревизии Debian, определяется разработчиком Debian (или конкретным пользователем, если тот хочет построить пакет сам). Этот номер соответствует количеству пересмотров, которому подвергся пакет, так, при каждом пересмотре, обычно, вносятся изменения в Debian Makefile (debian/rules), управляющий файл Debian (debian/control), сценарии инсталяции и удаления (debian/p*), или в файлы конфигурации используемые с пакетом.


6.4 Что это за управляющий (control) файл Debian?

Спецификации содержимого управляющего файла Debian приводятся в "Руководстве по пакетам Debian" (Debian Packaging manual), глава 4, см. Какая ещё документация существует для системы Debian?, раздел 11.1.

Короткий пример файла control для пакета Debian hello приведен ниже:

     Package: hello
     Priority: optional
     Section: devel
     Installed-Size: 45
     Maintainer: Adam Heath <doogie@debian.org>
     Architecture: i386
     Version: 1.3-16
     Depends: libc6 (>= 2.1)
     Description: The classic greeting, and a good example
      The GNU hello program produces a familiar, friendly greeting.  It
      allows nonprogrammers to use a classic computer science tool which
      would otherwise be unavailable to them.
      .
      Seriously, though: this is an example of how to do a Debian package.
      It is the Debian version of the GNU Project's `hello world' program
      (which is itself an example for the GNU Project).

Поле Package определяет имя пакета. Это имя по которому инструменты упраления пакетами будут его опознавать. Обычно такое же, но не обязательно, как первая часть имени файла архива Debian.

Поле Version определяет версию разработчика и (в последнем компоненте) номер ревизии пакета данной программы как раскрыто в Почему у пакетов Debian такие длинные имена?, раздел 6.3.

Поле Architecture определяет тип процессора для которого был скомпилирован данный пакет.

Поле Depends содержит список пакетов, которые должны быть установлены для успешной установки данного пакета.

Installed-Size показывает сколько дискового пространства займет установленный пакет. Этот параметр может использоваться программами установки для определения остающегося дискового пространства.

Строка Section определяет "раздел", в котором хранится пакет Debian на FTP сервере. Это имя подкаталога (в одном из основных каталогов, см. Что содержат каталоги в FTP-архивах Debian?, раздел 5.1) в котором хранится пакет.

Поле Priority показывает насколько важным является пакет для установки; некоторые программы, напр., dselect или console-apt могут сортировать пакеты по категориям. См. Что такое Требуемый/Важный/Стандартный/Необязательный/Дополнительный (Required/Important/Standard/Optional/Extra) пакет?, раздел 6.7.

В поле Maintainer указан e-mail адрес человека, ответственного за поддержку данного пакета.

В поле Description дается краткое описание возможностей, предоставляемых пакетом.

Для более подробной информации о полях, которые может иметь пакет, смотрите главу 4 Руководства по пакетам Debian, "Управляющие файлы и их поля."


6.5 Что такое Debian conffile?

Conffile содержит список файлов конфигурации (обычно помещаемых в /etc), которые система управления пакетами не будет перезаписывать при обновлении пакета. Это гарантирует, что содержимое файлов конфигурации будет сохранено и позволяет обновлять пакеты не прерывая работу системы.

Чтобы точно определить, какие файлы сохраняются при обновлении, запустите:

     dpkg --status package

и смотрите в строке "Conffiles:".


6.6 Что это за сценарии preinst, postinst, prerm и postrm?

Это выполняемые сценарии, которые автоматически запускаются перед или после установки пакета. Вместе с файлом control, эти файлы являются частью "управляющего" раздела архивного файла Debian.

Более подробно:

preinst

Данный сценарий выполняется перед тем, как пакет будет распакован из .deb файла. Многие сценарии 'preinst' останавливают сервисы, которые будут обновлены пакетом, до завершения установки или обновления.

postinst

Этот сценарий, обычно, завершает требуемую настройку пакета после того, как он был извлечен из .deb файла. Часто, сценарий 'postinst' запрашивает у пользователя различные параметры и/или предупреждает пользователя, что если он примет значения по-умолчанию, то позже прийдется переконфигурировать пакет. Многие сценарии также 'postinst' выполняют команды, необходимые для запуска или перезапуска сервиса после установки или обновления пакета.

prerm

Этот сценарий, обычно, останавливает выполнение всех демонов, связанных с пакетом. Он выполняется перед удалением файлов, связанных с пакетом.

postrm

Этот сценарий, обычно изменяет ссылки или другие файлы, связанные с пакетом, и/или удаляет файлы созданные пакетом. (См. также Что такое виртуальный пакет?, раздел 6.8).

В настоящее время все управляющие файлы можно найти в каталоге /var/lib/dpkg/info. Файлы, относящиеся к пакету foo имеют имя "foo" и расширения "preinst", "postinst" и т.д. Файл foo.list в этом каталоге содержит список всех файлов установленных пакетом foo. (Заметим, что местонахождение файлов определяется dpkg; вам не следует полагаться на указанный каталог).


6.7 Что такое Требуемый/Важный/Стандартный/Необязательный/Дополнительный (Required/Important/Standard/Optional/Extra) пакет?

Для каждого пакета Debian создателями дистрибутива определен приоритет (priority), в качестве помощи для управления пакетами. Приоритеты следующие:


6.8 Что такое виртуальный пакет?

Виртуальный пакет - это общее имя, применимое к любому из группы пакетов, все из которых обеспечивают выполнение какой либо функции. Например, программы tin и trn, обе являются программами для чтения новостей и должны удовлетворять зависимость программы, которая требует наличия в системе программы чтения новостей, для своей работы. Поэтому обе предоставляют "виртуальный пакет", называемый news-reader.

Аналогично, smail и sendmail обеспечивают функции почтового транспортного агента. Поэтому они предоставляют виртуальный пакет "mail transport agent". Если один из них установлен, то любая программа, зависящая от пакета mail-transport-agent, будет удовлетворена существованием данного виртуального пакета.

Кроме того, если в системе установлено более одного пакета, предоставляющего определенный виртуальный пакет, то Debian обеспечивает системного администратора механизмом, позволяющим определить один из этих пакетов предпочтительным. Для этого имеется команда update-alternatives, описанная далее в Некоторым пользователям нравится mawk, другим - gawk; некоторым - vim, другим - elvis; некоторым - trn, другим - tin; как осуществялется поддержка предпочтений в Debian?, раздел 10.10.


6.9 Что подразумевают говоря, что пакет Зависит/Рекомендует/Предполагает/Конфликтует/Заменяет/Предоставляет (Depends/Recommends/Suggests/Conflicts/Replaces/Provides) другой пакет?

В системе пакетов Debian введено понятие "зависимости" между пакетами, которое показывает насколько правильная работа Программы А зависит от существования Программы В на данной системе:

Более подробная информация об использовании этих терминов может быть найдена в Руководстве по пакетам (Packaging manual) и в Руководстве по политике (Policy manual).


6.10 Что означает слово Pre-Depends (Пред-Зависимости)?

"Pre-Depends" это специальная форма зависимости. Большинство пакетов будут извлечены dpkg из архивных файлов независимо от того, существуют ли файлы от которых они зависят или нет. Проще говоря, dpkg извлекает файлы пакета из архива и помещает их на положенные места. Если пакет зависит от существования других пакетов, то dpkg откажется завершать установку (выполняя конфигурацию) до установки необходимых пакетов.

Однако, для некоторых пакетов, dpkg откажется даже распаковывать файлы до разрешения зависимостей. Такие пакеты указывают, что они "Pre-depend" от наличия других пакетов. Проект Debian обеспечивает механизм для безопасного обновления системы с формата a.out на формат ELF, где критичен порядок, в котором пакеты будут распакованы. Существуют и другие ситуации, когда может применяться этот метод.

Более подробная информация может быть найдена в Руководстве по пакетам.


6.11 Что означают слова неизвестно/установить/удалить/очистить/удерживать (unknown/install/remove/purge/hold) в статусе пакета?

Эти флаги определяют, что пользователь хочет сделать с пакетом (что определяется либо действиями пользователя при работе в разделе "Выбор" ("Select") программы dselect, либо непосредственными обращениями пользователя к dpkg).

Их значения:


6.12 Как я могу перевести пакет в удерживаемое (hold) состояние?

Есть два пути, которыми можно перевести пакет в удерживаемое состояние -- при помощи dpkg или dselect.

С dpkg, вы просто экспортируете список выбранных пакетов:

     dpkg --get-selections > selections.txt

Затем редактируете полученный файл selections.txt, заменяете строку, содержащую выбранный вами для удерживания пакет, напр. libc6, с:

     libc6                                           install

на:

     libc6                                           hold

Сохраняете файл и загружаете его в базу данных dpkg:

     dpkg --set-selections < selections.txt

C dselect, вы просто переходите в меню Выбор (Select), находите нужный пакет и нажимаете клавишу '=' (или 'H'). Изменения вступят в силу сразу же после вашего выхода из режима Выбор.


6.13 Как я могу установить пакет исходных текстов?

Пакеты исходных текстов Debian не могут быть "установлены", они просто распаковываются в том каталоге, в котором вы хотите собрать двоичный пакет. Исходные пакеты располагаются в каталоге source, и вы можете либо загрузить их вручную, либо воспользовавться командой:

     apt-get source foo

(см. страницу руководства apt-get(8)).


6.14 Как я могу построить двоичный пакет из исходного?

Вам необходимы foo_*.dsc, foo_*.tar.gz и foo_*.diff.gz файлы для компиляции исходного текста (для родных пакетов Debian файла .diff.gz может не быть).

Если у вас есть эти файлы и установлен пакет dpkg-dev, то следующая команда:

     dpkg-source -x foo_version-revision.dsc

извлечет пакет в каталог foo-version.

Если вы хотите скомпилировать пакет, то перейдите в каталог foo-version и выполните команду

     debian/rules build

для компиляции программы, затем

     debian/rules binary

как пользователь root, для сборки пакета, и затем

     dpkg -i ../foo_version-revision_arch.deb

для установки пакета.


6.15 Как мне самому создать пакет Debian?

Детальное описание этого процесса содержится в "Руководстве начинающего разработчика Debian", доступном в пакете maint-guide-ru, или ftp://ftp.debian.org/debian/doc/package-developer/maint-guide.html.tar.gz.


[ назад ] [ Содержание ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ вперед ]


The Debian GNU/Linux FAQ

версия 4.0.3, 26 June 2008

Авторы, раздел 15.1