Основное взаимодействие пакетов в Debian

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

8.2 Основное взаимодействие пакетов в Debian

Теперь вооружившись базовым пониманием ландшафта APT, давайте рассмотрим некоторые базовые взаимодействия пакетов, включая инициализацию APT; установку, удаление и очистку пакетов; и модернизацию системы Kali Linux. Затем давайте займемся командной строкой для того, чтобы взглянуть на некоторые графические инструменты APT.

8.2.1 Инициализация APT

APT является обширным проектом и набором инструментов, чьи первоначальные планы включали графический интерфейс. С точки зрения клиента, он сосредоточен вокруг инструмента командной строки apt-get, а также apt, который позднее был разработан для преодоления недостатков дизайна apt-get.

Существуют графические альтернативы, разработанные третьими сторонами, в том числе synaptic и aptitude, которые мы обсудим немного позже. Мы предпочитаем использовать apt, которая будет использована во всех последующих примерах. Однако, мы также подробно изложим некоторые из основных различий синтаксиса между инструментами по мере их возникновения.

При работе с APT вы должны сначала загрузить список доступных пакетов с обновлением apt. В зависимости от скорости вашего подключения это может занять некоторое время, потому что список различных пакетов, список источников и файлы переводов выросли в размере наряду с разработкой Debian. Конечно, сборки для установки с CD/DVD инсталлируются намного быстрее, потому что они являются локальными для вашей машины.

8.2.2 Установка пакетов

Благодаря продуманному дизайну системы пакетов Debian вы можете легко устанавливать пакеты с или без их зависимостей. Давайте посмотрим на установку пакета с помощью dpkg и apt.

8.2.2.1 Установка пакетов с помощью

dpkg является основным инструментом, который вы будете использовать (прямо или косвенно через APT), когда вам нужно установить пакет. Это также отличный выбор, если вы работаете в автономном режиме, поскольку для него не требуется подключение к Интернету. Помните, что dpkg не установит никаких зависимостей, которые могут потребоваться для пакета. Чтобы установить пакет с dpkg, просто укажите параметр -i или -install и путь к .deb. В данном случае подразумевается, что вы ранее загрузили (или получили каким-то другим способом) файл .deb пакета для установки.

# dpkg -i man-db_2.7.0.2-5_amd64.deb
(Reading database ... 86425 files and directories currently installed.)
Preparing to unpack man-db_2.7.0.2-5_amd64.deb ...
Unpacking man-db (2.7.0.2-5) over (2.7.0.2-4) ...
Setting up man-db (2.7.0.2-5) ...
Updating database of manual pages ...
Processing triggers for mime-support (3.58) ...

Мы можем видеть различные шаги, выполняемые dpkg, и соответственно можем видеть, в какой момент может произойти какая-либо ошибка. Параметр -i  или -install  выполняет два этапа автоматически: он распаковывает пакет и запускает сценарии конфигурации. Вы можете выполнить эти два шага самостоятельно (как это обычно делает apt) с параметрами -unpack  и -configure , соответственно:

# dpkg --unpack man-db_2.7.0.2-5_amd64.deb
(Reading database ... 86425 files and directories currently installed.)
Preparing to unpack man-db_2.7.0.2-5_amd64.deb ...
Unpacking man-db (2.7.0.2-5) over (2.7.0.2-5) ...
Processing triggers for mime-support (3.58) ...
# dpkg --configure man-db
Setting up man-db (2.7.0.2-5) ...
Updating database of manual pages ...

Обратите внимание, что строки «Триггеры обработки» относятся к коду, который выполняется автоматически, когда пакет добавляет, удаляет или изменяет файлы в некоторых контролируемых директориях. Например, пакет mime- support контролирует usr/lib/mime/packages и выполняет команду update-mime всякий раз, когда что-то изменяется в этой директории (например, /usr/lib/mime/packages/man-db  в конкретном случае man-db).

Иногда dpkg не сможет установить пакет и выдает ошибку. Тем не менее, вы можете приказать dpkg, игнорировать это, и только выдать предупреждение с различными параметрами -force- * . Вывод команды dpkg —force- help  отобразит полный список этих параметров. Например, вы можете использовать dpkg для принудительной установки zsh:

$ dpkg -i --force-overwrite zsh_5.2-5+b1_amd64.deb

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

Unpacking libgdm (from .../libgdm_3.8.3-2_amd64.deb) ...
dpkg: error processing /var/cache/apt/archives/libgdm_3.8.3-2_amd64.deb (--unpack): trying to overwrite '/usr/bin/gdmflexiserver', which is also in package gdm3 3.4.1-9

В этом случае, если вы считаете, что замена этого файла не является значительным риском для стабильности вашей системы (как правило, это так), вы можете использовать -force-overwrite  для перезаписывания файла.

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

8.2.2.2 Установка пакетов с помощью APT

Хотя APT является намного более продвинутым, чем dpkg, и выполняет гораздо больше работы, вы обнаружите, что его взаимодействие с пакетами довольно простое. Вы можете добавить пакет в систему с помощью простой команды apt install package . APT автоматически установит необходимые зависимости:

# apt install kali-linux-gpu
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  oclgausscrack oclhashcat
The following NEW packages will be installed:
  kali-linux-gpu oclgausscrack oclhashcat
