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


Часто задаваемые вопросы о Debian GNU/Linux
Глава 7 - Основы системы управления пакетами Debian


В этой главе частично описывается управление пакетами Debian на низком уровне. Если вам, в основном, интересно только как использовать соответствующие инструменты, то переходите сразу к Инструменты управления пакетами Debian, Глава 8 и/или Поддержание обновлений системы Debian, Глава 9.


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

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

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

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


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

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

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


7.3 Почему у имён файлов пакетов Debian такие длинные имена?

Именование файлов двоичных пакетов Debian соответствует следующему формату: <foo>_<НомерВерсии>-<НомерРевизииDebian>_<АрхитектураDebian>.deb

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

Компонент VVV определяет номер версии, заданный разработчиком программы. Его формат не стандартизован, поэтому номер версии может быть любым, например «19990513» или «1.3.8pre1».

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

Компонент AAA определяет тип процессора, для которого собран пакет. Как правило — это i386, что указывает на процессоры, совместимыми с Intel 386 или более новыми моделями. Другие возможные типы можно увидеть в структуре каталогов Debian FTP (Что содержат каталоги в FTP-архивах Debian?, раздел 6.7). Подробности см. в справочной странице по архитектуре Debian dpkg-architecture(1).


7.4 Зачем нужен управляющий (control) файл Debian?

Спецификации содержимого управляющего файла Debian приводятся в "Руководстве по политике Debian" (Debian Policy Manual), раздел 5 (Какая документация существует по системе Debian?, раздел 12.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 этой программы, см. Почему у имён файлов пакетов Debian такие длинные имена?, раздел 7.3.

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

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

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

Строка Section определяет «раздел», в котором хранится пакет Debian на FTP-серверах.

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

В поле Maintainer указан адрес электронной почты человека, ответственного за поддержку данного пакета.

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

Более подробную информацию о всех возможных полях, которые может иметь пакет, смотрите в «Руководстве по политике Debian» (Debian Policy Manual), разделе 5 — «Управляющие файлы и их поля», Какая документация существует по системе Debian?, раздел 12.1.


7.5 Зачем нужен Debian файл conffile?

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

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

     dpkg --status пакет

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


7.6 Зачем нужны Debian сценарии preinst, postinst, prerm и postrm?

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

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

preinst

Данный сценарий выполняется перед тем, как пакет будет распакован из файла архива Debian (.deb). Многие сценарии «preinst» останавливают службы, которые будут обновлены пакетом, до завершения их установки или обновления (успешного выполнения сценария «postinst»).

postinst

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

prerm

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

postrm

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

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


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

Чтобы помочь системе управления пакетами, каждому пакету в Debian сопровождающими дистрибутива назначен приоритет. Возможные приоритеты:

Если вы выполните установку Debian по умолчанию, то будут установлены все пакеты с приоритетом Стандартный или выше. Если вы выберете какие-то определённые задачи, то также будут установлены и пакеты с более низким приоритетом.

Также, некоторые пакеты классифицированы как Значимые (Essential), так как они абсолютно необходимы для правильной работы системы. Инструменты управления пакетами не допустят их удаления.


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

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

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

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


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

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

Более подробная информация об использовании этих терминов может быть найдена в Руководстве по политике Debian, разделе 7.2, "Двоичные зависимости", см. Какая документация существует по системе Debian?, раздел 12.1.


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

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

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

Опять же, более подробная информация об этом дана в руководстве по политике.


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

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

Их значения:


7.12 Как зафиксировать (hold) пакет?

Есть три способа перевода пакета в зафиксированное состояние: при помощи dpkg, aptitude или dselect.

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

     dpkg --get-selections \* > selections.txt

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

     libc6                                           install

на:

     libc6                                           hold

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

     dpkg --set-selections < selections.txt

С помощью aptitude, можно зафиксировать пакет командой

     aptitude hold имя_пакета

а снять фиксацию с помощью

     aptitude unhold имя_пакета

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


7.13 Как установить пакет исходного кода?

Пакеты исходного кода Debian не могут быть «установлены», они просто распаковываются в том каталоге, в котором вы хотите собрать двоичный пакет.

Пакеты с исходным кодом распространяются с почти всех тех же серверов-зеркал, что и двоичные пакеты. Если вы включите в APT файл sources.list(5) соответствующие строки «deb-src», то сможете легко скачивать пакеты с исходным кодом с помощью команды

     apt-get source имя_пакета

Для помощи в сборки пакета, пакет с исходным кодом Debian предоставляет так называемый механизм сборочных зависимостей. Это означает, что сопровождающий пакета с исходным кодом ведёт список других пакетов, которые требуются для сборки его пакета. Чтобы увидеть насколько это полезно, выполните

     apt-get build-dep имя_пакета

перед сборкой пакета.


7.14 Как собрать двоичный пакет из исходного?

Лучше всего это делать с помощью различных вспомогательных инструментов. Мы покажем как использовать инструменты devscripts. Установите этот пакет, если это ещё не сделано.

Сначала получите пакет с исходным кодом:

     apt-get source имя_пакета

и перейдите в дерево исходников:

     cd имя_пакета-*

Затем установите необходимые сборочные зависимости (если есть):

     sudo apt-get build-dep имя_пакета

После этого создайте отдельную версию вашей сборки (для того, чтобы позже не удивляться, когда Debian тоже выпустит новую версию)

     dch -l local 'Blah blah blah'

И, наконец, соберите пакет

     debuild -us -uc

Если всё прошло хорошо, то вы сможете установить ваш пакет, запустив

     sudo dpkg -i ../*.deb

Если вы предпочитаете делать всё вручную и не хотите использовать devscripts, то делайте так:

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

Если у вас есть эти файлы (см. Как установить пакет исходного кода?, раздел 7.13) и установлен пакет dpkg-dev, то следующая команда:

     dpkg-source -x имя_пакета_версия-ревизия.dsc

извлечёт пакет в каталог с именем имя_пакета-версия.

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

     dpkg-buildpackage -rfakeroot -b

для сборки пакета (заметим, что для этого также требуется пакет fakeroot), и затем

     dpkg -i ../имя_пакета_версия-ревизия_архитектура.deb

для установки только что собранного пакета.


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

Детальное описание этого процесса содержится в "руководстве нового сопровождающего Debian" из пакета maint-guide или по ссылке http://www.debian.org/doc/devel-manuals#maint-guide.


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


Часто задаваемые вопросы о Debian GNU/Linux

версия 5.0.1 от 17 марта 2012 года

Список авторов можно найти в ЧаВо о Debian: Авторы