[ назад ] [ Содержание ] [ 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:

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

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


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

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

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


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

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

Note that foo is supposed to be the package name. Checking the package name associated with a particular Debian archive file (.deb file) can be done in one of these ways:

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

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

The AAA component identifies the processor for which the package was built. This is commonly amd64, which refers to AMD64, Intel 64 or VIA Nano chips. For other possibilities review Debian's FTP directory structure at Что содержат каталоги в FTP-архивах Debian?, раздел 6.7. For details, see the description of "Debian architecture" in the manual page dpkg-architecture(1).


7.4 Зачем нужен файл control?

Содержимое файла control подробно рассматривается в разделе 5 «Руководства по политике Debian» (Debian Policy Manual) (см. Какая ещё документация существует по системе Debian?, раздел 12.1).

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

     Package: hello
     Version: 2.9-2+deb8u1
     Architecture: amd64
     Maintainer: Santiago Vila <sanvila@debian.org>
     Installed-Size: 145
     Depends: libc6 (>= 2.14)
     Conflicts: hello-traditional
     Breaks: hello-debhelper (<< 2.9)
     Replaces: hello-debhelper (<< 2.9), hello-traditional
     Section: devel
     Priority: optional
     Homepage: http://www.gnu.org/software/hello/
     Description: example package based on GNU hello
      The GNU hello program produces a familiar, friendly greeting.  It
      allows non-programmers 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 показывает, насколько установка этого пакета важна для системы; некоторые программы, например, apt или aptitude, могут сортировать пакеты по категориям (напр., поместить пакет в список необязательных пакеты), см. Что такое Пакет первой необходимости (Essential), Необходимый (Required), Важный (Important), Стандартный (Standard), Необязательный (Optional) или Дополнительный (Extra) пакет?, раздел 7.7.

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

В поле Description приводится краткое описание функциональности пакета.

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


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

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

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

     dpkg --status пакет

и взгляните на строку «Conffiles:».


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

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

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

preinst

This script is executed before the package it belongs to is unpacked from its Debian archive (".deb") file. Many 'preinst' scripts stop services for packages which are being upgraded until their installation or upgrade is completed (following the successful execution of the 'postinst' script).

postinst

This script typically completes any required configuration of the package foo once foo has been unpacked from its Debian archive (".deb") file. Often, 'postinst' scripts ask users for input, and/or warn them that if they accept default values, they should remember to go back and re-configure that package as needed. Many 'postinst' scripts then execute any commands necessary to start or restart a service once a new package has been installed or upgraded.

prerm

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

postrm

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

Currently all of the control files can be found in the directory /var/lib/dpkg/info. The files relevant to package foo begin with the name "foo" and have file extensions of "preinst", "postinst", etc., as appropriate. The file foo.list in that directory lists all of the files that were installed with the package foo. (Note that the location of these files is a dpkg internal; you should not rely on it.)


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

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

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

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


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

A virtual package is a generic name that applies to any one of a group of packages, all of which provide similar basic functionality. For example, both the konqueror and firefox-esr programs are web browsers, and should therefore satisfy any dependency of a program that requires a web browser on a system, in order to work or to be useful. They are therefore both said to provide the "virtual package" called www-browser.

Similarly, exim4 and sendmail both provide the functionality of a mail transport agent. They are therefore said to provide the virtual package "mail-transport-agent". If either one is installed, then any program depending on the installation of a mail-transport-agent will be satisfied by the presence of this virtual package.

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


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

В системе пакетов Debian есть несколько типов «зависимостей» пакетов друг от друга, задуманных для определения (в одной переменной) степени независимости одной программы (например, А) от наличия в данной системе другой (Б).

More detailed information on the use of each of these terms can be found in the Debian Policy manual, section 7.2, "Binary Dependencies", see Какая ещё документация существует по системе Debian?, раздел 12.1.


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

"Pre-Depends" is a special dependency. In the case of most packages, dpkg will unpack the archive file of a package (i.e., its .deb file) independently of whether or not the files on which it depends exist on the system. Simplistically, unpacking means that dpkg will extract the files from the archive file that were meant to be installed on your file system, and put them in place. If those packages depend on the existence of some other packages on your system, dpkg will refuse to complete the installation (by executing its "configure" action) until the other packages are installed.

Однако, некоторые пакеты dpkg даже не будет распаковывать, пока не будут разрешены некоторые зависимости. Про такие пакеты говорят, что они имеют «предварительную зависимость» от наличия некоторых других пакетов. Этот механизм предоставляется в Debian для поддержки безопасного перехода систем с формата a.out на ELF, когда критична очерёдность распаковки пакетов. Существуют и другие варианты больших обновлений, где этот приём также полезен, например для пакетов с приоритетом «необходимый», когда они зависят от LibC.

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


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

Эти флаги определяют, что пользователь «хочет» сделать с пакетом (что определяется вызовами dpkg/apt/aptitude).

Их значения:


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

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

При использовании dpkg вам нужно экспортировать список состояний отметки пакетов:

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

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

     libc6                                           install

на:

     libc6                                           hold

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

     dpkg --set-selections < selections.txt

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

     apt-mark hold имя_пакета

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

     apt-mark unhold имя_пакета

При использовании aptitude пакет можно зафиксировать командой

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

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

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

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

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

Source packages are distributed on most of the same mirrors where you can obtain the binary packages. If you set up your APT's sources.list(5) to include the appropriate "deb-src" lines, you'll be able to easily download any source package by running

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

To help you in actually building the source package, Debian source packages provide the so-called build-dependencies mechanism. This means that the source package maintainer keeps a list of other packages that are required to build their package. To see how this is useful, run

     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

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

If you just want to compile the package, you may cd into the foo-version directory and issue the command

     dpkg-buildpackage -rfakeroot -b

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

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

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


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

For a more detailed description on this, read the New Maintainers' Guide, available in the maint-guide package or at http://www.debian.org/doc/devel-manuals#maint-guide, or the Guide for Debian Maintainers, available in the debmake-doc package or at https://www.debian.org/doc/devel-manuals#debmake-doc.


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


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

версия 8.1 от 28 August 2016

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