Книга администратора Debian


Глава 5. Пакетная система: Инструменты



Pdf просмотр
страница7/32
Дата13.11.2016
Размер7.63 Mb.
Просмотров5208
Скачиваний0
ТипРеферат
1   2   3   4   5   6   7   8   9   10   ...   32
Глава 5. Пакетная система: Инструменты
и основные принципы
Как системному администратору Debian, вам постоянно придется работать спакетами
.deb
, которые содержат, к примеру, программы или документацию, установку и сопровождение которых они облегчают. Поэтому неплохо было бы знать, что они из себя представляют, и как с ними работать.
В этой главе описывается структура и содержание «двоичных» и «исходных» пакетов.
Первые являются файлами
.deb
, которые можно использовать непосредственно с помощью dpkg, в то время как последние содержат исходный код программ, а также инструкции для сборки двоичных пакетов.
5.1. Структура двоичных пакетов
Формат пакета Debian устроен таким образом, что его содержимое может быть извлеченно в любой Unix-системе, где есть такие команды как ar, tar и gzip (иногда также xz или bzip2). Это, казалось бы, простое свойство пакета важно для переносимости и аварийного восстановления.
Представьте, например, что вы по ошибке удалили программу dpkg, и после этого не можете установить пакеты Debian. dpkg сама является пакетом Debian, так что в этом случае мы получим проблему «курицы и яйца»... К счастью, вы знакомы с форматом пакетов и поэтому можете скачать
.deb
-файл пакета dpkg и установить его вручную (см.
врезку «ИНСТРУМЕНТЫ»). Если по несчаcтью из системы исчезла одна или несколько программ ar, tar или gzip/xz/bzip2, вам просто нужно будет скопировать их из другой системы (так как каждая из них работает полностью автономно, без зависимостей, то простого копирования будет достаточно). Если ваша система пострадала более серьёзно и даже если она не работает (возможно отсутствуют важные системные библиотеки?),
вам стоит попробовать статическую версию busybox (предоставляемую в пакете busybox-static), которая является более автономной и предоставляет внутренние команды, такие как busybox ar, busybox tar и busybox gunzip.
ИНСТРУМЕНТЫ dpkg, APT и ar
dpkg — программа для распаковки, анализа и установки файлов
.deb
APT предствляет собой группу программ, которые позволяют выполнять высокоуровневые модификации в системе:
установку или удаление пакета (сохраняя зависимости удовлетворёнными), обновление системы, отбражение списка дотупных пакетов и т. д.
Что касается программы ar, она работает с файлами формата с тем же названием: ar t
архив
покажет список
файлов, содержавшихся в архиве, ar x
архив
извлекает файлы из архива в текущий каталог, ar d
архив

файл
удаляет файл из архива и т. д. На её странице руководства (ar(1)) можно найти более подробную документацию. ar — это очень неразвитый инструмент, который редко применяется администраторами Unix. Как правило, они используют tar
— более развитую программу управления архивами и файлами. Это и является причиной того, почему так легко можно восстановить dpkg в случае ошибочного удаления. Вам нужно только загрузить пакет Debian и извлечь его содержимое из архива data.tar.gz в корень системы (
/
):
#
ar x dpkg_1.17.23_amd64.deb
#
tar -C / -p -xzf data.tar.gz
К ОСНОВАМ Обозначения страниц man
Начинающих могут привести в замешательство ссылки на «ar(1)» в литературе. Это общепринятое обозначения страницы man под названием ar в разделе 1.
Иногда это обозначение используется также для устранения двусмысленности, например для выбора между командой printf, также обозначаемой printf(1), и функцией printf в языке программирования C, на которую ссылаются как printf(3).
В
Глава 7, Решение проблем и поиск необходимой информации
о страницах руководства рассказывается более подробно (см.
Раздел 7.1.1, «Страницы руководств»
).
Обратите внимание на содержимое файла
.deb
:
$
ar t dpkg_1.17.23_amd64.deb
debian-binary control.tar.gz data.tar.gz
$
ar x dpkg_1.17.23_amd64.deb
$
ls
control.tar.gz data.tar.gz debian-binary dpkg_1.17.23_amd64.deb
$
tar tzf data.tar.gz | head -n 15
./
./var/
./var/lib/
./var/lib/dpkg/
./var/lib/dpkg/parts/
./var/lib/dpkg/info/
./var/lib/dpkg/alternatives/
./var/lib/dpkg/updates/
./etc/
./etc/logrotate.d/
./etc/logrotate.d/dpkg
./etc/dpkg/
./etc/dpkg/dpkg.cfg.d/
./etc/dpkg/dpkg.cfg
./etc/alternatives/
$
tar tzf control.tar.gz
./
./conffiles
./postinst
./md5sums
./prerm
./preinst
./control
./postrm