0 upgraded, 3 newly installed, 0 to remove and 416 not upgraded.
Need to get 2,494 kB of archives.
After this operation, 51.5 MB of additional disk space will be used.
Do you want to continue? [Y/n]
Get:1 http://archive-2.kali.org/kali/ kali-rolling/non-free amd64 oclhashcat amd64 2.01+git20160114-0kali2 [2,451 kB]
Get:2 http://archive-2.kali.org/kali/ kali-rolling/main amd64 oclgausscrack amd64 1.3-1kali2 [37.2 kB]
Get:3 http://archive-2.kali.org/kali/ kali-rolling/main amd64 kali-linux-gpu amd64 2016.3.2 [6,412 B]
Fetched 2,494 kB in 0s (3,060 kB/s)
Selecting previously unselected package oclhashcat.
(Reading database ... 317084 files and directories currently installed.)
Preparing to unpack .../0-oclhashcat_2.01+git20160114-0kali2_amd64.deb ...
Unpacking oclhashcat (2.01+git20160114-0kali2) ...
Selecting previously unselected package oclgausscrack.
Preparing to unpack .../1-oclgausscrack_1.3-1kali2_amd64.deb ...
Unpacking oclgausscrack (1.3-1kali2) ...
Selecting previously unselected package kali-linux-gpu.
Preparing to unpack .../2-kali-linux-gpu_2016.3.2_amd64.deb ...
Unpacking kali-linux-gpu (2016.3.2) ...
Setting up oclhashcat (2.01+git20160114-0kali2) ...
Setting up oclgausscrack (1.3-1kali2) ...
Setting up kali-linux-gpu (2016.3.2) ...

Вы также можете использовать apt-get install package , или aptitude install package . Для простой установки пакетов они делают практически то же самое. Как вы увидите позже, отличия будут более заметны по отношению к обновлениям или когда разрешение зависимостей не имеет идеального решения.

Если перечисляет несколько дистрибутивов, вы можете указать версию пакета с помощью apt install package=version , но всегда желательно указать происхождение дистрибутива (kali-rolling , kali-dev , or kali-bleeding- edge ) с помощью apt install package/distribution .

Как и в случае с dpkg, вы можете поручить apt принудительно установить пакет и перезаписать файлы с помощью -force-overwrite, но синтаксис в этом случае будет выглядеть немного странно, поскольку вы передаете аргумент через dpkg:

# apt -o Dpkg::Options::="--force-overwrite" install zsh

8.2.3 Обновление Kali Linux

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

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

Инструмент apt обычно выбирает самый последний номер версии (за исключением пакетов с kali¬bleeding-edge, которые по умолчанию игнорируются независимо от их номера версии).

Чтобы использовать конкретный дистрибутив при поиске обновленных пакетов, вам необходимо использовать параметр -t  или -target-release , за которым следует имя нужного вам дистрибутива (например: apt -t kali-rotting upgrade ). Чтобы избежать указания этой опции каждый раз, когда вы используете apt, вы можете добавить APT :: Default-Release «kali-roll» , в файле /etc/apt/apt.conf.d/local .

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

В отличие от apt и aptitude, apt-get не знает команду full-upgrade . Вместо этого вы должны использовать apt-get dist-upgrade  (обновление дистрибутива), известную команду, которую apt и aptitude также принимают для обратной совместимости.

Будьте всегда в курсе важных изменений

Чтобы предвидеть некоторые из этих проблем, вы можете установить пакет apt-listchanges, который отображает информацию о возможных проблемах в начале обновления пакета. Эта информация собирается составителями пакетов и помещается в /usr/share/doc/package/NEWS.Debian . Внимательное чтение этих файлов (возможно, через apt-listchanges) должно помочь вам избежать неприятных сюрпризов.

Ввиду того, что Kali является rolling дистрибутивом, он получает обновления несколько раз в день. Однако, это не всегда является лучшей стратегией. Итак, насколько часто вам следует обновлять Kali Linux. Безусловно, не существует каких-либо строгих правил, но есть некоторые основные принципы, которые, которые могут помочь вам. Вам следует выполнять обновления в следующих случаях:

  • Когда вам известно о проблеме безопасности, исправленной в обновлении;
  • Если вы подозреваете, что обновленная версия может исправить ошибку, с которой вы столкнулись;
  • Прежде чем сообщать об ошибке для того, чтобы убедиться, что она все еще присутствует в доступной вам последней версии;
  • Достаточно часто, чтобы получить обновления безопасности, о которых вы не слышали.

Также существуют случаи, в которых лучше не выполнять обновление. Например, мы не рекомендуем выполнять обновления в следующих случаях:

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

В общем, мы рекомендуем вам обновлять Kali не реже одного раза в неделю. Вы можете, конечно, обновляться ежедневно, но мы считаем, что это не имеет смысла. Даже если зеркала синхронизируются четыре раза в день, обновления от Debian, обычно поступают только один раз в день.

8.2.4 Удаление и очистка пакетов

Удаление пакета еще проще, чем его установка. Давайте посмотрим, как удалить пакет с помощью dpkg и apt.

Чтобы удалить пакет с помощью dpkg, выставьте параметр -r или -remove, а затем имя пакета. Однако, на этом удаление не завершено: все файлы конфигурации, сценарии поддержки, файлы журналов (системные журналы), данные, созданные демоном (например, содержимое каталога сервера LDAP или содержимое базы данных для SQL-сервера), и большинство других данных пользователя, обрабатываемых пакетом, остаются нетронутыми. Опция remove позволяет легко удалить программу, а затем переустановить ее с той же конфигурацией. Также помните, что зависимости не удаляются. Рассмотрим этот пример:

# dpkg --remove kali-linux-gpu
(Reading database ... 317681 files and directories currently installed.) 
Removing kali-linux-gpu (2016.3.2) ...

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

С помощью добавления суффиксов к именам пакетов вы можете использовать apt (или apt-get и aptitude) для установки определенных пакетов и удаления других в той же командной строке. Используя команду apt install  добавьте «» к имени пакетов, которые вы хотите удалить. С помощью команды apt remove вы можете добавить «+» к имени пакетов, которые вы хотите установить.

Следующий пример показывает два различных способа, установки packagel и удаления package2.

# apt install package1 package2-
[...] 
# apt remove package1+ package2
[...]

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

Для удаления всех данных связанных с каким-либо пакетом, вы можете очистить пакет с помощью команд dpkg -P package , или apt purge package . Эти команды полностью удалят пакет и все данные пользователя, и в случае с apt также удалит и все зависимости.

# dpkg -r debian-cd
(Reading database ... 97747 files and directories currently installed.)
Removing debian-cd (3.1.17) ...
# dpkg -P debian-cd
(Reading database ... 97401 files and directories currently installed.)
Removing debian-cd (3.1.17) ...
Purging configuration files for debian-cd (3.1.17) ...

Предупреждение! Учитывая окончательный характер чистки, дважды подумайте, прежде чем прибегать к нему. Вы потеряете все, что связано с этим пакетом.

8.2.5 Проверка пакетов

Далее, давайте познакомимся с некоторыми инструментами, которые могут быть использованы для проверки пакетов Debian. Мы познакомимся с dpkg, apt, и apt-cache командами,
которые могут использоваться для запроса и визуализации базы данных пакета.

8.2.5.1 Запрос базы данных dpkg и проверка .deb файлов

Начнем с нескольких опций dpkg, которые запрашивают внутреннюю базу данных dpkg. Эта база данных находится в файловой системе в /var/lib/dpkg  и содержит несколько разделов, включая сценарии конфигурации (/var/lib/dpkg/info ), список файлов, в которых установлен пакет (/var/lib/dpkg/info/ *. list ) и статус каждого установленного пакета (/var/lib/dpkg/status ). Вы можете использовать dpkg для взаимодействия с файлами в этой базе данных. Обратите внимание, что большинство параметров доступны как в длинной версии (одно или несколько релевантных слов, которым предшествует двойное тире), так и в короткой (одна буква, которой предшествует тире, чаще всего имеется ввиду начальная буква из одного слова из длинной версии). Это условное обозначение настолько распространено, что оно является стандартом POSIX.

Сначала, давайте рассмотрим пакет -listfiles  (или -L ), в котором перечислены файлы, которые были установлены указанным пакетом:

$ dpkg -L base-passwd
/.
/usr
/usr/sbin
/usr/sbin/update-passwd
/usr/share
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/base-passwd
/usr/share/doc-base
/usr/share/doc-base/users-and-groups
/usr/share/base-passwd
/usr/share/base-passwd/group.master
/usr/share/base-passwd/passwd.master
/usr/share/man
/usr/share/man/pl
/usr/share/man/pl/man8
/usr/share/man/pl/man8/update-passwd.8.gz
[...]
/usr/share/doc
/usr/share/doc/base-passwd
/usr/share/doc/base-passwd/users-and-groups.txt.gz
/usr/share/doc/base-passwd/changelog.gz
/usr/share/doc/base-passwd/copyright
/usr/share/doc/base-passwd/README
/usr/share/doc/base-passwd/users-and-groups.html

Далее, dpkg —search file   (или -S ), находит любые пакеты, которые содержат файл или путь, передаваемый в аргументе. Например, для поиска пакета, который содержит /bin/date :

$ dpkg -S /bin/date
coreutils: /bin/date

Команда dpkg —status package  (или -s ) отображает заголовок установленного пакета. Например, для поиска заголовков пакета coreutils:

$ dpkg -s coreutils
Package: coreutils
Essential: yes
Status: install ok installed
Priority: required
Section: utils
Installed-Size: 13855
Maintainer: Michael Stone <mstone@debian.org>
Architecture: amd64
Multi-Arch: foreign
Version: 8.23-3
Replaces: mktemp, realpath, timeout
Pre-Depends: libacl1 (>= 2.2.51-8), libattr1 (>= 1:2.4.46-8), libc6 (>= 2.17), libselinux1 (>= 2.1.13)
Conflicts: timeout
Description: GNU core utilities
This package contains the basic file, shell and text manipulation
utilities which are expected to exist on every operating system.
.
Specifically, this package includes:
arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp
csplit cut date dd df dir dircolors dirname du echo env expand expr
factor false flock fmt fold groups head hostid id install join link ln
logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup nproc numfmt
od paste pathchk pinky pr printenv printf ptx pwd readlink realpath rm
rmdir runcon sha*sum seq shred sleep sort split stat stty sum sync tac
tail tee test timeout touch tr true truncate tsort tty uname unexpand
uniq unlink users vdir wc who whoami yes
Homepage: http://www.gnu.org/software/coreutils/

Команда dpkg -list  (или -I ) отображает список известных в системе пакетов и их статус установки. Вы также можете использовать grep на выходе для поиска определенных полей или для создания подстановочных символов (например, b *) для поиска пакетов, которые соответствуют определенной части строки поиска. Это покажет сводку пакетов. Например, чтобы показать сводный список всех пакетов, начинающихся с ‘b‘:

$ dpkg -l 'b*'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-=================================
ii  b43-fwcutter   1:019-3      amd64        utility for extracting Broadcom 4
ii  backdoor-facto 3.4.2-0kali1 all          Patch win32/64 binaries with shel
un  backupninja                  (no description available)
un  backuppc                     (no description available)
ii  baobab         3.22.1-1     amd64        GNOME disk usage analyzer
[...]

Команда dpkg —contents file.deb  (или -c ) перечисляет все файлы в конкретном .deb файле:

$ dpkg -c /var/cache/apt/archives/gnupg_1.4.18-6_amd64.deb
drwxr-xr-x root/root         0 2014-12-04 23:03 ./
drwxr-xr-x root/root         0 2014-12-04 23:03 ./lib/
drwxr-xr-x root/root         0 2014-12-04 23:03 ./lib/udev/
drwxr-xr-x root/root         0 2014-12-04 23:03 ./lib/udev/rules.d/
-rw-r--r-- root/root      2711 2014-12-04 23:03 ./lib/udev/rules.d/60-gnupg.rules
drwxr-xr-x root/root         0 2014-12-04 23:03 ./usr/
drwxr-xr-x root/root         0 2014-12-04 23:03 ./usr/lib/
drwxr-xr-x root/root         0 2014-12-04 23:03 ./usr/lib/gnupg/
-rwxr-xr-x root/root     39328 2014-12-04 23:03 ./usr/lib/gnupg/gpgkeys_ldap
-rwxr-xr-x root/root     92872 2014-12-04 23:03 ./usr/lib/gnupg/gpgkeys_hkp
-rwxr-xr-x root/root     47576 2014-12-04 23:03 ./usr/lib/gnupg/gpgkeys_finger
-rwxr-xr-x root/root     84648 2014-12-04 23:03 ./usr/lib/gnupg/gpgkeys_curl
-rwxr-xr-x root/root      3499 2014-12-04 23:03 ./usr/lib/gnupg/gpgkeys_mailto
drwxr-xr-x root/root         0 2014-12-04 23:03 ./usr/bin/
-rwxr-xr-x root/root     60128 2014-12-04 23:03 ./usr/bin/gpgsplit
-rwxr-xr-x root/root   1012688 2014-12-04 23:03 ./usr/bin/gpg
[...]

Команда dpkg —info file.deb  (или -I ) выведет на экран заголовки указанного .deb файла:

$ dpkg -I /var/cache/apt/archives/gnupg_1.4.18-6_amd64.deb
new debian package, version 2.0.
 size 1148362 bytes: control archive=3422 bytes.
    1264 bytes,    26 lines      control
    4521 bytes,    65 lines      md5sums
     479 bytes,    13 lines   *  postinst             #!/bin/sh
     473 bytes,    13 lines   *  preinst              #!/bin/sh
 Package: gnupg
 Version: 1.4.18-6
 Architecture: amd64
 Maintainer: Debian GnuPG-Maintainers <pkg-gnupg-maint@lists.alioth.debian.org>
 Installed-Size: 4888
 Depends: gpgv, libbz2-1.0, libc6 (>= 2.15), libreadline6 (>= 6.0), libusb-0.1-4 (>= 2:0.1.12), zlib1g (>= 1:1.1.4)
 Recommends: gnupg-curl, libldap-2.4-2 (>= 2.4.7)
 Suggests: gnupg-doc, libpcsclite1, parcimonie, xloadimage | imagemagick | eog
 Section: utils
 Priority: important
 Multi-Arch: foreign
 Homepage: https://www.gnupg.org/
 Description: GNU privacy guard - a free PGP replacement
  GnuPG is GNU's tool for secure communication and data storage.
  It can be used to encrypt data and to create digital signatures.
  It includes an advanced key management facility and is compliant
  with the proposed OpenPGP Internet standard as described in RFC 4880.
[...]

Вы также можете использовать dpkg для сравнения версий пакетов с помощью параметра compare-versions , который часто вызывается внешними программами, включая скрипты конфигураций, которые выполняются самим dpkg. Эта опция требует три параметра: номер версии, оператора сравнения и второго номера версии. Существуют различные возможные операторы: It (строго меньше), le (меньше или равно), eq (равно), ne (не равно), ge (больше или равно) и gt (строго больше). Если сравнение правильное, dpkg возвращает 0 (успех); если нет, он дает ненулевое возвращаемое значение (обозначающее отказ). Рассмотрим эти сравнения:

