[ назад ] [ Содержание ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ вперед ]
В этой главе вкратце рассматривается внутренняя низкоуровневая организация системы управления пакетами Debian. Если вас главным образом интересует вопрос о том, как использовать соответствующие утилиты, переходите сразу к Инструменты управления пакетами Debian, Глава 8 или Поддержание обновлений системы Debian, Глава 9.
Пакет обычно содержит полный комплект файлов, необходимых для реализации определённого набора команд или возможностей. Существует два типа пакетов Debian:
Двоичные (binary) пакеты. Содержат
исполняемые файлы, файлы настроек,
справочные страницы в форматах man и/или info,
информацию об авторских правах и другую
документацию. Эти пакеты распространяются
в виде архивов особого, Debian-специфичного
формата (см. Какой формат у
двоичных пакетов Debian?, раздел 7.2); их
обычно можно отличить по расширению '.deb'.
Двоичные пакеты могут быть распакованы при
помощи утилиты Debian dpkg (возможно,
через пользовательский интерфейс типа
aptitude
); подробности см. в её
справочной странице.
Пакеты исходного кода (source). Состоят
из файла с расширением .dsc,
содержащего описание этого пакета (в том
числе имена перечисленных далее файлов),
файла .orig.tar.gz, содержащего tar-архив
немодифицированного исходного кода,
сжатый с помощью gzip, и обычно файла
.diff.gz, содержащего особые
Debian-специфичные изменения к оригинальному
исходному коду. Утилита dpkg-source
служит для упаковки и распаковки пакетов
исходного кода; подробности см. в её
справочной странице. (В качестве
пользовательского интерфейса к
dpkg-source можно использовать программу
apt-get
.)
При установке программного обеспечения
система управления пакетами использует
«зависимости» (dependencies), которые тщательно
подобраны сопровождающим пакета. Эти
зависимости указаны в файле control,
имеющемся в каждом пакете. Например, пакет,
содержащий компилятор C от GNU (gcc
),
«зависит» от пакета binutils
, в котором
содержатся компоновщик и ассемблер. Если
пользователь попытается установить
gcc
до того, как установит
binutils
, то система управления
пакетами (dpkg) выдаст сообщение об ошибке,
содержащее указание на необходимость
установить binutils
, и прервёт
установку пакета gcc
(однако, очень
настойчивый пользователь может отключить
эту возможность, см. dpkg(8)
).
Подробности см. ниже в Что
имеется в виду, когда говорят, что пакет
Рекомендует (Recommends), Предлагает
(Suggests), Заменяет (Replaces), Ломает
(Breaks) или Предоставляет (Provides) другой
пакет, Зависит (Depends) от него или
Конфликтует (Conflicts) с ним?, раздел 7.9.
Инструменты управления пакетами Debian могут использоваться для:
манипулирования и управления пакетами или их частями;
управления локальными заменами файлов пакета;
помощи разработчикам в сборке пакетов;
помощи пользователям в установке пакетов с удалённых FTP-серверов.
«Пакет» (или «файл-архив») Debian содержит исполняемые файлы, файлы настроек, библиотеки и документацию для определённого программного комплекта или набора связанных программ. Обычно имя файла-архива Debian имеет расширение .deb.
Внутренняя структура данных формата
двоичных пакетов Debian описана в справочной
странице deb(5)
. Этот формат может
меняться (от версии к версии Debian GNU/Linux),
поэтому всегда, когда вам нужно работать с
файлами .deb на низком уровне,
используйте dpkg-deb(1)
.
Для именования файлов двоичных пакетов Debian используется следующее соглашение: <foo>_<НомерВерсии>-<НомерРевизииDebian>_<АрхитектураDebian>.deb
Здесь foo — это собственно имя пакета. Если надо, имя пакета для конкретного файла-архива Debian (.deb-файла) можно узнать одним из следующих способов:
Просмотреть файл «Packages» в том каталоге, в котором он хранится на FTP-сайте архива Debian. В этом файле содержатся блоки описаний для каждого пакета; первое поле каждого блока представляет собой официальное имя пакета.
воспользоваться командой dpkg --info foo_VVV-RRR_AAA.deb (где VVV, RRR и AAA — это, соответственно, версия, ревизия и архитектура пакета в запросе). В результате, помимо прочего, будет указано имя пакета, соответствующее распаковываемому файлу-архиву.
Компонент 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)
.
Содержимое файла control подробно рассматривается в разделе 5 «Руководства по политике Debian» (Debian Policy Manual) (см. Какая ещё документация существует по системе 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 приводится краткое описание функциональности пакета.
Более подробную информацию о всех возможных полях управляющего файла пакета см. в разделе 5 («Управляющие файлы и их поля») «Руководства по политике Debian» (Debian Policy Manual), см. Какая ещё документация существует по системе Debian?, раздел 12.1.
Conffile содержит список файлов настроек (обычно помещаемых в /etc), которые при обновлении пакета не будут перезаписываться системой управления пакетами. Это гарантирует, что содержимое файлов настроек будет сохранено, и позволяет обновлять пакеты, не прерывая работу системы.
Чтобы точно определить, какие файлы сохраняются при обновлении, запустите:
dpkg --status пакет
и взгляните на строку «Conffiles:».
Это исполняемые сценарии, автоматически запускаемые до или после установки пакета. Вместе с файлом control эти файлы являются частью «управляющего» раздела файла-архива Debian.
Более подробно:
Данный сценарий выполняется перед тем, как пакет будет распакован из файла-архива Debian (.deb). В сценариях preinst для многих пакетов при их обновлении задаётся остановка связанных с ними служб до тех пор, пока обновление или установка не закончится (последующим успешным выполнением сценария «postinst»).
Этот сценарий служит обычно для завершения всей необходимой настройки пакета foo после его распаковки из файла-архива Debian (.deb). Часто в сценарии «postinst» у пользователя запрашиваются различные параметры и/или пользователь предупреждается, что если он примет предлагаемые по умолчанию значения, позже он должен не забыть перенастроить этот пакет в соответствии со своей ситуацией. Затем во многих сценариях «postinst» выполняются команды, необходимые для запуска или перезапуска служб после установки или обновления пакета.
Этот сценарий обычно служит для остановки всех связанных с пакетом служб. Он выполняется перед удалением файлов данного пакета.
Этот сценарий обычно служит для изменения ссылок или других файлов, связанных с foo, и/или удаления файлов, созданных пакетом. (См. также Что такое виртуальный пакет?, раздел 7.8.)
В настоящее время все управляющие файлы находятся в каталоге /var/lib/dpkg/info. Имена файлов, относящихся к пакету foo, начинаются с «foo» и имеют, соответственно, расширения «preinst», «postinst» и т. д. Файл foo.list в этом каталоге содержит список всех файлов, установленных из пакета foo. (Учтите, что местонахождение файлов определяется программой dpkg, поэтому нельзя иметь стопроцентную уверенность в том, что они будут находиться именно в этом каталоге.)
Для поддержки системы управления пакетами каждому пакету в Debian сопровождающими дистрибутива назначается приоритет. Возможные приоритеты:
Необходимые (Required) — пакеты, необходимые для правильного функционирования системы.
Сюда входят все инструменты, необходимые для устранения неполадок в системе. Вам не следует удалять эти пакеты, иначе ваша система может перестать работать, и не исключено, что вы даже не сможете использовать dpkg для того, чтобы вернуть всё назад. Функциональность системы, в которой установлены только Необходимые пакеты, не слишком высока, но достаточна для того, чтобы позволить системному администратору загрузить её и установить больше программного обеспечения.
Важные (Important) — пакеты, которые должны быть в любой Unix-системе.
Без этих программ не смогут работать или не будут обладать полной функциональностью другие пакеты. К ним НЕ относятся Emacs, X, Tex или любое другое большое приложение. Это пакеты, образующие базовую структуру.
Стандартные (Standard) — пакеты, имеющиеся в любой Linux-системе, даже в сравнительно небольшой, хотя и не слишком ограниченной системе, работающей только в текстовом режиме. Сюда входят программы для просмотра веб (w3m), отправки почты (mutt) и скачивания файлов с FTP-серверов.
Это то, что будет установлено по умолчанию, если пользователь не выберет чего-либо ещё. Сюда не входят многие большие приложения, но есть интерпретатор Python и некоторое серверное ПО типа OpenSSH (для удалённого управления), Exim (для доставки почты, хотя он может быть настроен только на локальную доставку), сервер identd (pidentd) и RPC зеркало портов (portmap). Сюда также входит немного основной документации общего характера, которая, вероятно, будет полезна для большинства пользователей.
Необязательные (Optional) — все те пакеты, которые, как правило, неплохо было бы установить, если вы либо не знаете, что они собой представляют, либо у вас нет каких-то особых требований к системе.
Сюда входят X, полный дистрибутив TeX и множество других приложений.
Дополнительные (Extra) — пакеты, либо конфликтующие с другими пакетами, имеющими более высокий приоритет, полезные, скорее всего, только в том случае, когда вы уже знаете, что это такое, либо имеющие специфические требования, из-за которых им нельзя дать приоритет «Необязательный».
Если вы выполните установку Debian по умолчанию, то будут установлены все пакеты с приоритетом Стандартный или выше. Если вы выберете какие-то определённые задачи, то также будут установлены и пакеты с более низким приоритетом.
Кроме того, некоторые пакеты классифицированы как Пакеты первой необходимости (Essential), так как они абсолютно необходимы для правильной работы системы. Инструменты управления пакетами не допустят их удаления.
Виртуальный пакет — это общее имя, применимое к любому из группы пакетов, каждый из которых предоставляет одинаковую возможность. Например, каждая из программ чтения новостей tin и trn может удовлетворить зависимость программы, для работы (или небесполезности) которой в системе должна быть программа чтения новостей. Поэтому про них говорится, что они обе предоставляют «виртуальный пакет» под названием news-reader.
Аналогично, smail и sendmail обеспечивают функции агента пересылки сообщений. Поэтому говорят, что они предоставляют виртуальный пакет «mail transport agent». Если один из них установлен, то любая программа, зависящая от пакета mail-transport-agent, будет удовлетворена наличием данного виртуального пакета.
Кроме того, в Debian есть механизм, позволяющий системному администратору в том случае, когда в системе установлено несколько пакетов, предоставляющих определённый виртуальный пакет, выбрать предпочтительный. Для этого служит команда update-alternatives, см. Некоторым пользователям нравится mawk, другим gawk; некоторым vim, другим elvis; некоторым trn, другим tin. Как осуществляется поддержка предпочтений в Debian?, раздел 11.10.
В системе пакетов Debian есть несколько типов «зависимостей» пакетов друг от друга, задуманных для определения (в одной переменной) степени независимости одной программы (например, А) от наличия в данной системе другой (Б).
Пакет A зависит от пакета Б, если Б абсолютно необходим для работы A. В некоторых случаях A не просто зависит от Б, но дополнительно требует определённую версию Б. В этом случае обычно накладывается требование, чтобы версия Б была не ниже заданной.
Пакет A рекомендует пакет Б, если сопровождающий пакета считает, что большинство пользователей не захотят пользоваться A, не имея функциональности, предоставляемой пакетом Б.
Пакет A предлагает пакет Б, если Б содержит файлы, имеющие отношение к функциональности пакета A (и обычно её расширяющие).
Пакет A конфликтует с пакетом Б, когда A не может работать, если установлен пакет Б. Наиболее часто конфликты возникают, когда A содержит усовершенствованные версии файлов, содержащихся в Б. «Конфликтует» часто задаётся вместе с «заменяет».
Пакет A заменяет пакет Б, когда файлы, установленные из пакета Б, удаляются и (в некоторых случаях) замещаются файлами из A.
Пакет А ломает пакет Б, когда нельзя одновременно настроить оба пакета в системе. Система управления пакетами предотвратит установку одного, если в системе уже установлен и настроен другой.
Пакет A предоставляет пакет Б, когда все файлы и функциональность Б имеются в A. Этот механизм позволяет пользователям с ограниченным дисковым пространством получить только ту часть пакета А, которая действительно им нужна.
Более подробную информацию об использовании этих терминов можно найти в разделе 7.2 («Двоичные зависимости») Руководства по политике Debian, см. Какая ещё документация существует по системе Debian?, раздел 12.1.
«Пред-зависимость» — это особый тип зависимости. Для большинства пакетов файлы-архивы (то есть файлы .deb) dpkg распаковывает независимо от того, существуют ли в системе файлы, от которых они зависят, или нет. Сильно упрощённо эту распаковку можно представить как извлечение файлов из файла-архива и помещение каждого из них в положенное место в файловой системе. Если такой пакет зависит от наличия других пакетов в системе, то dpkg откажется завершать установку (то есть откажется выполнять действие «configure»), пока не будут установлены другие пакеты.
Однако, некоторые пакеты dpkg даже не будет распаковывать, пока не будут разрешены некоторые зависимости. Про такие пакеты говорят, что они имеют «предварительную зависимость» от наличия некоторых других пакетов. Этот механизм предоставляется в Debian для поддержки безопасного перехода систем с формата a.out на ELF, когда критична очерёдность распаковки пакетов. Существуют и другие варианты больших обновлений, где этот приём также полезен, например для пакетов с приоритетом «необходимый», когда они зависят от LibC.
Опять же, более подробную информацию об этом можно найти в руководстве по политике.
Эти флаги определяют, что пользователь «хочет» сделать с пакетом (что определяется либо действиями пользователя при работе в разделе «Выбор» (Select) программы dselect, либо непосредственным запуском dpkg).
Их значения:
неизвестно (unknown) — пользователь никоим образом не отметил, нужен ли ему этот пакет;
установить (install) — пользователь хочет установить или обновить пакет;
удалить (remove) — пользователь хочет удалить пакет, но не хочет удалять его файлы настроек;
вычистить (purge) — пользователь хочет удалить пакет полностью, включая его файлы настроек;
зафиксировать (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»). Изменения вступят в силу сразу же после выхода из режима Выбора пакетов.
Пакеты исходного кода Debian на самом деле нельзя «установить», они просто распаковываются в любой указанный вами каталог для сборки двоичного пакета.
Пакеты с исходным кодом распространяются с
почти всех тех же серверов-зеркал, что и
двоичные пакеты. Если вы добавите в файл
настройки APT sources.list(5)
соответствующие строки «deb-src», то сможете
свободно скачивать пакеты с исходным кодом
с помощью команды
apt-get source имя_пакета
Для облегчения сборки пакета в пакете исходного кода Debian предоставляется так называемый механизм сборочных зависимостей. Это означает, что сопровождающий пакета исходного кода ведёт список других пакетов, которые нужны для сборки его пакета. Чтобы увидеть насколько это удобно, выполните
apt-get build-dep имя_пакета
перед сборкой пакета.
Лучше всего это делать с помощью различных утилит-обёрток. Мы покажем как использовать инструментарий 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
для установки только что собранного пакета.
Подробное описание этого процесса можно
найти в "руководстве нового
сопровождающего 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.2ubuntu1 от 17 June 2013