Product SiteDocumentation Site

6.2. Команды aptitude, apt-get и apt

APT — это обширный проект, первоначальные планы которого включали графический интерфейс. Он основан на библиотеке, которая содержит основное приложение и apt-get — это первый интерфейс командной строки, который был разработан в рамках проекта. apt — второй интерфейс командной строки, предоставляемый APT, который устраняет некоторые ошибки проектирования apt-get.
Оба инструмента созданы на основе одной и той же библиотеки и поэтому очень близки, но поведение по умолчанию для команды apt было улучшено для интерактивного использования и позволяет фактически делать то, что ожидает большинство пользователей. Разработчики APT оставляют за собой право изменять публичный интерфейс этого инструмента для его дальнейшего улучшения. И наоборот, общедоступный интерфейс apt-get четко определён и не будет изменён каким-либо образом, несовместимым с предыдущими версиями. Таким образом, это инструмент, который вы хотите использовать, когда вам нужно создать сценарий запросов на установку пакетов.
Большое число графических интерфейсов появилось позже как внешние проекты: synaptic, aptitude (который включает и текстовый интерфейс, и графический — хоть и не завершённый до сих пор), wajig, и т.д. Наиболее рекомендуемый интерфейс, apt, мы будем использовать в примерах, приведённых в этом разделе. Обратите внимание, что apt-get и aptitude имеют весьма схожий синтаксис командной строки. В случае, когда существуют значительные различия между этими тремя командами, то это будет разобрано более подробно.

6.2.1. Инициализация

При необходимости работы с APT должен быть обновлён список доступных пакетов; это просто сделать с помощью команды apt update. В зависимости от скорости вашего соединения, эта операция может занять достаточно времени, поскольку она включает загрузку определённого числа Packages/Sources/Translation-language-code файлов, которые постепенно становятся всё больше и больше в процессе разработки Debian (по меньшей мере 10-16 МБ данных для секции main). Конечно, установка из комплекта CD-ROM/DVD не требует никакой загрузки — в этом случае операция является очень быстрой.

6.2.2. Установка и удаление

С помощью APT пакеты могут быть добавлены или удалены из системы командами apt install пакет и apt remove пакет соответственно. В обоих случаях APT автоматически установит или удалит необходимые пакеты, от которых зависит данный пакет. Команда apt purge пакет вызывают полное удаление — файлы настройки также будут удалены.
If the file sources.list mentions several distributions, it is possible to give the version of the package to install. A specific version number can be requested with apt install package=version, but indicating its distribution of origin (Stable, Testing or Unstable) — with apt install package/distribution — is usually preferred. With this command, it is possible to go back to an older version of a package (if, for instance, you know that it works well), provided that it is still available in one of the sources referenced by the sources.list file. Otherwise the snapshot.debian.org archive can come to the rescue (see sidebar УГЛУБЛЯЕМСЯ Старые версии пакетов: snapshot.debian.org и archive.debian.org).

Пример 6.4. Установка Unstable версии spamassassin

# apt install spamassassin/unstable
Если пакет для установки был доступен вам в форме простого файла .deb без какого-либо связанного репозитория пакетов, всё равно можно использовать APT для его установки вместе с его зависимостями (при условии, что зависимости доступны). В настроенных репозиториях с помощью простой команды: apt install ./path-to-the-package.deb. Ведущий ./ важен, чтобы было понятно, что мы имеем в виду имя файла, а не имя пакета, доступного в одном из репозиториев.

6.2.3. Обновление системы

