Product SiteDocumentation Site

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

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

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

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

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

С помощью APT пакеты могут быть добавлены или удалены из системы командами apt install пакет and apt remove пакет соответственно. В обоих случаях APT автоматически установит необходимые пакеты, от которого зависит данный, или удалит пакеты, которые зависят от удаляемого пакета. Команды apt purge пакет вызывают полное удаление — файлы настройки также будут удалены.
Если в файле sources.list упоминается несколько дистрибутивов, можно задать версию пакета для установки. Номер версии может быть запрошен, используя apt install packet= version, с указанием происхождения (Stable, Testing или Unstable) — apt install package/distribution — обычно предпочтительно. Используя эту команду можно вернуться к старой версии пакета (если например вы знаете, что она работает хорошо), при условии, что он по-прежнему доступен в одном из источников, на которые ссылается файл sources.list. В противном случае может помочь архив snapshot.debian.org (см. УГЛУБЛЯЕМСЯ Старые версии пакетов: snapshot.debian.org).

Пример 6.3. Установка unstable версии spamassassin

# apt install spamassassin/unstable

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 также принимают эту историческую и хорошо известную команду для удобства тех пользователей, которые привыкли пользоваться ей.

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

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

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

Один из многих важных аспектов в конфигурировании APT-а является управление приоритетами, ассоциироваными с каждым исходным пакетом. Для примера, ты можешь захотеть расширить дистибутив (к примеру стабильный - Stable) одним или двуми пакетами из других дистибутивов тестируемый (Testing) , нестабильный (Unstable) или экспериментальный (Experimental) . В этом случае имеется возможность определить приоритеты каждого доступного пакета (некоторые пакеты могут иметь свои приоритеты зависимостей к их версии или распространение -дистрибьютор предоставляет это). Те приоритеты будут влиять на поведение APT-а: для каждого пакета всегда будет выбираться версия с высочайшим приоритетом (кроме случаев, когда версия более старая, чем установлена в системе такая же и если его приоритет - меньше чем 1000).
APT определяет свои приоритеты по умолчанию. Каждая версия устанавливаемого пакета имеет приоритер 100. Не установленная версия имеет приоритет 500 по умолчанию, но это может прыгнуть (измениться) до 990 если это есть часть целевого (выпускаемого) релиза (определяется с -t опция командной строки или APT::Default-Release конфигурирование указание).
Ты можешь изменить (модифицировать) приоритеты путем дополнения записей в /etc/apt/preferences файл с именами затрагиваемых пакетов, их версия, оригинальные (первоначальные) и их новые приоритеты.
APT никогда не установит устаревшую версию пакета (то есть если версия устанавливаемого пакета ниже чем уже установленный в настоящий момент в системе). Исключение составляет случай если приоритет устанавливаемого пакета выше чем 1000. APT будет всегда устанавливать пакет с наивысшим приоритетом, делая это под давлением (в случаях - как описано выше в качестве исключения). Если два пакета имеют одинаковый приоритет, то APT установит более новую версию пакета (чей номер версии выше. Например- версии 0.6.8 и 0.6.9 - будет установлена 0.6.9). Если два пакета с одинаковой версией имеют равные приоритеты, но отличаются по своему содержанию, то APT установит ту версию, что еще не была установлена ранее (это правило было создано чтобы учесть случай обновления пакета без приращения номера ревизии-версии. Как правило при замене одного пакета на другой APT-ом происходит увеличение номера версии).
Были выработаны реальные условия соглашения по приоритетам устанавливаемых пакетов: - Если приоритет меньше 0 - пакет не будет установлен. - Если приоритет находится в интервале от 0 до 100 - пакет будет установлен только в случае - если нет других версий пакета в настоящее время уже имеющихся в системе. - Если приоритет находится в интервале от 100 до 500 - пакет будет установлен только в случаях: 1) если в настоящее время в системе не установлен другой пакет более новой версии; 2) нет годного пакета в другом дистибутиве. - Если приоритет находится в интервале от 501 до 990 - пакет будет установлен только в случаях: 1) если в настоящее время в системе не установлена новейшая версия; 2) нет годного пакета в репозитории (хранилище) целевого дистибутива. - Если приоритет находится в интервале от 990 до 1000 - пакет будет установлен как исключение - если устанавливаемая версия является новейшей. - Если приоритет превышает 1000 - это приведет к тому - что пакет всегда будет установлен, несмотря на то, что будет установлена версия более старая - чем имеется в настоящий момент в системе (то есть APT сделает это принудительно, против своих правил).
Когда APT проверяет /etc/apt/preferences, он сначала принимает во внимание наиболее специфичные (то есть особенные, характерные) указания (часто это указания соответствующего пакета). Затем проверяет и более обычные указания (включая для примера все пакеты дистибутива). Если существует несколько общих записей, используется первая подходящая. Каждый исходный пакет идентифицируется через информацию, содержащуюся в файле Release, что APT получил из репозитория (хранилища) вместе с файлами Packages. Это точно определяет источник (обычно “Debian” для пакетов из официальных источников - репозиториев (хранилищ), но это может быть также имя определенного лица или организации для сторонних репозиториев). Это также дает имя дистибутива (обычно Стабильный (Stable), Тестируемый (Testing), Нестабильный (Unstable) or Экспериментальный (Experimental) для стандартных дистибутивов, поддерживаемых Debian-ом) вместе с его версией (для примера 8 для Debian-а Название - Jessie). Давайте рассмотрим его синтаксис на практических примерах изучения этого механизма.
Давайте предположим что вы хотите использовать пакеты только из стабильной (Stable) версии Debian-а. Пакеты из других версий (testing, unstable, experimental) не будут установлены, за исключением случаях - когда пользователь явно это запросит. Ты можешь записать следующие строчки в /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.14 программы Perl. Вы хотите быть увереными, что обновление (upgrade) не установит другие версии этой программы. Для этого Вы можете использовать следующую запись:
Package: perl 
Pin: version 5.14*
Pin-Priority: 1001
Справочную документацию для этого конфигурационного файла можно посмотреть в странице руководстве (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 (смотри вкладку СОВЕТ apt-cache policy) для проверки данных приоритетов.
Все концентрируется вокруг того факта, что APT только принимает во внимание пакеты выше или эквивалентной (равной) версии, которые установлены (беря на себя ответственность за то, что /etc/apt/preferences не будет использоваться для принудительного повышения приоритета выше значения 1000 для некоторых пакетов).
Давайте предположим, что вы установили версию 1 первого пакета из Стабильный (Stable) и что версии 2 и 3 есть доступны (в указанном порядке) в Тестируемый (Testing) and Нестабильный (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 будет избавляться (удалит) эти, ненужные более, пакеты. aptitude и apt не имеют этой команды. Предыдущая команда автоматически удалит те пакеты, как только они будут идентифицированы. И последнее - в тех командах нет такой возможности - возможно потому, что пользователь не может вручную выполнить эту команду. Во всех случаях средства (эти три команды) отобразят четкое сообщение, перечисляющее затрагивающие пакеты.
Это есть хорошая привычка помечать как автоматически устанавливаемые любые пакеты, в которых вы не нуждаетесь немедленно. Поэтому данные пакеты в дальнейшем автоматически будут удалены, когда в них отпадет необходимость. apt-mark auto package будет отмечать данный пакет как автоматически установленный несмотря на то, что apt-mark manual package делает противоположное. aptitude markauto и aptitude unmarkauto работают одинаковым образом, хотя они предлагают больше возможностей чтобы отметить много пакетов одновременно (see Раздел 6.4.1, «программа aptitude»). Не графический, а интерактивный интерфейс команды aptitude в консоле (терминале) также может быстро просмотреть у каких пакетов установлен флаг (отметка) “automatic flag”.
Люди могут хотеть знать почему автоматически установленные пакеты присутствуют в системе. Для получения это информации из командной строки, вы можете использовать aptitude why пакет (apt и apt- get имеют непохожие особенности):
$ aptitude why
python-debian
i aptitude
Рекомендации apt-xapian-index 
i A apt-xapian-index Зависимости python-debian (>= 0.1.15)