$ dpkg --compare-versions 1.2-3 gt 1.1-4
$ echo $?
0
$ dpkg --compare-versions 1.2-3 lt 1.1-4
$ echo $?
1
$ dpkg --compare-versions 2.6.0pre3-1 lt 2.6.0-1
$ echo $?
1

Обратите внимание на неожиданный сбой последнего сравнения: для dpkg строка «pre» (обычно обозначающая предварительную версию) не имеет конкретного значения, а dpkg просто интерпретирует ее как строку, и в этом случае «2. 6.0pre3-1 «в алфавитном порядке больше, чем» 2.6.0-1 «. Когда мы хотим, чтобы номер версии пакета указывал, что это предварительный релиз, мы используем символ тильды, «~»:

$ dpkg --compare-versions 2.6.0~pre3-1 lt 2.6.0-1
$ echo $?
0

8.2.5.2 Запрос к базе данных на наличие доступных пакетов с помощью apt-cache и apt

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

ТЕРМИНОЛОГИЯ кэша

Кэш является временной системой хранения, используемой для ускорения частого доступа к данным, когда обычный метод доступа является дорогостоящим (по отношению к производительности). Эта концепция может применяться во многих ситуациях и в разных масштабах — от ядра микропроцессоров до высокопроизводительных систем хранения.
 
В случае с APT, ссылочными файлами пакетов являются те, которые расположены на зеркалах Debian. Тем не менее, было бы очень неэффективно проводить каждый поиск через базы данных онлайн-пакетов. Вот почему APT хранит копию этих файлов (в /var/lib/apt/lists/ ), и поиск выполняется в этих локальных файлах. Аналогично, /var/cache/apt/archives/  содержит кэшированную копию уже загруженных пакетов, чтобы избежать их повторной загрузки, если вам нужно переустановить их.
 
Чтобы избежать чрезмерного использования диска при частом обновлении, вы должны регулярно сортировать каталог /var/cache/apt/archives/ . Для этого можно использовать две команды: apt clean  (или apt-get clean ), которая полностью опустошает каталог; apt autoclean  (apt-get autoclean ), которая удаляет только те пакеты, которые больше не могут быть загружены, поскольку они исчезли из зеркала и поэтому являются бесполезными. Обратите внимание, что параметр конфигурации APT :: Clean-Installed  может использоваться для предотвращения удаления файлов .deb, которые в настоящее время установлены. Также обратите внимание, что apt удаляет загруженные файлы после их установки, поэтому это имеет значение, главным образом, во время использования других инструментов.

Команда apt-cache  может выполнять поиск пакетов по ключевым словам с помощью apt-cache search key word . Она также может отображать заголовки доступных версий пакета с помощью apt-cache show package . Эта команда предоставляет описание пакета, его зависимости и название его эксплуатационника. Эта особенность довольно полезна при определении пакетов, которые устанавливаются через метапакеты, такие как kali-linux-wireless , kali-linux-web  и kali-linux-gpu . Обратите внимание, что поиск apt, apt show, aptitude search и aptitude  показывают то же самое.

Альтернативный axi-cache:

Поиск apt-cache  является очень элементарнымм инструментом, в основном реализующим grep в описаниях пакетов. Он часто возвращает слишком много результатов или вообще ничего, когда включено слишком много ключевых слов.
 
С другой стороны axi-cache search term , показывает лучшие результаты, отсортированные по степени важности. Он использует поисковую систему Xapian и является частью пакета apt-xapian-index , который индексирует всю информацию о пакете (и многое другое, например файлы .desktop из всех пакетов Debian). Он знает о тегах и предоставляет результаты через несколько миллисекунд.

$ axi-cache search forensics graphical
5 results found.
Results 1-5:
100% autopsy - graphical interface to SleuthKit
82% forensics-colorize - show differences between files using color graphics
73% dff - Powerful, efficient and modular digital forensic framework
53% gpart - Guess PC disk partition table, find lost partitions
46% testdisk - Partition scanner and disk recovery tool, and PhotoRec file recovery tool
More terms: colorize partitions file disklabel autopsy digital differences
More tags: admin::forensics security::forensics role::program admin::recovery interface::commandline admin::boot scope::utility

Некоторые функции используются более редко. Например, apt-cache policy  отображает приоритеты как источников пакетов, так и отдельных пакетов. Другим примером является apt-cache dumpa vail , который отображает заголовки всех доступных версий всех пакетов. apt-cache pkgnames  отображает список всех пакетов, которые появляются хотя бы один раз в кеше.

8.2.6 Устранение проблем

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

8.2.6.1 Проблемы с обработкой после обновления

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

8.2.6.1.1 Использование отчетов об ошибке

Иногда вы можете обнаружить, что новая версия программного обеспечения вообще не работает. Это обычно происходит, если приложение не особенно популярно и недостаточно проверено. Первое, что нужно сделать, — взглянуть на Kali баг трекер Kali и Debian баг трекер на https://bugs.debian.org/ package, и проверить, сообщил ли кто-то уже об этой проблеме. Если по поводу данной ошибки не поступало никаких отчетов, вам следует составить его самостоятельно (смотри раздел 6.3,»Подача грамотно составленного отчета об ошибке» для получения более детальной информации). Если отчет уже был подан до вас, то важно понимать, что он и все связанные с ним сообщения являются отличным источником информации относительно самой ошибки. В некоторых случаях патч, исправляющий ошибку уже существует и является доступным в самом отчете об ошибке; вы можете перекомпилировать исправленную версию неисправного пакета локально (смотри раздел 9.1, «Изменение пакетов Kali»). В других случаях, пользователи могли найти некий искусный метод или обходной путь для работы с этой проблемой и поделились им в своих ответах к отчету; подобного рода инструкции помогут вам разобраться с возникшей проблемой, пока не выйдет соответствующий патч. В идеале ошибка пакета может быть уже исправлена, и вы можете найти информацию об этом в отчете об ошибке.

8.2.6.1.2 Даунгрейд на предыдущую рабочую версию

Когда проблема представляет собой четкую регрессию (где работала прежняя версия), вы можете попытаться использовать предыдущую версию пакета. В этом случае вам понадобится копия старой версии. Если у вас есть доступ к старой версии в одном из репозиториев, настроенных в APT, вы можете использовать простую однострочную команду для понижения версии (см. Раздел 8.2.2.2, «Установка пакетов с помощью APT»). Но пользуясь Kali rolling вы обычно найдете только одну версию для каждого пакета.

Вы все равно можете попытаться найти старый файл .deb и установить его вручную с помощью dpkg. Старые файлы .deb можно найти в нескольких местах:

  • В кэше APT в /var/cache/apt/archives/
  • В директории pool на нашем обычном зеркале Kali (удаленные и устаревшие пакеты хранятся в течение трех-четырех дней, чтобы избежать проблем с пользователями, не имеющими последних индексов пакета)
  • в http://snapshot.debian.org если поврежденный пакет был предоставлен Debian, а не Kali; эта служба хранит абсолютно все версии пакетов Debian
8.2.6.1.3 Работа с поврежденными сценариями поддержки

Иногда обновление прерывается, потому что один из сценариев поддержки пакета не работает (обычно это postinst). В этих случаях вы можете попытаться диагностировать проблему и, возможно, обойти ее, отредактировав проблемный скрипт.

Здесь мы берем во внимание факт, что сценарий поддержки хранится в /var/lib/dpkg/info/  , и что мы можем просмотреть и изменить его.

Ввиду того, что сценарий поддержки является обычно простым сценарием оболочки, мы можем выставить строчку –x  сразу после строчки shebang  и сделать так, чтобы они запустились повторно (с помощью dpkg —configure -a  для postinst) для того, чтобы четко увидеть, что происходит и в чем заключается ошибка. Этот вывод также может прекрасно дополнять любой отчет об ошибке, который вы можете подавать.

С этими вновь полученными знаниями, вы можете как исправлять основную проблему, так и трансформировать неисправную команду в работающую (например, путем добавления || true в конец строчки).

Обратите внимание, что данная методика не работает в случае сбоя preinst, поскольку этот скрипт выполняется еще до того, как пакет будет установлен, поэтому он еще не находится в конечном месте своего назначения. Он работает для postrm и prerm, хотя вам нужно будет выполнить удаление пакета (и, соответственно, обновление), чтобы запустить их.

8.2.6.2 Лог-файл журнала dpkg

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

# tail /var/log/dpkg.log
2016-12-22 09:04:05 status installed kali-linux-gpu:amd64 2016.3.2
2016-12-22 09:20:07 startup packages remove
2016-12-22 09:20:07 status installed kali-linux-gpu:amd64 2016.3.2
2016-12-22 09:20:07 remove kali-linux-gpu:amd64 2016.3.2 
2016-12-22 09:20:07 status half-configured kali-linux-gpu:amd64 2016.3.2
2016-12-22 09:20:07 status half-installed kali-linux-gpu:amd64 2016.3.2
2016-12-22 09:20:07 status config-files kali-linux-gpu:amd64 2016.3.2
2016-12-22 09:20:07 status config-files kali-linux-gpu:amd64 2016.3.2
2016-12-22 09:20:07 status config-files kali-linux-gpu:amd64 2016.3.2
2016-12-22 09:20:07 status not-installed kali-linux-gpu:amd64

8.2.6.3 Переустановка пакетов с помощью apt —reinstall и aptitude reinstall

Когда вы ошибочно наносите ущерб своей системе, удаляя или изменяя определенные файлы, самым простым способом их восстановления является переустановка поврежденного пакета. К сожалению, система пакетирования обнаруживает, что пакет уже установлен и вежливо отказывается переустанавливать его. Чтобы этого избежать, используйте параметр -reinstall  команд apt и apt-get. Следующая команда переустанавливает postfix, даже если он уже присутствует:

$ apt --reinstall install postfix

Команда aptitude немного отличается, но, тем не менее, она приводит к тому же самому результату, если использовать aptitude reinstall postfix  Команда dpkg не предотвращает переустановку, но ее редко вызывают напрямую.

Не используйте apt —reinstall для того, чтобы восстановиться после атаки

Использование apt —reinstall  для восстановления пакетов, измененных во время атаки, не приведет к восстановлению системы, в том виде, в котором она была до.
 
После атаки вы не можете положиться абсолютно ни на что: dpkg и apt, возможно, были заменены вредоносными программами, и они не будут заниматься переустановкой файлов, как вы, скорее всего, ожидаете. Злоумышленник также мог изменять или создавать файлы вне контроля dpkg.

Также следует помнить, что вы можете указать конкретный дистрибутив с помощью apt, что означает, что вы можете откатиться к более старой версии пакета (если, к примеру, вы уверены, что она будет работать должным образом), при условии, что она по-прежнему доступна в одном из источников, на которые ссылается файл sources.list :

# apt install w3af/kali-rolling

8.2.6.4 Использование -force- * для восстановления поврежденных зависимостей

Если вы были не достаточно осторожным, использование опции -force-*  или каких-либо других
неисправностей может привести к тому, что APT команды будут отказываться выполнять свою привычную функцию в системе. По сути, некоторые из этих параметров позволяют устанавливать пакет, когда зависимость не выполняется, или когда присутствует конфликт. Результатом является непоследовательная система с точки зрения зависимостей, и команды APT откажутся выполнять любое действие, кроме тех, которые вернут систему в согласованное состояние (достижение этой цели часто состоит в установке отсутствующей зависимости или удалении проблемного пакета). Обычно это приводит к сообщению, подобному этому, полученному после установки новой версии rdesktop, игнорируя при этом ее зависимость от более новой версии libc6:

# apt full-upgrade
[...]
You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
rdesktop: Depends: libc6 (>= 2.5) but 2.3.6.ds1-13etch7 is installed
E: Unmet dependencies. Try using -f.

Если же вы являетесь отважным администратором, который уверен в правильности своего анализа, то вы можете игнорировать зависимость или конфликт, и использовать параметр -force- * . В этом случае, если вы хотите продолжать использовать apt или aptitude, вы должны отредактировать /var/lib/dpkg/status , чтобы удалить или изменить зависимость или конфликт, которые вы выбрали для переопределения.

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

8.2.7 Внешние интерфейсы: aptitude и synaptic

APT является программой, работающей на C ++, код которой в основном находится в общей библиотеке libapt-pkg. Как раз именно эта общая библиотека открыла дверь для создания пользовательских интерфейсов (front-ends), поскольку код разделяемой библиотеки можно легко использовать повторно. Исторически, apt-get был разработан только как тестовый интерфейс для libapt-pkg, но ввиду его ошеломляющего успеха, этот факт тщательно умалчивается.

Со временем, несмотря на популярность интерфейсов командной строки, таких как apt и apt-get, были разработаны различные графические интерфейсы. Мы рассмотрим два из этих интерфейсов в этом разделе: aptitude и synaptic.

8.2.7.1 Aptitude

Aptitude, показанный на рис. 8.1, «Менеджер пакетов aptitude» [стр. 191], представляет собой интерактивную программу, которая может использоваться в полуграфическом режиме на консоли. Вы можете просмотреть список установленных и доступных пакетов, просмотреть всю информацию и выбрать пакеты для установки или удаления. Программа разработана специально для использования администраторами, поэтому ее поведение по умолчанию намного более интеллектуально, чем APT, и его интерфейс намного легче понять.

Менеджер пакетов aptitude
Рисунок 8.1 Менеджер пакетов aptitude

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

Во всех случаях aptitude отображает список, объединяющий категории и пакеты на экране. Категории организованы через древовидную структуру, ветви которой можно развернуть или свернуть с помощью клавиши Enter. Клавишу «+» следует использовать для того, чтобы маркировать пакет, который вы хотите установить, «» следует использовать для маркирования пакетов, которые вы хотите удалить, а «_» для их очистки. Обратите внимание, что эти ключи могут также быть использованы для категорий, и в этом случае соответствующие действия будут применяться ко всем пакетам категории. Клавиша u обновляет списки доступных пакетов, в то время как Shift+u подготавливает полное системное обновление. Ключ g переключается на сводный режим просмотра запрошенных изменений (повторный ввод g применит изменения), а ключ q завершает текущее представление. Если вы находитесь в исходном режиме просмотра, то это закроет aptitude.

Документация aptitude

В этом разделе не рассматриваются более тонкие нюансы использования aptitude, он скорее фокусируется на предоставление аварийного пакета пользователя. Aptitude достаточно хорошо документирована и мы рекомендуем использовать полное руководство, которое доступно в пакете aptitude-doc-en.
 

file:///usr/share/doc/aptitude/html/en/index.html

Для поиска пакета вы можете ввести шаблон поиска или следовать ему. Этот шаблон соответствует имени пакета, но может также применяться к описанию (если ему предшествует ~ d ), к разделу (с ~ s ) или другим характеристикам, указанным в документации. Те же шаблоны могут фильтровать список отображаемых пакетов: введите ключ l  (как в limit) и введите шаблон.

Управление автоматической пометкой пакетов Debian (смотри раздел 8.3.4 «Автоматическое отслеживание установленных пакетов») является безумно простым с aptitude. Вы можете просматривать список установленных пакетов и отмечать пакеты как автоматические с помощью Shift + m или вы можете удалить отметку с помощью клавиши m. Автоматические пакеты отображаются с «А» в списке пакетов. Эта функция также предлагает простой способ визуализации пакетов, используемых на машине, без всех библиотек и зависимостей, которые вам абсолютно не нужны. Связанный шаблон, который может быть использован с l  (limit) (для активации режима фильтра) является ~i!~M . Он обозначает, что вы хотите увидеть только установленные пакеты (~i ), не отмеченные как автоматические (!~M ).

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

Большинство особенностей Aptitude доступно через интерактивный интерфейс также как и через командную строку.
 
Эти командные строки покажутся очень знакомыми постоянным пользователям apt-get и apt-cache.
 
Расширенные функции aptitude также доступны в командной строке. Вы можете использовать те же шаблоны поиска пакетов, что и в интерактивной версии. Например, если вы хотите очистить список установленных вручную пакетов, и если вы знаете, что ни одна из локально установленных программ не требует каких-либо конкретных библиотек или модулей Perl, вы можете пометить соответствующие пакеты как автоматические с помощью одной команды:
 

# aptitude markauto '~slibs|~sperl'

 
Здесь вы можете четко увидеть всю силу системы шаблонов поиска aptitude, которая позволяет мгновенно выбирать все пакеты в Tibs и perl разделах.
 
Остерегайтесь случаев, когда некоторые пакеты отмечены как автоматические, но никакие другие пакеты не зависят от них. Такие пакеты будут немедленно удалены (после запроса на подтверждение).

8.2.7.1.1 Управление рекомендациями, предложениями и задачами

Еще одна интересная особенность aptitude заключается в том, что она учитывает рекомендации между пакетами, предоставляя пользователям возможность не устанавливать их в каждом конкретном случае. Например, пакет gnome рекомендует gdebi (среди других). Когда вы выбираете первый для установки, последний также будет выбран (и будет отмечен как автоматический, если он еще не установлен в системе). Ввод g сделает это очевидным: gdebi появляется в окне сводке ожидающих действий в списке пакетов, установленных автоматически для удовлетворения зависимостей. Однако, вы можете решить не устанавливать его, отменив его выбор, прежде чем подтверждать операции.

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

Также учитываются предложения между пакетами, но в соответствии с их конкретным статусом. Например, поскольку gnome предлагает dia-gnome, последний будет отображаться в окне сводки ожидающих действий (в разделе пакетов, предложенных другими пакетами). Таким образом, администратор сможет решить, принимать во внимание это предложение или нет. Поскольку это всего лишь предложение, а не зависимость или рекомендация, пакет не будет выбран автоматически — его выбор требует ручного вмешательства (таким образом, пакет не будет отмечен как автоматический).

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

8.2.7.1.2 Более эффективные алгоритмы

В заключение этого раздела отметим, что aptitude имеет более сложные алгоритмы по сравнению с apt, когда дело доходит до решения сложных ситуаций. Когда запрашивается набор действий и когда эти совместные действия приводят к некогерентной системе, aptitude оценивает несколько возможных сценариев и представляет их в порядке уменьшения важности. Однако, эти алгоритмы не являются надежными. К счастью, всегда есть возможность вручную выбрать действия для выполнения. Когда текущие выбранные действия приводят к противоречиям, в верхней части экрана указывается количество неисправных пакетов (вы можете напрямую перейти к этим пакетам, нажав b). Затем вы можете вручную создать решение. В частности, вы можете получить доступ к различным доступным версиям, выбрав пакет с помощью Enter. Если выбор одной из этих версий решает проблему, вы не должны сомневаться в верности решения и использовать эту функцию. Когда количество сломанных снижается до нуля, вы можете безопасно перейти к окну сводки ожидающих действий для последней проверки перед их применением.

Журнал Aptitude

Как и dpkg, aptitude хранит след выполненных действий в своем файле журнала (/var/log/aptitude ). Однако, поскольку обе команды работают на совершенно разном уровне, вы не можете найти ту же информацию в своих соответствующих файлах журналов. Хотя dpkg регистрирует все операции, выполняемые на отдельных пакетах шаг за шагом, aptitude дает более широкий обзор операций высокого уровня, таких как общесистемное обновление.
 
Но будьте очень внимательны, т.к. этот файл журнала содержит только сводку операций, выполненных aptitude. Если используются другие интерфейсы (или даже сам dpkg), то журнал aptitude будет содержать только частичный вид операций, поэтому вы не можете полагаться на него, чтобы выстроить достоверную историю системы.

8.2.7.2 Synaptic

Synaptic является графическим менеджером пакетов, который имеет чистый и эффективный графический интерфейс (см. Рис. 8.2, «Менеджер пакетов Synaptic») на основе GTK + и GNOME. В нем существует множество готовых к использованию фильтров, которые обеспечивают быстрый доступ к новым пакетам, установленным пакетам, обновляемым пакетам, устаревшим пакетам и т. д. Если вы просматриваете эти списки, вы можете выбрать операции, которые должны выполняться в пакетах (установка, обновление, удаление, очищение); эти операции выполняются не сразу, но они заносятся в список задач. Один щелчок на кнопке запускает проверку операции, и они выполняются сразу же.

Менеджер пакетов synaptic
Рисунок 8.2 Менеджер пакетов synaptic

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

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

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

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