Регулярные обновления рекомендуется, поскольку они включают последние обновления системы безопасности. Для обновления, используйте apt upgrade, apt-get upgrade или aptitude safe-upgrade (конечно после использования apt update). Эта команда ищет установленные пакеты, которые можно обновить, не удаляя какие-либо пакеты. Другими словами, цель состоит в том, чтобы обеспечить наименее интрузивное обновление. Команда apt-get является немного более требовательной, чем aptitude или apt потому что она не будет устанавливать пакеты, которые не были установлены до этого.
apt обычно будет выбирать последние версии (за исключением пакетов из Experimental и stable-backports, которые игнорируются независимо от номера версии). Если вы указали Testing или Unstable в своем sources.list, apt upgrade переключит большую часть вашей системы со Stable на Testing или Unstable, что может быть не тем, чего вы ожидали.
Чтобы apt искал обновлённые версии пакетов для определённого дистрибутива, используйте опцию -t или --target-release. После опции надо указать название выбранного вами дистрибутива (например: apt -t stable upgrade). Чтобы не указывать эту опцию каждый раз, когда вы используете apt, вы можете добавить APT::Default-Release "stable"; в файл /etc/apt/apt.conf.d/local.
Для более важных обновлений, таких как переход от одной основной версии Debian к следующей, вы должны использовать apt full-upgrade. С помощью этой инструкции apt выполнит обновление, при этом он удалит некоторые устаревшие пакеты и установит новые зависимости. Также эта команда используется пользователями, которые ежедневно работают с Unstable выпуском Debian и следят за его развитием день за днем. Это так просто, что вряд ли нуждается в объяснении: репутация APT основана на большой функциональности.
В отличие от apt и aptitude, apt-get не знает команды full-upgrade. Вместо этого, вы должны использовать apt-get dist-upgrade («обновление дистрибутива»). apt и aptitude также принимают эту историческую и хорошо известную команду для удобства тех пользователей, которые привыкли пользоваться ей.
Результаты этих операций записываются в /var/log/apt/history.log и /var/log/apt/term.log, тогда как dpkg хранит свой журнал в файле с именем /var/log/dpkg.log.

6.2.4. Параметры конфигурации

Кроме уже упомянутых деталей конфигурации, можно сделать дополнительную настройку APT. Для этого надо внести дополнительные параметры в файл , расположенный в каталоге /etc/apt/apt.conf.d/ или в сам файл /etc/apt/apt.conf. Помните, что APT может указать dpkg игнорировать конфликты файлов, установив DPkg::options { "--force-overwrite"; }.
Если доступ в интернет осуществляется через прокси, добавьте строку подобную этой Acquire::http::proxy "http://yourproxy:3128". Для FTP-прокси запишите Acquire::ftp::proxy "ftp://yourproxy". Чтобы узнать более об опциях конфигурации читайте руководства и ман apt.conf(5) (подробнее о манах читайте Раздел 7.1.1, «Страницы руководств»).

6.2.5. Управление приоритетами пакетов

Один из многих важных аспектов в конфигурировании APT-а является управление приоритетами, ассоциированными с каждым исходным пакетом. Для примера, ты можешь захотеть расширить дистрибутив одним или двумя пакетами из Testing , Unstable или Experimental. В этом случае имеется возможность определить приоритеты каждого доступного пакета (один и тот же пакет может иметь несколько приоритетов в зависимости от его версии или предоставляющего его дистрибутива). Эти приоритеты будут влиять на поведение APT-а: для каждого пакета всегда будет выбираться версия с высочайшим приоритетом (кроме случаев, когда версия более старая, чем установлена в системе такая же и если его приоритет - меньше чем 1000).
APT определяет свои приоритеты по умолчанию. Каждая версия устанавливаемого пакета имеет приоритет 100. Неустановленная версия имеет приоритет 500 по умолчанию, но это может измениться до 990 если это есть часть целевого (выпускаемого) релиза (определяется опцией командной строки -t или конфигурационной директивой APT::Default-Release.
Ты можешь изменить (модифицировать) приоритеты путем дополнения записей в каталоге /etc/apt/preferences.d/ или в файле /etc/apt/preferences с именами затрагиваемых пакетов, их версий, их оригинальных (первоначальных) и новых приоритетов.
APT никогда не будет устанавливать более старую версию пакета (то есть пакет, номер версии которого ниже, чем у установленного в данный момент пакета), за исключением случаев, когда его приоритет выше 1000 (или он явно запрошен пользователем, см. Раздел 6.2.2, «Установка и удаление»). APT всегда будет устанавливать пакет с наивысшим приоритетом, соответствующий этому ограничению. Если два пакета имеют одинаковый приоритет, APT устанавливает самый новый пакет (номер версии которого самый высокий). Если два пакета одной и той же версии имеют одинаковый приоритет, но различаются по содержимому, APT устанавливает неустановленную версию (это правило создано для случая обновления пакета без увеличения номера ревизии, что обычно требуется).
Говоря более конкретно, пакет, приоритетом которого является
< 0
никогда не будет установлен,
1..99
будет установлен только в том случае, если другая версия пакета ещё не установлена,
100..499
будет установлен только в том случае, если в другом дистрибутиве не установлена или не доступна другая более новая версия,
500....989
будет установлен только в том случае, если в целевом дистрибутиве не установлена или не доступна более новая версия,
990..1000
будет установлен, за исключением случаев, когда установленная версия более новая,
> 1000
всегда будет установлена, даже если это заставит APT заменить пакет на более старую версию.
Когда APT проверяет /etc/apt/preferences и /etc/apt/preferences.d/, он сначала принимает во внимание наиболее специфичные записи (часто те, которые указывают на соответствующий пакет), затем более общие (включающие, к примеру, все пакеты дистрибутива). Если существует несколько общих записей, используется первое совпадение. Доступные критерии выбора включают имя пакета и источник, предоставляющий его. Каждый источник пакета идентифицируется информацией, содержащейся в файле Release, который APT загружает вместе с файлами Packages. Также этот файл указывает на происхождение (обычно «Debian» для пакетов официальных зеркал, но также может быть имя человека или название организации для сторонних репозиториев). Дополнительно указывается название дистрибутива (обычно Stable, Testing, Unstable или Experimental для стандартных дистрибутивов, поддерживаемых Debian) вместе с его версией (к примеру 11 для Debian-а Bullseye). Давайте рассмотрим синтаксис этого файла на практических примерах изучения этого механизма.
Давайте предположим, что вы хотите использовать пакеты только из stable версии Debian. Те, что предусмотрены в других версиях, не следует устанавливать, за исключением случаев, когда это явно запрошено. Вы можете написать следующие записи в файл /etc/apt/preferences:
Package: * 
Pin: release a=stable
Pin-Priority: 900

Package: *
Pin: release o=Debian
Pin-Priority: -10
a=stable определяем имя выбранного дистибутива (stable-стабильный). o=Debian ограничиваем результаты поиска только пакетами чей оригинал (происхождение) есть “Debian”.
Давай сейчас предположим что у вас имеется сервер с различными локальными программами, зависящими от версии 5.28 программы Perl. Вы хотите быть уверенными, что обновление (upgrade) не установит другие версии этой программы. Вы можете использовать следующую запись:
Package: perl
Pin: version 5.28*
Pin-Priority: 1001
Чтобы лучше понять механизмы приоритета и распределения или свойства репозитория, которые нужно закрепить, не стесняйтесь выполнить apt-cache policy для отображения приоритета по умолчанию, связанного с каждым источником пакета, или apt-cache policy package для отображения приоритета по умолчанию для каждой доступной версии и источника пакета, как описано в разделе Раздел 6.3.1, «The apt-cache policy Command».
Справочную документацию для конфигурационных файлов /etc/apt/preferences и /etc/apt/preferences.d/ можно посмотреть в странице руководстве (man) apt_preferences(5), выполнив в терминале man apt_preferences.

6.2.6. Работа с несколькими дистрибутивами

apt замечательный инструмент и возникает соблазн выбрать пакеты из других дистрибутивов. Например, после установки Stable, вы можете захотеть попробовать программный пакет годный в других дистрибутивах - Testing или Unstable не слишком сильно отклоняясь от исходного состояния системы.
Даже если вы время от времени будете сталкиваться с проблемами при смешивании пакетов из разных дистрибутивов, apt очень хорошо управляет таким сосуществованием и очень эффективно ограничивает риски. Лучший способ продолжить — перечислить все дистрибутивы, используемые в /etc/apt/sources.list. Некоторые люди всегда помещают три дистрибутива, но запомни, что Unstable предназначен для опытных пользователей. И дополнительно установить значение предпочтительного дистрибутива APT::Default-Release параметром (см. Раздел 6.2.3, «Обновление системы»).
Давайте предположим, что Stable является вашим рекомендованным (установленным) дистрибутивом, однако строки Testing и Unstable также перечислены в вашем sources.list файле. В этом случае, вы можете использовать apt install пакет/testing для установки пакета из Testing. Если в процессе установки будут возникать ошибки - из-за неудовлетворенных зависимостей, позвольте решение этих зависимостей внутри Testing через добавление параметра -t testing. Это очевидно, что аналогично надо поступить и по отношению к Unstable.
В этой ситуации, обновление пакетов (upgrade и full-upgrade) делаются внутри Stable за исключением пакетов, уже обновленных до другого дистрибутива: они будут следовать за обновлениями, доступными в других дистрибутивах. Мы объясним это поведение с помощью приоритетов по умолчанию устанавливаемых APT ниже. Не стесняйтесь использовать apt-cache policy (Раздел 6.3.1, «The apt-cache policy Command») для проверки данных приоритетов.
Все упирается в то, что APT учитывает только пакеты более высокой или равной версии, чем установленный (при условии, что /etc/apt/preferences не будет использоваться для принудительного повышения приоритета выше значения 1000 для некоторых пакетов).
Давайте предположим, что вы установили версию 1 первого пакета из Stable и что версии 2 и 3 есть доступны (в указанном порядке) в Testing и Unstable. Установленная версия имеет приоритет 100, но доступная версия в Stable (этот же пакет) имеет приоритет 990 (потому что это часть выпускаемого релиза - дистрибутива). Пакеты в Testing and Unstable имеют приоритеты 500 (по умолчанию - приоритет неустановленной версии). Победителем будет версия 1 с приоритетом 990. Пакет - “расположенный в Stable”.
Давайте возьмем пример другого пакета, чья версия 2 была установлена из Testing. Версия 1 доступна в Stable а версии 3 в Unstable. Версия 1 (чей приоритет 990 — таким образом ниже чем 1000) отбрасывается потому что её номер (ниже) меньше чем установленная версия (1 меньше 2). Таким образом разрешенные версии только 2 и 3, обе с приоритетом 500. Встретившись с такой ситуацией APT выберет новейшую версию (то есть 3), что находится в Unstable. Если вы не хотите чтобы ваш пакет, установленный из Testing мигрировал (изменился) в Unstable версию, вы должны назначить приоритет ниже, чем 500 (490 для примера) для пакетов, приходящих из Unstable. Для этого вы можете модифицировать /etc/apt/preferences:
Package: * 
Pin: release a=unstable
Pin-Priority: 490

6.2.7. Трекинг автоматически устанавливаемых пакетов

Одной из важных функций команды apt является трекинг (отслеживание) пакетов, которые устанавливаются только с зависимостями (эти пакеты не установятся без взаимосвязанных с ними пакетов). Зависимости - это пакеты, помечаемые как “автоматические”, и часто включающие в себя библиотеки.
Используя эту информацию, когда пакеты удаляются, менеджеры пакетов могут вычислить список автоматических пакетов, которые больше не нужны (поскольку от них не зависят пакеты, «установленные вручную»). apt-get autoremove или apt autoremove удалят эти ненужные пакеты. aptitude не имеет этой команды, поскольку она удаляет их автоматически, как только они идентифицируются. Во всех случаях инструменты отображают чёткое сообщение со списком затронутых пакетов.
Хорошая привычка — отмечать как автоматические любые пакеты, которые вам не нужны напрямую, чтобы они автоматически удалялись, когда они больше не нужны. apt-mark auto package будет отмечать данный пакет как автоматически установленный несмотря на то, что apt-mark manualpackage делает противоположное. aptitude markauto и aptitude unmarkauto работают одинаковым образом, хотя они предлагают больше возможностей чтобы отметить много пакетов одновременно (см. Раздел 6.5.1, «программа aptitude»). Консольный интерактивный интерфейс aptitude также позволяет легко просмотреть «автоматический флаг» во многих пакетах.
Людям может быть интересно узнать, почему в системе присутствует автоматически установленный пакет. Чтобы получить эту информацию из командной строки, вы можете использовать aptitude why пакет (apt и apt- get имеют непохожие особенности):
$ aptitude why python3-debian
i   aptitude         Suggests apt-xapian-index
p   apt-xapian-index Depends  python3-debian (>= 0.1.14)

6.2.8. APT шаблоны

Шаблоны позволяют вам задавать сложные поисковые запросы для выбора пакетов, которые вы хотите установить или отобразить. Впервые они были реализованы для aptitude (см. Раздел 6.5, «Графические оболочки: aptitude, synaptic»), но теперь APT также может их использовать.
Например, мы можем использовать команду apt list ?automatic для вывода списка всех автоматически установленных пакетов. Чтобы найти автоматически установленные пакеты, от которых больше не зависят пакеты, установленные вручную, можно использовать команду шаблона ?garbage.
Логические шаблоны можно комбинировать с другими пакетами для формирования более сложных выражений. Например, мы могли бы использовать такой шаблон, как ?and(PATTERN, PATTERN). См. apt-patterns(7) и glob(7) для всех шаблонов, которые вы можете использовать, и сложных выражений, которые вы можете создать с их помощью.