6.2. Команды aptitude
, apt-get
и apt
APT — это обширный проект, первоначальные планы которого включали графический интерфейс. Он основан на библиотеке, которая содержит основное приложение и
apt-get
— это первый интерфейс командной строки, который был разработан в рамках проекта.
apt
— второй интерфейс командной строки, предоставляемый APT, который устраняет некоторые ошибки проектирования
apt-get
.
Оба инструмента созданы на основе одной и той же библиотеки и поэтому очень близки, но поведение по умолчанию для команды apt
было улучшено для интерактивного использования и позволяет фактически делать то, что ожидает большинство пользователей. Разработчики APT оставляют за собой право изменять публичный интерфейс этого инструмента для его дальнейшего улучшения. И наоборот, общедоступный интерфейс apt-get
четко определён и не будет изменён каким-либо образом, несовместимым с предыдущими версиями. Таким образом, это инструмент, который вы хотите использовать, когда вам нужно создать сценарий запросов на установку пакетов.
Большое число графических интерфейсов появилось позже как внешние проекты: synaptic
, aptitude
(который включает и текстовый интерфейс, и графический — хоть и не завершённый до сих пор), wajig
, и т.д. Наиболее рекомендуемый интерфейс, apt
, мы будем использовать в примерах, приведённых в этом разделе. Обратите внимание, что apt-get
и aptitude
имеют весьма схожий синтаксис командной строки. В случае, когда существуют значительные различия между этими тремя командами, то это будет разобрано более подробно.
For any work with APT, the list of available packages needs to be updated; this can be done simply through apt update
. Depending on the speed of your connection and configuration, the operation can take a while, since it involves downloading a certain number of (usually compressed) files (Packages
, Sources
, Translation-language-code
), which have gradually become bigger and bigger as Debian has developed (at least 14-18 MB of data for the main
section). Of course, installing from a CD-ROM/DVD set does not require any downloading — in this case, the operation is very fast.
6.2.2. Установка и удаление
With APT, packages can be added or removed from the system, respectively with apt install package
and apt remove package
. In both cases, APT will automatically install the necessary dependencies or delete the packages which depend on the package that is being removed. The apt purge package
command involves a complete uninstallation by deleting the configuration and data files as well.
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
If the package to install has been made available to you under the form of a simple .deb
file without any associated package repository, it is still possible to use APT to install it together with its dependencies (provided that the dependencies are available in the configured repositories) with a simple command: apt install ./path-to-the-package.deb
. The leading ./
is important to make it clear that we are referring to the name of a file and not to the name of a package available in one of the repositories.
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 заменить пакет на более старую версию.
When APT checks /etc/apt/preferences
and /etc/apt/preferences.d/
, it first takes into account the most specific entries (often those specifying the concerned package), then the more generic ones (including, for example, all the packages of a distribution). If several generic entries exist, the first match is used. The available selection criteria include the package's name and the source providing it. Every package source is identified by the information contained in a Release
file that APT downloads together with the Packages
files. It specifies the origin (usually “Debian” for the packages of official mirrors, but it can also be a person's or an organization's name for third-party repositories). It also gives the name of the distribution (usually Stable, Testing, Unstable or Experimental for the standard distributions provided by Debian) together with its version (for example, 12 for Debian Bookworm). Let's have a look at its syntax through some realistic case studies of this mechanism.
Давайте предположим, что вы хотите использовать пакеты только из stable версии Debian. Те, что предусмотрены в других версиях, не следует устанавливать, за исключением случаев, когда это явно запрошено. Вы можете написать следующие записи в файл /etc/apt/preferences
:
a=stable
определяем имя выбранного дистибутива (stable-стабильный). o=Debian
ограничиваем результаты поиска только пакетами чей оригинал (происхождение) есть “Debian”.
Let's now assume that you have a server with several local programs depending on the version 5.32 of Perl and that you want to ensure that upgrades will not install another version of it. You could use this entry:
Чтобы лучше понять механизмы приоритета и распределения или свойства репозитория, которые нужно закрепить, не стесняйтесь выполнить
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 python3-reportbug Depends python3-debian
Например, мы можем использовать команду apt list ?automatic
для вывода списка всех автоматически установленных пакетов. Чтобы найти автоматически установленные пакеты, от которых больше не зависят пакеты, установленные вручную, можно использовать команду шаблона ?garbage
.
Логические шаблоны можно комбинировать с другими пакетами для формирования более сложных выражений. Например, мы могли бы использовать такой шаблон, как ?and(PATTERN, PATTERN)
. См. apt-patterns(7) и glob(7) для всех шаблонов, которые вы можете использовать, и сложных выражений, которые вы можете создать с их помощью.