Углубление в систему пакетов Debian — часть 8.4

Перейти к содержанию книги Kali Linux Revealed

8.4 Справка по пакетам: углубление в систему пакетов Debian

Наконец, пришло время углубиться в систему пакетов Debian и Kali. На этом этапе мы собираемся выйти за рамки инструментов и синтаксиса и сосредоточиться на сути системы пакетирования. Этот закулисный взгляд поможет вам понять основы работы APT и предоставит вам реальный взгляд на то, каким образом вы можете настроить и рационализировать вашу систему Kali. Вам не обязательно запоминать абсолютно весь материал, изложенный в этом разделе, но в любом случае полученная вами здесь информация послужит вам хорошую службу по мере вашего профессионального роста в освоении системы Kali Linux.

До сих пор вы взаимодействовали с данными пакета APT с помощью различных инструментов, предназначенных для взаимодействия с ним. Далее мы углубимся и заглянем внутрь пакетов и рассмотрим внутреннюю метаинформацию (или информацию о другой информации), используемую инструментами управления пакетами.

Эта комбинация файлового архива и метаинформации непосредственно видна в структуре файла .deb , который является просто архивом, объединяющим три файла:

$ ar t /var/cache/apt/archives/apt_1.4~beta1_amd64.deb
debian-binary 
control.tar.gz 
data.tar.xz

Двоичный файл debian содержит один номер версии, описывающий формат архива:

$ ar p /var/cache/apt/archives/apt_1.4~beta1_amd64.deb debian-binary
2.0

Архив control.tar.gz  содержит метаинформацию:

$ ar p /var/cache/apt/archives/apt_1.4~beta1_amd64.deb control.tar.gz | tar -tzf -
./ 
./conffiles 
./control 
./md5sums 
./postinst 
./postrm 
./preinst 
./prerm 
./shlibs 
./triggers

И наконец, архив data.tar.xz  (формат сжатия может отличаться) содержит фактические файлы, которые необходимо установить в файловой системе:

$ ar p /var/cache/apt/archives/apt_1.4~beta1_amd64.deb data.tar.xz | tar -tJf -
./
./etc/
./etc/apt/
./etc/apt/apt.conf.d/
./etc/apt/apt.conf.d/01autoremove
./etc/apt/preferences.d/
./etc/apt/sources.list.d/
./etc/apt/trusted.gpg.d/
./etc/cron.daily/
./etc/cron.daily/apt-compat
./etc/kernel/
./etc/kernel/postinst.d/
./etc/kernel/postinst.d/apt-auto-removal
./etc/logrotate.d/
./etc/logrotate.d/apt
./lib/
./lib/systemd/
[...]

Обратите внимание, что в данном примере, вы рассматриваете .deb пакет в архиве кэша APT, и что ваш архив может содержать файлы с номерами версий, которые могут отличаться от приведенных в примере.

В этом разделе, мы представим эту метаинформацию, которая содержится в каждом пакете, и мы покажем вам как её использовать.

8.4.1 Контрольный файл

Давайте начнем рассмотрение контрольного файла, который содержится в архиве control.tar.gz . Контрольный файл содержит самую необходимую информацию о пакете. Он использует структуру, похожую на заголовки электронных писем, и может быть просмотрен с помощью команды dpkg –I . Например, контрольный файл apt выглядит следующим образом:

$ dpkg -I apt_1.4~beta1_amd64.deb control
Package: apt
Version: 1.4~beta1
Architecture: amd64
Maintainer: APT Development Team<deity@lists.debian.org>
Installed-Size: 3478
Depends: adduser, gpgv | gpgv2 | gpgv1, debian-archive-keyring, init-system-helpers (>= 1.18~), libapt-pkg5.0 (>= 1.3~rc2), libc6 (>= 2.15), libgcc1 (>= 1:3.0), libstdc++6 (>= 5.2)
Recommends: gnupg | gnupg2 | gnupg1
Suggests: apt-doc, aptitude | synaptic | wajig, dpkg-dev (>= 1.17.2), powermgmt-base, python-apt
Breaks: apt-utils (<< 1.3~exp2~)
Replaces: apt-utils (<< 1.3~exp2~)
Section: admin
Priority: important
Description: commandline package manager
 This package provides commandline tools for searching and
 managing as well as querying information about packages
 as a low-level access to all features of the libapt-pkg library.
 .
 These include:
  * apt-get for retrieval of packages and information about them
    from authenticated sources and for installation, upgrade and
    removal of packages together with their dependencies
  * apt-cache for querying available information about installed
    as well as installable packages
  * apt-cdrom to use removable media as a source for packages
  * apt-config as an interface to the configuration settings
  * apt-key as an interface to manage authentication keys