$
cat debian-binary
2.0
Как вы видите, архив ar пакета Debian состоит из трех файлов:
debian-binary
. Это текстовый файл, который просто указывает версию пакета
.deb
(в 2013 году — версия 2.0).
control.tar.gz
. Этот архивный файл содержит всю доступную метаинформацию,
например название и версию пакета. Эта метаинформация также позволяет инструментам управления пакетами определить, возможно ли установить или удалить пакет, например в соответствии со списком уже установленных в системе пакетов.
data.tar.gz
. Этот архив содержит все файлы, которые необходимо извлечь из пакета; то есть, в нем хранятся все исполняемые файлы, документация и т. п.
Некоторые пакеты могут использовать и другие форматы сжатия, и в таком случае файл будет называться по-другому (
data.tar.bz2
для bzip2, data.tar.xz для XZ).

5.2. Метаинформация пакета
Пакет Debian является не только архивом файлов, предназначенных для установки. Он является частью системы, и в нём описаны взаимоотношения с другими пакетами
Debian (зависимости, конфликты, предложения). Он также содержит сценарии, которые выполняются на различных этапах жизненного цикла пакета (при установке, удалении,
обновлении). Эти данные, используемые инструментами управления пакетами, не являются частью упакованного программного обеспечения, но содержатся внутри пакета и называются «метаинформацией» (информацией о другой информации).
5.2.1. Описание: файл
control
Структура этого файла похожа на заголовки e-mail (как они определены в RFC 2822).
Например, для apt файл control выглядит следующим образом:
$
apt-cache show apt
Package: apt
Version: 0.9.7.9+deb7u1
Installed-Size: 3271
Maintainer: APT Development Team
Architecture: amd64
Replaces: manpages-pl (<< 20060617-3
)
Depends: libapt-pkg4.12 (>= 0.9.7.9), libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.6), debian-archive-keyring, gnupg
Suggests: aptitude | synaptic | wajig, dpkg-dev, apt-doc, xz-utils, python-apt
Conflicts: python-apt (<< 0.7.93.2
)
Description-ru: менеджер пакетов с интерфейсом командной строки
Этот пакет содержит инструменты командной строки для поиска и управления пакетами, а также запроса информации о пакетах путём низкоуровневого доступа ко всем возможностям библиотеки libapt-pkg.
Включены следующие инструменты:
* apt-get для получения пакетов и информации о них из достоверных источников и для установки, обновления и удаления пакетов вместе с их зависимостями
* apt-cache для запроса доступной информации об установленных и доступных для установки пакетов
* apt-cdrom для использования внешних носителей информации в качестве источников пакетов
* apt-config в качестве интерфейса для настройки параметров
* apt-key в качестве интерфейса для управления ключами для проверки ключей аутентификации
Description-md5: 9fb97a88cb7383934ef963352b53b4a7
Tag: admin::package-management, hardware::storage, hardware::storage:cd,
implemented-in::c++, interface::commandline, network::client,
protocol::ftp, protocol::http, protocol::ipv6, role::program,
suite::debian, use::downloading, use::searching,
works-with::software:package
Section: admin
Priority: important
Filename: pool/main/a/apt/apt_0.9.7.9+deb7u1_amd64.deb
Size: 1258056
MD5sum: f403a84515c37e3232b7fcf9664c3e30
SHA1: abe3610c4c619eccacc8bc985369c780189e9958
SHA256: 8f2ada8ed29831ae97264d5ce51410755b25f940c277eacacfe6803cc3ae7540
К ОСНОВАМ RFC — стандарты Интернета
RFC — это аббревиатура, означающая «Request For Comments» или, по-русски, «Рабочее предложение». RFC
представляет собой технический документ, в котором описано, чему предстоит стать стандартом Интернета. Перед окончательным утверждением и прекращением внесения изменений стандарты публикуются для общественного рассмотрения (отсюда их название). IETF (Internet Engineering Task Force) принимает решение о статусе этих документов (предлагаемый стандарт, проект стандарта или стандарт).
RFC 2026 определяет процесс стандартизации интернет-протоколов.
→ http://www.faqs.org/rfcs/rfc2026.html
5.2.1.1. Зависимости: поле
Depends
Зависимости определяются в поле
Depends в заголовке пакета. Это список условий,
выполнение которых необходимо для коректной работы пакета. Данная информация используется такими инструментами, как apt, чтобы установить правильные версии необходимых библиотек, от которых зависит устанавливаемый пакет. Для каждой зависимости диапазон версий, соответствующих этому условию, может быть ограничен.
Другими словами, можно сказать, что нам требуется пакет libc6 версии не ниже чем
«2.3.4» (пишется «libc6 (>= 2.3.4)»). Операторы сравнения версий следующие:
<<: меньше;
<=: меньше или равна;
=: равна (однако «
2.6.1
» — не то же самое, что и «
2.6.1-1
»);
>=: больше или равна;
>>: больше.
В списке условий запятая играет роль разделителя. Её следует интерпретировать как логическое «и». Внутри условий вертикальная черта («|») означает логическое «или»
(включающее «или», а не исключающее «строго одно из»). Поскольку оно имеет более высокий приоритет, чем «и», его можно использовать столько раз, сколько потребуется.
Так, зависимость «(A или B) и C» записывается в виде A | B, C. Напротив, выражение «A
или (B и C)» следует записывать как «(A или B) и (A или C)», поскольку поле
Depends не допускает использования скобок, меняющих порядок приоритетов между логическими операторами «или» и «и». То есть должно писаться A | B, A | C.
→ http://www.debian.org/doc/debian-policy/ch-relationships.html
Система зависимостей — хороший механизм для обеспечения работоспособности
программ, но у него есть и другое применение — «метапакеты». Это пустые пакеты, в которых описаны только зависимости. Они обеспечивают установку группы взаимосвязанных программ, выбранных сопровождающим метапакета; соответственно,
apt install
метапакет
автоматически установит все эти программы, используя зависимости метапакета. Пакеты gnome, kde-full и linux-image-amd64 являются примерами метапакетов.
ПОЛИТИКА DEBIAN
Pre-Depends
,более требовательное
Depends
«Предварительные зависимости», перечисленные в поле «
Pre-Depends
» заголовков пакетов, дополняют обычные зависимости; их синтаксис аналогичен. Обычная зависимость показывает, что пакет должен быть распакован и настроен до настройки зависимого пакета. Предварительная зависимость оговаривает, что пакет должен быть распакован и настроен до запуска предустановочного сценария пакета, для которого указана предварительная зависимость, то есть до его установки.
Предварительная зависимость очень требовательна к apt, поскольку добавляет строгие ограничения на порядок установки пакетов. Поэтому использование предварительных зависимостей без крайней необходимости не поощряется. Более того, перед добавлением предварительной зависимости рекомендовано проконсультироваться с другими разработчиками в
<
debian-devel@lists.debian.org
>
. Как правило удаётся найти другое решение или обходной путь.
ПОЛИТИКА DEBIAN Поля
Recommends
,
Suggests
и
Enhances
В полях
Recommends и
Suggests указываются зависимости, не являющиеся обязательными. «Рекомендуемые»
зависимости, более важные, значительно улучшают функциональность, предоставляемую пакетом, но не являются совершенно необходимыми для его работы. «Предлагаемые» зависимости, следующие по значимости, означают, что некоторые пакеты могут дополнить устанавливаемый или быть полезными в связке с ним, но вполне целесообразной будет и установка одного без других.
Следует всегда устанавливать «рекомендуемые» пакеты, если вы только не знаете абсолютно точно, почему они вам не нужны. И наоборот, нет смысла устанавливать «предлагаемые» пакеты, если вы не знаете, зачем они вам нужны.
В поле
Enhances также указывается предложение, но другого рода. Оно на самом деле находится в предлагаемом пакете, а не в пакете, который выиграет от такого предложения. Смысл этого в том, что становится возможным добавить предложение, не меняя затрагиваемый пакет. Так, все дополнения, плагины и прочие расширения программы смогут появиться в списке предложений, относящихся к программе. Хотя оно существует уже несколько лет, это поле до сих пор по большей части игнорируется такими программами, как apt и synaptic. Смысл этого в том, чтобы предложения, вносимые через поле
Enhances
, отображались пользователю в дополнение к обычным предложениям — тем, которые находятся в поле
Suggests
5.2.1.2. Конфликты: поле
Conflicts
Поле
Conflicts указывает на то, что пакет не может быть установлен, если уже установлен другой пакет. Наиболее распространенными причинами для этого является включение обоими пакетами файлов с одинаковыми именами, или предоставление сервисов на одном и том же порту TCP, или мешающих работе друг друга.
dpkg откажется установить пакет, если он вызовет конфликт с уже установленным пакетом, за исключением тех случаев, когда новый пакет указывает, что он будет
«заменять» установленный пакет, — тогда dpkg заменит старый пакет на новый. apt
всегда следует вашим указаниям: если вы выберете установку нового пакета, он
автоматически предложит удалить проблемный пакет.
5.2.1.3. Несовместимость: поле
Breaks
По своему действию поля
Breaks похоже на поле
Conflicts
, но оно несёт особый смысл. Оно сообщает, что установка пакета «поломает» другой пакет (или конкретные его версии). Как правило, такая несовместимость между пакетами имеет временный характер, и
Breaks указывает на конкретные несовместимые версии.
dpkg откажется установить пакет, который поломает уже установленный пакет, и apt
попытается решить проблему путём обновления пакета, который оказался бы сломанным, до более новой версии (которая, как предполагается, будет исправленной и,
таким образом, снова совместимой).
Подобные ситуации могут возникнуть в случае обновления без обратной совместимости: это происходит, если новая версия работает не так, как старая, что приводит к сбою в другой программе, если не принять должных мер. Поле
Breaks помогает пользователю не сталкиваться с такими проблемами.
5.2.1.4. Предоставляемое пакетом: поле
Provides
Это поле вводит очень интересную концепцию «виртуального пакета». Она имеет много применений, два из которых особенно важны. Первое состоит в использовании виртуального пакета, чтобы привязать к нему общее название сервиса (пакет
«предоставляет» сервис). Вторая показывает, что пакет полностью заменяет другой, и что при этом он может удовлетворять зависимости, которые удовлетворил бы другой.
Таким образом, можно создать замену пакета без необходимости использовать то же самое имя пакета.
СЛОВАРЬ Метапакет и виртуальный пакет
Очень важно четко понимать различие между метапакетами и виртуальными пакетами. Первые являются настоящими пакетами (то есть файлами
.deb
), единственное назначение которых состоит в том, чтобы сообщить о зависимостях.
Виртуальные пакеты, напротив, не существует физически; они являются только средством идентификации реальных пакетов на основании общих, логических критериев (предоставляемого сервиса, совместимости со стандартной программой или ранее созданным пакетом и т. д.).
5.2.1.4.1. Предоставление «сервиса»
Давайте рассмотрим первый случай более подробно на примере: все почтовые серверы,
такие как postfix или sendmail, «предоставляют» виртуальный пакет mail-transport-agent.
Поэтому в любом пакете, для работы которого нужен этот сервис (например менеджере списков рассылки вроде smartlist или sympa), просто указывается зависимость от mail- transport-agent вместо того, чтобы указывать большой, и при этом всё равно неполный
список возможных решений (то есть postfix | sendmail | exim4 | …). Кроме того,
бесполезно установливать два почтовых сервера на одной машине, поэтому каждый из этих пакетов сообщит о конфликте с виртуальным пакетом mail-transport-agent.
Конфликт с самим собой игнорируется системой, но эта техника не допустит установки двух почтовых серверов.
ПОЛИТИКА DEBIAN Список виртуальных пакетов
Чтобы от виртуального пакета была польза, все должны прийти к соглашению о его имени. Именно поэтому имена стандартизированы в политике Debian. Список, помимо всего прочего, включает в себя mail-transport-agent для почтовых серверов, c-compiler для компиляторов языка программирования C, www-browser для веб-браузеров, httpd для веб-серверов, ftp-server для FTP-серверов, x-terminal-emulator для эмуляторов терминала в графическом режиме
(xterm) и x-window-manager для оконных менеджеров.
Полный список можно найти в Сети:
→ http://www.debian.org/doc/packaging-manuals/virtual-package-names-list.txt
5.2.1.4.2. Взаимозаменяемость другим пакетом
Поле
Provides также полезно в случаях, когда содержание пакета включается в состав другого, более крупного пакета. Например модуль Perl libdigest-md5-perl был необязательным в Perl 5.6, но стал стандартным в Perl 5.8 (и более поздних версиях, в частности 5.14, входящей в Wheezy). Поэтому в пакете perl, начиная с версии 5.8,
указывается
Provides: libdigest-md5-perl
, чтобы зависимости от этого пакета были удовлетворены при установке Perl версии 5.8 (или новее). Сам пакет libdigest-md5-perl в конечном итоге был удален, поскольку после удаления старых версий Perl в нём не стало смысла.
Рисунок 5.1. Использование поля
Provides
для того, чтобы не нарушать
зависимости

Эта функция очень полезна, поскольку никогда нельзя предвидеть превратности процесса разработки, и важно иметь возможность подстроиться к переименованию устаревшего ПО или другим автоматическим заменам.
К ОСНОВАМ Perl, язык программирования
Perl (Practical Extraction and Report Language — практический язык для извлечения данных и составления отчётов) — очень популярный язык программирования. Для него существует много модулей, которые используются для широкого спектра задач и распространяются с помощью серверов CPAN (Comprehensive Perl Archive Network

— всеобъемлющая сеть архивов Perl), исчерпывающей сети пакетов Perl.
→ http://www.perl.org/
→ http://www.cpan.org/
Так как это интерпретируемый язык, программа, написанная на Perl, не требуют компиляции перед выполнением.
Поэтому они называются «сценариями Perl».
5.2.1.4.3. Текущие ограничения
Виртуальные пакеты имеют некоторые ограничения, cамым значительным из которых является отсутствие номера версии. Вернемся к предыдущему примеру: зависимость,
такая как
Depends: libdigest-md5-perl (>= 1.6)
, несмотря на наличие Perl 5.10,
никогда не будет считаться удовлетворённой системой управления пакетами — в то время как на самом деле она скорее всего удовлетворена. Не зная этого, пакетная система выбирает наименее опасный путь, предполагая, что версии не соответствуют.
Это ограничение было снято в dpkg версии 1.17.11 и более не актуально для Jessie.
Пакеты могут назначать версию предоставляемым ими виртуальным пакетам при помощи зависимости, например:
Provides: libdigest-md5-perl (= 1.8)
5.2.1.5. Замена файлов: поле
Replaces
Поле
Replaces указывает, что пакет содержит файлы, которые также присутствуют в другом пакете, но при этом пакет имеет право заменить их. Без этого поля dpkg
завершится с ошибкой, сообщив, что не может перезаписать файлы другого пакета (на самом деле можно заставить его сделать это с помощью опции
--force-overwrite
). Это позволяет выявить потенциальные проблемы и вынуждает сопровождающего изучить вопрос прежде чем добавлять такое поле.
Это поле используется при изменении имени пакета, или когда один пакет включается в состав другого. Это также происходит в случае, если сопровождающий решает распределить файлы по-другому между двоичными пакетами, полученными из одного и того же исходного: заменённый файл больше не принадлежит старому пакету, а только новому.
Если все файлы в установленном пакете были заменены, принимается решение об удалении пакета. Наконец, это поле также указывает dpkg удалить заменённый пакет в случае конфликта.
УГЛУБЛЯЕМСЯ Поле
Tag
В приведенном выше примере apt можно заметить еще не рассмотренное нами поле
Tag
. Это поле не описывает какую-либо связь между пакетами. Это просто способ отнести пакет к той или иной тематической категории. Такая классификация пакетов по нескольким критериям (тип интерфейса, язык программирования, область применения и т.
д.) существует уже давно. Несмотря на это, не все пакеты имеют точные теги, и она интегрирована еще не во все инструменты Debian; aptitude отображает эти теги и позволяет использовать их в качестве критериев поиска. Тем,
кому не импонируют критерии поиска aptitude, следующий веб-сайт позволяет использовать навигацию по базе
тегов:
→ http://debtags.alioth.debian.org/
5.2.2. Сценарии настройки
Кроме файла control архив control.tar.gz в каждом пакете Debian может содержать несколько сценариев, вызываемых dpkg на разных этапах обработки пакета. В Политике
Debian подробно описаны все возможные случаи, в которых вызываются сценарии, и какие аргументы они при этом получают. Эти последовательности могут быть довольно сложными, поскольку если один из сценариев завершается с ошибкой, dpkg будет пытаться вернуться к нормальному состоянию (насколько это возможно) путём отмены текущей установки или удаления.
УГЛУБЛЯЕМСЯ База данных dpkg
Все сценарии настройки для установленных пакетов храняться в каталоге
/var/lib/dpkg/info/
в виде файла,
префикс имени которого совпадает с именем пакета. В этом каталоге также содержатся файлы с расширением
.list для каждого пакета, содержащие список файлов, принадлежащих каждому пакету.
Файл
/var/lib/dpkg/status содержит последовательности блоков данных (в формате небезызветстных почтовых заголовков, RFC 2822) с описанием статуса каждого пакета. Информация из файла control установленного пакета также дублируется сюда.
Если вкратце, сценарий preinst вызывается перед установкой пакета, а postinst после неё. Аналогично, prerm запускается перед удалением пакета, а postrm
— после.
Обновление пакета эквивалентно удалению предыдущей версии и установке более новой. Все возможные ситуации описать здесь не получится, но мы рассмотрим две,
встречающиеся чаще всего: установку/обновление и удаление.
ВНИМАНИЕ Сиволические имена сценариев
В последовательностях, описанных в этом разделе, сценарии вызываются по особым именам, таким как old-prerm
или new-postinst. Это, соответственно, сценарий prerm, содержавшийся в старой версии пакета (установленной до обновления), и сценарий postinst, содержащийся в новой версии (установленной при обновлении).
СОВЕТ Диаграммы состояний
Манож Сривастава нарисовал диаграммы, иллюстрирующие вызов конфигурационных сценариев dpkg. Похожие диаграммы также были разработаны проектом Debian Women; они несколько проще для понимания, но менее полные.
→ https://people.debian.org/
srivasta/MaintainerScripts.html
→ http://wiki.debian.org/MaintainerScripts
5.2.2.1. Установка и обновление
Вот что происходит во время установки пакета (или его обновления):

1. Для обновления dpkg запускает old-prerm upgrade
новая-версия
2. Также для обновления dpkg запускает new-preinst upgrade
старая-версия
; при установке запускается new-preinst install. Последним параметром может быть добавлена старая версия, если пакет уже устанавливался раньше, но был удалён (но не вычищен, то есть конфигурационные файлы сохранились).
3. После этого распаковываются файлы нового пакета. Если файл уже существует, он заменяется, но создаётся временная резервная копия.
4. При обновлении dpkg вызывает old-postrm upgrade
новая-версия
5. dpkg обновляет все внутренние данные (список файлов, сценарии настройки и т. п.)
и удаляет резервные копии заменённых файлов. Теперь обратного пути нет: dpkg
более недоступны все элементы, необходимые для отката к предыдущему состоянию.
6. dpkg обновит все конфигурационные файлы, выводя запрос пользователю, если это невозможно сделать автоматически. Подробности этой процедуры рассмотрены в
Раздел 5.2.3, «Контрольные суммы, список конфигурационных файлов»
7. Наконец, dpkg настраивает пакет, запуская new-postinst configure
последняя-
настроенная-версия
5.2.2.2. Удаление пакета
Вот что происходит во время удаления пакета:
1. dpkg запускает prerm remove.
2. dpkg удаляет все файлы пакета за исключением конфигурационных файлов и сценариев настройки.
3. dpkg запускает postrm remove. Все сценарии настройки, за исключением postrm
,
удаляются. Если пользователь не использует опцию «purge», процесс удаления заканчивается на этом шаге.
4. Для полного удаления пакета (в случае использования команды dpkg --purge или
dpkg -P) также удаляются конфигурационные файлы и их копии (
*.dpkg-tmp
,
*.dpkg-old
,
*.dpkg-new
) и временные файлы; после этого dpkg запускает postrm
purge.
СЛОВАРЬ Purge, полное удаление
При удалении пакета Debian конфигурационные файлы сохраняются в целях облегчения возможной повторной установки. Кроме того, сохраняется данные, созданные демонами (например содержимое каталога сервера LDAP
или содержимое базы данных SQL-сервера).
Для полного удаления всех данных, относящихся к пакету, необходимо «вычистить» (purge) пакет с помощью команды dpkg -P
пакет
, apt-get remove --purge
пакет
или aptitude purge
пакет
Учитывая необратимую природу такого удаления, не следует относиться к нему легкомысленно.
Четыре сценария, описанные выше, дополняются сценарием config
, предоставляемым пакетами, которые используют debconf для запроса у пользователя информации для
настройки. Этот сценарий определяет вопросы, которые будут заданы debconf во время установки. Ответы заносятся в базу данных debconf для дальнейшего использования.
Эти сценарии обычно выполняются apt до установки пакетов, последовательно, чтобы сгруппировать вопросы и задать их пользовтелю в начале процесса. Пред- и послеустановочные сценарии могут впоследствии использовать эту информацию, чтобы действовать в соответствии с пожеланиями пользователей.
ИНСТРУМЕНТ debconf
debconf создали для решения постоянно повторявшейся в Debian проблемы. Все пакеты Debian, которые не могли работать без минимума настроечной информации, задавали вопросы, вызывая команды echo и read в послеустановочных сценариях оболочки (и других похожих сценариях). Но это означало, что во время большой установки или обновления пользователь должен был оставаться у компьютера, чтобы отвечать на различные вопросы, которые могли появляться время от времени. Необходимость в таких ручных вмешательствах теперь почти полностью отпала благодаря инструменту debconf.
У debconf множество интересных возможностей: взаимодействие с пользователем задаётся разработчиком;
возможна локализация всех строк, отображаемых пользователю (все переводы хранятся в файле templates
,
описывающем взаимодействия); у него есть несколько фронт-эндов (для текстового, графического и неинтерактивного режимов); а также возможно создание центральной базы данных ответов для распространения одной конфигурации по нескольким компьютерам... но наиболее важным является то, что теперь возможно задать все вопросы пользователю подряд, до начала длительного процесса установки или обновления. Пользователь может отойти по своим делам, пока система санимается собственно установкой, а не глядеть неотрывно на экран в ожидании вопросов.
5.2.3. Контрольные суммы, список конфигурационных
файлов
В дополнение к сценариям сопровождающего и контрольным данным, уже рассмотренным в предыдущих разделах, архив control.tar.gz пакета Debian может содержать другие интересные файлы. Первый, md5sums
, содержит контрольные суммы
MD5 для всех файлов пакета. Благодаря ему можно с помощью команды dpkg --verify
(которая будет изучаться в
Раздел 14.3.3.1, «Auditing Packages with dpkg --verify»
)
проверить, изменялись ли эти файлы с момента установки. Обратите внимание, что при отсутствии этого файла dpkg создаст его динамически во время установки (и сохранит его в базе данных dpkg, как и другие контрольные файлы).
В conffiles содержится список файлов, которые должны быть обработаны как конфигурационные файлы. Конфигурационные файлы могут быть изменены администратором, и dpkg постарается сохранить эти изменения во время обновления пакета.
Действительно, в этой ситуации dpkg ведёт себя настолько интеллектуально, насколько это возможно: если стандартный конфигурационный файл не изменился между двумя версиями, она ничего не делает. Если, однако, файл был изменен, она будет пытаться обновить его. Возможны два варианта развития событий: если администратор не трогал конфигурационный файл, dpkg автоматически установит новую версию; если же файл
был изменен, dpkg спросит администратора, какую версию он хочет использовать
(старую с изменениями или новую из пакета). Для помощи в принятии решения dpkg
показывает «diff», то есть различия между двумя версиями. Если пользователь предпочтёт оставить старую версию, новая будет храниться в том же месте, в файле с суффиксом
.dpkg-dist
. Если же пользователь выбирает новую версию, старая сохраняется в файле с суффиксом
.dpkg-old
. Другой вариант заключается в том, чтобы немедленно прервать dpkg и отредактировать файл, попытавшись внести нужные изменения (ранее обнаруженные с помощью diff).
УГЛУБЛЯЕМСЯ Как избежать вопросов по поводу конфигурационных файлов
Хотя dpkg сама заботится об обновлении конфигурационных файлов, она всё же регулярно прерывает свою работу,
запрашивая ввод у администратора. Это весьма малоприятно для тех, кто хочет, чтобы обновление выполнялось неинтерактивно. Поэтому у программы имеются опции, позволяющие системе выбирать ответы автоматически,
руководствуясь одной и той же логикой: --force-confold оставляет старую версию файла; --force-confnew использует более новую версию файла (этот выбор применяется, даже если файл не изменялся администратором, что крайне редко является желаемым эффектом). Добавление опции --force-confdef указывает dpkg, что решения должны по возможности приниматься автоматически (в тех случаях, когда конфигурационный файл не менялся), а --force-
confnew или --force-confold надо применять в остальных случаях.
Эти опции применимы для dpkg, но администратор чаще имеет дело с программами aptitude или apt-get. Поэтому важно знать синтаксис, используемый для передаче опций команде dpkg (интерфейсы командной строки aptitude и
apt-get очень похожи).
#
apt -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" full-upgrade
Эти опции можно записать непосредственно в конфигурации apt. Для этого нужно добавить следующую строку в файл
/etc/apt/apt.conf.d/local
:
DPkg::options { "--force-confdef"; "--force-confold"; }
Включение этой опции в конфигурационный файл означает, что она будет распространяться и на графический интерфейс, в частности aptitude.
УГЛУБЛЯЕМСЯ Как заставить dpkg всегда задавать вопросы по поводу конфигурационных файлов
Опция --force-confask вынуждает dpkg отображать вопросы о конфигурационных файлах даже в тех случаях, когда в этом обычно нет необходимости. Таким образом, при переустановке пакета с этой опцией dpkg будет задавать вопросы снова и снова для всех конфигурационных файлов, измененных администратором. Это очень удобно,
особенно для переустановки оригинального конфигурационного файла, если он был удалён, и никакой другой экземпляр не доступен: обычная переустановка тут не сработает, так как dpkg считает удаление формой нормального изменения, и поэтому не устанавливает желанный конфигурационный файл.

5.3. Структура исходного пакета
5.3.1. Формат
Пакет с исходным кодом, как правило, состоит из трех файлов:
.dsc
,
.orig.tar.gz и
debian.tar.gz
(или
.diff.gz
). С их помощью можно создавать двоичные пакеты
(файлы
.deb
, описанные выше) из файлов исходного кода программы на том или ином языке программирования.
Файл
.dsc
(Debian Source Control) представлят собой текстовый файл с заголовком в формате RFC 2822 (точно так же, как файл control
, рассмотренный в
Раздел 5.2.1,
«Описание: файл control
»
), где описывается исходный пакет и указываются другие файлы, входящие в него. Он подписан сопровождающим, что гарантирует его подлинность. См.
Раздел 6.5, «Checking Package Authenticity»
для получения дополнительной информации по этому вопросу.
Пример 5.1. Файл
.dsc
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Format: 3.0 (quilt)
Source: zim
Binary: zim
Architecture: all
Version: 0.62-3
Maintainer: Emfox Zhou
Uploaders: Raphaël Hertzog
Каталог: wp-content -> uploads -> 2016
2016 -> Государственное областное бюджетное
2016 -> В. П. Зинченко писал о том, что если человек в детстве не дополучил некую норму участия в игровом времяпрепровождении, он приобретает социально-психологическую ущербность вроде «игровой дистрофии», которую в последу
2016 -> Общешкольное родительское собрание «Об ответственности родителей за воспитание детей»
2016 -> 1 июня 2016 года Международный день защиты детей 1 июня
2016 -> «Формирование социально-нравственной позиции дошкольников посредством введения сказочных сюжетов в компьютерные дидактические игры»
2016 -> Принята Утверждена
2016 -> Конкурс по разработке компьютерных игр патриотической направленности «патриот by»


Поделитесь с Вашими друзьями:
1   2   3   4   5   6   7   8   9   10   ...   32


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал