[ назад ] [ Содержание ] [ 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
файла, содержащего оригинальный сжатый с
помощью gzip исходный код программы в
архивном формате tar.gz и, обычно, .diff.gz
файл, содержащий специфические для Debian
изменения к оригинальному исходному коду.
Утилита dpkg-source запаковывает и
распаковывает архивы Debian с исходным кодом;
подробности есть в справочной странице. (В
качестве пользовательского интерфейса к
dpkg-source можно использовать программу
apt-get
.)
При установке программного обеспечения
система управления пакетами использует
«зависимости» (dependencies), которые тщательно
подобраны сопровождающим пакета. Эти
зависимости указаны в файле control,
имеющемся в каждом пакете. Например, пакет,
содержащий GNU компилятор C (gcc
),
зависит от пакета binutils
, в котором
содержатся компоновщик и ассемблер. Если
пользователь попытается установить
gcc
до того как установит binutils
,
то система управления пакетами (dpkg) выдаст
сообщение об ошибке, содержащее указание
на необходимость установить binutils
, и
прервёт установку пакета gcc
(однако,
эта возможность может быть отключена
настойчивым пользователем, смотрите
dpkg(8)
). Более подробно смотрите ниже
в Что имеется в виду, когда
говорят, что пакет Зависит,
Рекомендует, Предполагает,
Конфликтует, Заменяет,
Ломаетили Предоставляет
(Depends/Recommends/Suggests/Conflicts/Replaces/Breaks/Provides) другой
пакет?, раздел 7.9.
Инструменты управления пакетами Debian могут использоваться для:
манипуляций и управления пакетами и частями пакетов,
управления локальными заменами файлов пакета,
сборки пакетов разработчиком,
помощи пользователю в установке пакетов с удалённого FTP-сервера.
«Пакет» Debian или файл архива Debian, содержит выполняемые файлы, файлы настройки, библиотеки и документацию некоего определённого программного комплекта или набора программ. Обычно, имя архивного файла Debian заканчивается расширением .deb.
Внутренняя структура данного типа
двоичных пакетов Debian описана в справочной
странице deb(5)
. Этот внутренний
формат может меняться (между основными
выпусками Debian GNU/Linux), поэтому всегда
используйте dpkg-deb(1)
, если вам
требуется работать с файлами .deb на
низком уровне.
Именование файлов двоичных пакетов 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)
.
Спецификации содержимого управляющего файла 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.
Conffile содержит список файлов настройки (обычно помещаемых в /etc), которые система управления пакетами не будет перезаписывать при обновлении пакета. Это гарантирует, что содержимое файлов настройки будет сохранено, и позволяет обновлять пакеты не прерывая работу системы.
Чтобы точно определить, какие файлы сохраняются при обновлении, запустите:
dpkg --status пакет
и смотрите в строке «Conffiles:».
Это выполняемые сценарии, которые автоматически запускаются перед или после установки пакета. Вместе с файлом control, эти файлы являются частью «управляющего» раздела архивного файла Debian.
Более подробно:
Данный сценарий выполняется перед тем, как пакет будет распакован из файла архива Debian (.deb). Многие сценарии «preinst» останавливают службы, которые будут обновлены пакетом, до завершения их установки или обновления (успешного выполнения сценария «postinst»).
Этот сценарий, обычно, завершает требуемую настройку пакета foo после того, как 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. Этот механизм позволяет пользователям с ограниченным дисковым пространством взять только часть пакета А, которая действительно требуется.
Более подробная информация об использовании этих терминов может быть найдена в Руководстве по политике Debian, разделе 7.2, "Двоичные зависимости", см. Какая документация существует по системе Debian?, раздел 12.1.
«Pre-Depends» — это специальный тип зависимости. Большинство пакетов будут извлечены dpkg из архивных файлов (то есть файлов .deb) независимо от того, существуют ли файлы в системе, от которых они зависят или нет. Проще говоря, dpkg извлекает файлы из файла архива и помещает их на положенные места в файловой системе. Если пакет зависит от существования других пакетов в системе, то dpkg откажется завершать установку (то есть выполнять «настройку») до установки других пакетов.
Однако, некоторые пакеты dpkg даже не будет распаковывать, пока не будут разрешены некоторые зависимости. Про такие пакеты говорят, что они имеют «предварительную зависимость» (Pre-depend) от некоторых других пакетов. Проект 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.1 от 17 марта 2012 года