В этом разделе мы представим вам контрольный файл и разъясним вам различные области. Каждая из них даст вам лучшее понимание системы пакетирования, даст вам более точную настройку управления конфигурацией и предоставит вам информацию, необходимую для устранения проблем, которые могут возникнуть.

8.4.1.1 Зависимости: поле Depends

Зависимости пакета определяются в поле Depends в заголовке пакета. Это список условий для корректной работы пакета — эта информация используется такими инструментами, как apt для установки необходимых библиотек, в соответствующих версиях, выполняющих зависимости устанавливаемого пакета. Для каждой зависимости вы можете ограничить диапазон версий, соответствующих этому условию Другими словами, можно выразить тот факт, что пакет libc6 вам нужен в версии, равной или большей, чем «2.15» (пишется libc6 (>= 2.15)»). Знаки операции сравнения выглядят следующим образом:

  • <<: меньше чем;
  • <=: меньше чем или равно;
  • =: равно (но помните, что «2.6.1» не будет равняться «2.6.1-1»);
  • >=: больше чем или равно;
  • >>: больше чем.

В списке условий, которые должны выполняться, запятая служит разделителем, интерпретируемым как логическое «И». В условиях вертикальная черта («|») обозначает логическое «ИЛИ» (это включающее ИЛИ, не исключающее и/или («either/or»)). Указывая больший приоритет, чем просто «И», вы можете использовать его столько раз, сколько необходимо. Таким образом, зависимость «(A ИЛИ B) и C» записывается A | B, C. Напротив, выражение «A ИЛИ (B И C)» должно быть записано как «(A ИЛИ B) И (A ИЛИ C)», поскольку поле Depends не допускает круглые скобки, которые изменяют порядок приоритетов между логическими операторами «ИЛИ» и «И». Следователь запись будет выглядеть следующим образом A | B, A | C. Для получения большей информации рекомендуем вам посетить сайт.

Система зависимостей является хорошим механизмом для гарантии работы программы, но она также имеет другие сферы применение с мета пакетами. Это пустые пакеты, которые описывают только зависимости. Они облегчают установку согласованной группы программ, предварительно выбранных создателем мета-пакета; как таковая команда apt install meta-package будет автоматически устанавливать все эти программы, используя зависимости мета-пакета. Пакеты gnome, kde-full и kali-linux — это примеры мета-пакетов.

8.4.1.2 Pre-Depends, более требовательные зависимости

Pre-dependencies (Предварительные зависимости), которые перечислены в поле Pre-Depends в заголовках пакетов, дополняют обычные зависимости; их синтаксис идентичный. Обычная зависимость указывает на то, что пакет, о котором идет речь, должен быть распакован и настроен перед настройкой пакета, объявляющего зависимость. Предварительная зависимость предусматривает, что пакет, о котором идет речь, должен быть распакован и настроен перед выполнением сценария предварительной установки пакета, объявляющего предварительную зависимость, которая идет перед его установкой.

Предварительная зависимость является очень требовательной к apt, потому что она добавляет строгое ограничение на порядок пакетов для установки. По сути, предварительные зависимости как таковые не используются до тех пор, пока в них не стаёт острая необходимость. Мы даже порекомендуем вам проконсультироваться с другими разработчиками на debian-devel@lists.debian.org перед тем, как добавлять предварительную зависимость, если все еще есть вероятность разрешения вашей проблемы без их использования.

8.4.1.3 Поля Recommends (Рекомендуемые), Suggests (Предложенные), и Enhances (Улучшенные)

Поля Recommends и Suggests описывают зависимости, которые не являются обязательными. Рекомендуемые зависимости, что является самым важным, значительно улучшают функциональность, предлагаемую пакетом, но не являются обязательными для его работы. Предложенные зависимости, вторичной важности, указывают на то, что определенные пакеты могут улучшить и дополнить свою соответственную полезность, но довольно разумным является установка одних без других.

Вам следует всегда устанавливать рекомендуемые пакеты, пока конкретно не будете уверены в том, что более не нуждаетесь в них. И, наоборот, у вас нет необходимости устанавливать предложенные пакеты, пока вы не будете уверены в том, что они вам действительно нужны.

Поле Enhances также описывает предложение, но немного в другом контексте. Оно действительно находится в предложенном пакете    , а не в пакете, который получит преимущество от этого предложения. Его интерес лежит в том, что существует возможность добавить предложение без изменения, связанного с ним пакета. Таким образом, все надстройки, плагины и другие расширения программы могут затем отображаться в списке предложений, связанных с программным обеспечением. Не смотря на то, что данное поле существует уже несколько лет, он до сих пор в значительной степени игнорируется программами, такими как apt или synaptic. Первоначальная цель состояла в том, чтобы позволить пакету, такому как xul-ext-adblock-plus (Firefox расширение) объявлять Enhances (Улучшения): firefox, firefox-esr, таким образом, появлялись в списке предложенных пакетов связанных с firefox и firefox-esr.

8.4.1.4 Конфликты: поле Conflicts (внести правки в общее содержание)

Поле Conflicts обозначает случаи, когда пакет нельзя установить одновременно вместе с другими. Самой часто распространенной причиной для этого является то, что оба пакета включают в себя файл с одним и тем же именем, предоставляют одну и ту же службу на одном и том же порту протокола управления передачей (transmission control protocol (TCP)) или же из-за того, что они препятствуют работе друг друга.

Если возникает случай, когда появляется конфликт с уже установленным пакетом, dpkg откажется устанавливать пакет, за исключением случаев, когда новый пакет указывает, что он заменит установленный пакет, и в этом случае dpkg решит заменить старый пакет на новый. APT всегда следует вашим инструкциям: если вы решите установить новый пакет, он автоматически предложит удалить пакет, представляющий проблему.

8.4.1.5 Несовместимости: Поле Breaks

Поле Breaks обладает похожим эффектом, подобным эффекту поля Conflicts, но в отличие от последнего оно имеет особое значение. Оно оповещает о том, что установка пакета навредит другому пакету (или конкретной версии пакета). В общем, эта несовместимость между двумя пакетами носит временный характер, а отношение Breaks конкретно относятся к несовместимым версиям.

Когда пакет нарушает работу уже установленного пакета, dpkg откажется устанавливать его, а apt попробует решить проблему путем обновления пакета, работа которого будет нарушена, до более новой версии (которая считается совместимой).

Такая ситуация может возникнуть в случае обновлений без обратной совместимости: имеется ввиду, что новая версия больше не работает с более старой версией и вызывает неисправность в другой программе без создания особых условий. Поле Breaks помогает предотвратить эти проблемы.

8.4.1.6 Предусмотренные пункты: Поле Provides

В этом поле представлена очень интересная концепция виртуального пакета (virtual package). Он имеет много ролей, но две из них особенно важны. Первая роль заключается в использовании пакета для связывания с ним общей службы (пакет предоставляет службу). Вторая роль указывает на то, что пакет полностью заменяет другой и что для достижения этой цели он может удовлетворять зависимости, которые также удовлетворяют другие пакеты. Таким образом можно создать пакет замещения без использования одного и того же имени пакета.

Мета пакет и виртуальный пакет

Очень важно четко отличать мета пакеты от виртуальных пакетов. Последние являются реальными пакетами (включая реально существующие .deb файлы), чья задача состоит в выражении зависимостей.

Но виртуальные пакеты физически не существуют; они являются лишь средством идентификации реальных пакетов на основе общих логических критериев (например, предоставляемых услуг или совместимости со стандартной программой или уже существующим пакетом).

8.4.1.6.1 Предоставление услуги (Providing a Service)

Давайте обсудим первый случай более детально на конкретном примере: все почтовые серверы, такие как postfix или sendmail должны предоставлять виртуальный пакет mail-transport-agent . Таким образом, любой пакет, для которого эта служба должна быть функциональной (например, диспетчер списка рассылки, такой как smartlist или sympa), просто заявляет в своих зависимостях, что для этого требуется mail-transport-agent  вместо указания большого, но неполного списка возможных решений. Кроме того, абсолютно бессмысленно устанавливать два почтовых сервера на одной и той же машине, именно поэтому каждый из этих пакетов заявляет о конфликте с mail-transport-agent  виртуальным пакетом. Конфликт между пакетом и им самим игнорируется системой, но этот метод будет запрещать установку двух почтовых серверов на одном компьютере.

8.4.1.6.2 Взаимозаменяемость с другим пакетом

Поле Provides также является интересным, когда содержание пакета включено в более крупный пакет. Например, модуль Perl libdigest-md5-perl  выступает необязательным модулем в Perl 5.6, и был встроен в качестве стандартного только в Perl 5.8. Таким образом, начиная с версии 5.8, пакет perl заявляет Iibdigest-md5-perl таким образом, что все зависимости на этом пакете удовлетворяются, если на системе установлен Perl 5.8 (или более новый). Пакет libdigest-md5-perl  сам по себе был удален, т.к. у него более нет никаких задач, с которыми бы не могли справиться другие пакеты.

углубление в систему пакетов Debian - часть 8.4
Рисунок 8.3 Использование поля Provides для того, чтобы не нарушить зависимость.

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

8.4.1.7 Замена файлов: Поле Replaces

Поле Replaces обозначает, что пакет содержит файлы, которые также присутствуют в другом пакете и что данный пакет законно обладает правами на их замену. Без этой спецификации, dpkg не сможет быть выполнен, утверждая, что он не может перезаписать файлы другого пакета (технически возможно заставить его сделать это с помощью опции -force-overwrite , но это не является стандартной операцией). Это позволяет выявить потенциальные проблемы и требует от специалиста по обслуживанию изучить вопрос пред тем, как принять решение о добавлении такого поля.

Использование этого поля оправдано, когда имена пакетов изменяются или когда пакет включен в другой. Это также может происходить, когда специалист по обслуживанию решает распространять файлы по-разному среди различных двоичных пакетов, созданных одним и тем же источником пакетов: замещенный файл больше не принадлежит старому пакету, теперь он принадлежит только новому.

Если все файлы в установленных пакетах были заменены, пакет считается удаленным. И наконец, это поле также способствует удалению замещенных пакетов с помощью dpkg в случае возникновения конфликта.

8.4.2 Скрипты конфигурации

В дополнение к управляющему файлу, control.tar.gz  архив для каждого пакета Debian может содержать определенное количество скриптов (postinst, postrm, preinst, prerm), вызываемых dpkg на разных этапах обработки пакета. Мы можем использовать dpkg -I  для отображения этих файлов, поскольку они находятся в архиве пакета .deb:

$ dpkg -I /var/cache/apt/archives/zsh_5.3-1_amd64.deb | head
 new debian package, version 2.0.
 size 814486 bytes: control archive=2557 bytes.
     838 bytes,    20 lines      control
    3327 bytes,    43 lines      md5sums
     969 bytes,    41 lines   *  postinst             #!/bin/sh
     348 bytes,    20 lines   *  postrm               #!/bin/sh
     175 bytes,     5 lines   *  preinst              #!/bin/sh
     175 bytes,     5 lines   *  prerm                #!/bin/sh
 Package: zsh
 Version: 5.3-1
$ dpkg -I zsh_5.3-1_amd64.deb preinst
#!/bin/sh
set -e
# Automatically added by dh_installdeb
dpkg-maintscript-helper symlink_to_dir /usr/share/doc/zsh zsh-common 5.0.7-3 -- "$@"
# End automatically added section

Debian Policy детально описывает каждый из этих файлов, указывая вызванные скрипты и аргументы, которые они получают. Эти последовательности могут быть довольно сложными, т.к. если один из этих скриптов потерпит неудачу, dpkg попробует вернуться к удовлетворительному состоянию путем отмены идущего на данный момент процесса установки или удаления (насколько это будет возможным).

База данных dpkg

Вы можете перемещать базу данных dpkg в файловой системе в / var / lib / dpkg / . Этот каталог содержит текущую запись обо всех пакетах, которые были установлены в системе. Все скрипты конфигурации для установленных пакетов хранятся в каталоге / var / lib / dpkg / info /  в виде файла с префиксом имени пакета:

$ ls /var/lib/dpkg/info/zsh.*
/var/lib/dpkg/info/zsh.list /var/lib/dpkg/info/zsh.md5sums 
/var/lib/dpkg/info/zsh.postinst 
/var/lib/dpkg/info/zsh.postrm 
/var/lib/dpkg/info/zsh.preinst 
/var/lib/dpkg/info/zsh.prerm

Эта директория также включает в себя файл с расширением .list  для каждого пакета, который содержит список файлов принадлежащих этому пакету:

$ head /var/lib/dpkg/info/zsh.list
/. 
/bin 
/bin/zsh 
/bin/zsh5 
/usr 
/usr/lib 
/usr/lib/x86_64-linux-gnu 
/usr/lib/x86_64-linux-gnu/zsh 
/usr/lib/x86_64-linux-gnu/zsh/5.2 
/usr/lib/x86_64-linux-gnu/zsh/5.2/zsh 
[...]

Файл /var/lib/dpkg/status содержит серию блоков данных (в формате известного запроса заголовков почты для комментария RFC 2822), описывающих состояние каждого пакета. Информация из управляющего файла установленных пакетов также дублируется там.

$ more /var/lib/dpkg/status
Package: gnome-characters 
Status: install ok installed 
Priority: optional 
Section: gnome 
Installed-Size: 1785 
Maintainer: Debian GNOME Maintainers<pkg-gnome-maintainers@lists.alioth.debian.org> 
Architecture: amd64 
Version: 3.20.1-1 
[...]

Давайте обсудим файлы конфигурации и посмотрим, как они взаимодействуют. В общем, скрипт preinst выполняется до установки пакета, в то время как postins следует за ней. Подобно этому prerm вызывается перед удалением пакета, а postrm после этого. Обновление пакета является эквивалентным по отношению к удалению предыдущей версии и установки новой. К сожалению, невозможно детально описать все сценарии возможные здесь, но, тем не менее, мы обсудим два самых распространенных: установка/обновление и удаление.

Эти последовательности могут быть довольно запутывающими, но визуальное представление может помочь. Manoj Srivastava сделал эти схемы (графики), объясняя то, как именно вызываются скрипты конфигурации с помощью dpkg. Похожие схемы (графики) были также разработаны проектом Debian Women; они являются более простыми для понимания, но менее полными.

https://people.debian.org/~srivasta/MaintainerScripts.html

https://wiki.debian.org/MaintainerScripts

Предостережение: символические имена

Последовательности, описанные в этом разделе, вызывают скрипты конфигурации по конкретным именам, например old-prerm  или new-postinst . Это, соответственно, скрипт prerm, содержащийся в старой версии пакета (установленный перед обновлением) и postinst-скрипт, содержащийся в новой версии (установленной обновлением).

8.4.2.1 Установка и обновление последовательности скриптов

Ниже описано то, что происходит во время процесса установки (или обновления):

  1. Для обновления, dpkg вызывает old-prerm upgrade new-version .
  2. Также для обновления, dpkg выполняет new-preinst upgrade old-version ; для первой установки, он выполняет new-preinst install . Он может добавлять старую версию в последний параметр, если пакет уже был установлен и удален (но не очищен, файлы конфигурации были сохранены).
  3. Далее новые файлы пакеты распаковываются. Если файл уже существует, он заменяется, но все равно создается резервная копия и хранится во временных файлах.
  4. Для обновления, dpkg выполняет old-postrm upgrade new-version.
  5. dpkg обновляет все внутренние данные (список файлов, скрипты конфигурации, и т.д.) и удаляет все резервные копии замещенных файлов. В данном случае это является точкой невозврата: dpkg больше не имеет доступа ко всем тем элементам, которые необходимы для возвращения к предыдущему состоянию.
  6. dpkg обновит файлы конфигурации, предложив вам решить, не может ли он автоматически управлять этой задачей. Детали данной процедуры подробно изложены в разделе 8.4.3, «Сигнатуры и файлы конфигурации».
  7. И наконец, dpkg настраивает пакет путем выполнения new-postinst configure last- version-configured .

8.4.2.2 Удаление пакета

Ниже описано то, что происходит во время удаления пакета

  1. dpkg вызывает prerm remove.
  2. dpkg удаляет все файлы пакета, за исключением файлов конфигурации и сценариев конфигурации.
  3. dpkg выполняет postrm remove. Все сценарии конфигурации, кроме postrm, удаляются. Если вы не использовали опцию purge, то процесс останавливается на этом этапе.
  4. Для полной очистки пакета (команда, заданная с dpkg —purge or dpkg -P ), необходимо удалить и файлы конфигурации, также как и определенное количество копий (*.dpkg- tmp, *.dpkg-old, *.dpkg-new ) и временных файлов; dpkg затем выполняет postrm purge.

В некоторых случаях пакет может использовать debconf для получения информации о конфигурации от вас: четыре сценария, описанные выше, затем дополняются скриптом config, предназначенным для получения этой информации. Во время установки этот скрипт подробно определяет, какие вопросы задает debconf. Ответы записываются в базу данных debconf для дальнейшего использования. Сценарий обычно выполняется apt перед последовательной установкой пакетов, чтобы сгруппировать все вопросы вместе в начале процесса. Затем pre- и post- скрипты установки могут использовать эту информацию для работы в соответствии с вашими пожеланиями.

Инструмент debconf

Инструмент debconf был создан для решения повторяющейся проблемы в Debian. Все пакеты Debian не могут функционировать без конфигурации, которая используется для постановки вопросов с вызовами echo и read команд в оболочке скриптов postinst (и других похожих скриптов). Это заставляло установщик присматривать за крупными установками или обновлениями для того, чтобы отвечать на различные конфигурационные запросы по мере их возникновения. На сегодняшний день, благодаря debconf, мы можем почти полностью обходиться без подобного рода ручного взаимодействия.

Инструмент debconf обладает большим количеством интересных функций: он требует от разработчика указать взаимодействие с пользователем; он позволяет локализовать все отображаемые строки (все переводы хранятся в файле шаблонов, описывающих взаимодействия); он предоставляет различные интерфейсы (текстовый режим, графический режим, не интерактивный); и он разрешает создание центральной базы данных ответов для того, чтобы иметь возможность делиться одной и той же конфигурацией с несколькими компьютерами. Самым важным свойством является то, что все вопросы могут быть представлены в одном ряде, все вместе, перед началом длительного процесса установки или обновления. Теперь вы можете смело заниматься своими делами, пока система абсолютно самостоятельно проводит установку. Теперь у вас нет никакой необходимости оставаться на месте, уставившись в экран в ожидании вопросов, которые могут возникнуть в любую минуту.

8.4.3 Сигнатуры и конфигурационные файлы (conffiles)

Кроме скриптов поддержки и данных управления уже упомянутых а предыдущем разделе, архив control.tar.gz пакета Debian может содержать другие интересные файлы.

# ar p /var/cache/apt/archives/bash_4.4-2_amd64.deb control.tar.gz | tar -tzf -
./
./conffiles
./control
./md5sums
./postinst
./postrm
./preinst
./prerm

Первый—md5sums—содержит сигнатур MD5 для всех файлов пакета. Главным его преимуществом является то, что он допускает dpkg –verify для того, чтобы проверить были ли эти файлы изменены с момента их установки. Обратите внимание: если этот файл не существует, то dpkg будет генерировать его динамически во время установки (и хранить его в базе данных dpkg, как и другие управляющие файлы).

Conffiles перечисляет файлы пакетов, которые должны быть обработаны в качестве файлов конфигурации. Файлы конфигурации могут быть изменены администратором, а dpkg, в свою очередь, постарается сохранить эти изменения во время обновления пакета.

Фактически, в этой ситуации dpkg ведет себя настолько разумно насколько это возможно: если стандартный файл конфигурации не изменился между двумя версиями, он ничего не делает. Если же файл был изменен, он попытается обновить этот файл. Возможны два случая: либо администратор в принципе не касался этого файла конфигурации, и в этом случае dpkg автоматически устанавливает новую версию; или файл был изменен, и в этом случае dpkg запрашивает у администратора версию, которую он хочет использовать (старую версию с модификациями или новую, предоставленную пакетом). Чтобы помочь в принятии подобного рода решения, dpkg предлагает отобразить diff, который показывает разницу между двумя версиями. Если вы решите сохранить старую версию, новая будет сохранена в том же месте в файле с суффиксом .dpkg-dist. Если же вы выберете оставить новую версию, старая будет сохранена в файле с суффиксом .dpkg — old. Другое доступное действие состоит из кратковременного прерывания работы dpkg для того, чтобы отредактировать файл и попытаться восстановить соответствующие изменения (ранее идентифицированные с помощью diff).

dpkg обрабатывает обновления файла конфигурации, но при этом регулярно прерывает свою работу, запрашивая ввод от администратора. Это часто может быть довольно таки трудоемким и неудобным. К счастью, вы можете дать команду dpkg ответить на эти запросы автоматически. Параметр —force-confold сохраняет старую версию файла, а —force-confnew будет использовать новую версию. Эти варианты соблюдаются, даже если файл не был изменен администратором, что довольно редко дает желаемый эффект. Добавление опции —force-confdef говорит dpkg решать вопрос самостоятельно там, где это возможно (другими словами, когда исходный файл конфигурации не был затронут). Опции —force-confnew или —force-confold  следует использовать для других случаев.

Эти опции используют dpkg, но большую часть времени администратор будет работать непосредственно с программами aptitude или apt. Тем не менее, необходимо знать синтаксис, используемый для указания параметров, передаваемых команде dpkg (их интерфейсы командной строки очень похожи).

$ 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 воспринимает удаление, как форму легального изменения и, таким образом, не устанавливает необходимый файл конфигурации.

8.5 Подведем итоги раздела «Управление пакетами Debian»

В этом разделе, мы узнали больше о системе пакетов Debian, обсудили Advanced Package Tool (APT) и dpkg, узнали больше о базовом взаимодействии пакетов, дополнительной настройке и использовании APT, и углубились в изучение системы пакетов Debian с краткой ссылкой файла формата .deb. Мы рассмотрели такие понятия как файл управления, скрипты конфигурации, сигнатуры и файлы конфигурации (conffiles).

Основные моменты:

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

Инструмент dpkg, в отличие от apt и apt-get (семейства APT), не имеет необходимой информации о всех доступных пакетах, которые могут быть использованы для удовлетворения зависимостей пакетов. Таким образом, для управления пакетами Debian, вы, вероятно, будете использовать последние инструменты, поскольку они могут автоматически разрешать проблемы с зависимостями.

Вы можете использовать APT для установки и удаления приложений, обновления пакетов и даже для обновления всей вашей системы. Ниже приведены основные моменты, которые вам необходимо знать об APT и его конфигурациях:

  • Файл sources.list является ключевым файлом конфигурации для определения источников пакетов (или репозиториев, содержащих пакеты);
  • Debian и Kali используют три раздела для дифференциации пакетов в соответствии с лицензиями, выбранными авторами каждой работы: содержит все пакеты, которые полностью соответствуют Директиве по свободному программному обеспечению Debian (Debian Free Software Guidelines); non-free содержит программное обеспечение, которое не полностью соответствует Директиве по свободному программному обеспечению, но тем не менее может быть распространено без ограничений; и contrib (contributions) включает программное обеспечение с открытым исходным кодом, которое не может функционировать без каких-либо non-free элементов;
  • Kali поддерживает несколько репозиториев, в том числе: kali-rolling, который является основным хранилищем для конечных пользователей и всегда должен содержать устанавливаемые и последние пакеты; kali-dev , который используется разработчиками Kali и не предназначен для публичного использования; и kali-bleeding-edge , который часто содержит непроверенные пакеты, автоматически создаваемые из репозитория Git (или Subversion), менее чем через двадцать четыре часа после их загрузки;
  • Работая с APT, вам необходимо сначала загрузить список доступных на данный момент пакетов с помощью apt update ;
  • Вы можете добавить пакет в систему с помощью apt install package . APT автоматически установит все необходимые зависимости;
  • Для того чтобы удалить пакет, используйте apt remove package . Он также устранит обратную зависимость пакета (то есть пакеты, которые зависят от пакета, который нужно удалить);
  • Для того чтобы удалить все данные связанные с пакетом, вы можете «очистить» пакет с помощью команды apt purge package. В отличие от процесса удаления, это не только удалит пакет, но также удалит и его файлы конфигурации и иногда даже связанные с ним данные пользователя.

Мы рекомендуем регулярные обновления для установки последних обновлений безопасности. Чтобы обновить, используйте apt update , за которым следуют apt upgrade, apt-get upgrade или aptitude safe-upgrade . Эти команды ищут установленные пакеты, которые можно обновить без удаления каких-либо пакетов.

Для более важных обновлений, таких как обновление основных версий, используйте apt full-upgrade. С помощью этой команды apt завершит обновление, даже если ему нужно удалить некоторые устаревшие пакеты или установить новые зависимости. Это также команда, которую вы должны использовать для регулярных обновлений вашей системы Kali Rolling. Просмотрите все плюсы и минусы обновлений, описанных в соответствующей главе.

Для проверки пакетов Debian можно использовать несколько инструментов:

  • dpkg —listfiles package (или -L) перечисляет файлы, которые были установлены в указанных пакетах.
  • dpkg —search file (или -S) находит любые пакеты, которые содержат файл или путь указанный в аргументе.
  • dpkg —list (или -I) выводит на экран список пакетов известных систем, а также их статус установки.
  • dpkg —contents file.deb (или -c) перечисляет все файлы в конкретном .deb файле.
  • dpkg —info file.deb (или-I) выводит на экран заголовки указанного .deb файла.
  • Различные apt-cache подкоманды большую часть информации, хранящейся во внутренней базе данных APT.

Чтобы избежать чрезмерного использования диска, вы должны регулярно сортировать /var/cache/apt/archives/ . Для этого можно использовать две команды: apt clean (или apt-get clean), которая полностью опустошает каталог; apt autoclean (apt-get autoclean) , которая удаляет только те пакеты, которые больше не могут быть загружены, т.к. они исчезли из зеркала, и поэтому являются бесполезными.

Aptitude — это интерактивная программа, которая может использоваться в полуграфическом режиме на консоли. Это чрезвычайно надежная программа, которая может помочь вам установить и устранить неполадки в пакетах.

synaptic — графический менеджер пакетов, который имеет чистый и эффективный графический интерфейс.

Как продвинутый пользователь, вы можете создавать файлы в /etc/apt/apt.conf.d/ для настройки определенных аспектов APT. Вы также можете управлять приоритетами пакетов, отслеживать автоматически установленные пакеты, работать с несколькими дистрибутивами или архитектурами одновременно, использовать криптографические подписи для проверки пакетов и обновлять файлы, используя методы, описанные в соответствующей главе.

Несмотря на все усилия, предпринимаемые разработчиками Kali / Debian, обновление системы не всегда проходит так гладко, как мы надеемся. Если вы столкнулись с каким-либо проблемами, вы можете посетить Kali bug tracker
или Debian bugtracking system на https://bugs.debian.org/package для проверки отчетов о решении данного рода проблемы. Вы также можете попытаться понизить в статусе пакет или отладить и восстановить неудачный сценарий поддержки пакета.

Перейти к содержанию книги Kali Linux Revealed

Это интересно:

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *