Управление deb-пакетами. Утилита apt: без излишеств

Алексей Федорчук

Утилита apt появилась в одноимённом семействе чуть больше полутора лет назад, и с тех пор так и не снискала известности, хотя включает в себя большинство употребимых функций сладкой парочки apt-get и apt-cache. Возможно, потому, что при её запуске по сей день выдаётся устрашающее предупреждение:

WARNING: apt does not have a stable CLI interface yet. Use with caution in scripts.

Я применяю утилиту apt с момента её появления на свет — ибо, по моему скромному ИМХОванию, одна короткая и универсальная команды лучше двух длинных и специализированных. И за это время ничего нестабильного в ней не заметил. А вот различия в умолчальном поведении между apt и apt-get — есть. Первая норовит установить не только жёсткие зависимости пакета (depends), но и рекомендованные (recommends), чего вторая по умолчанию не делает.

Это легко показать на конкретном примере. Например, в ответ на

$ sudo apt install xsane

последует сообщение о том, что заодно будет установлен и gimp сотоварищи, типа gimp-data, тогда как команда

$ sudo apt-get install xsane

ограничится добавлением пакета libgimp.

Эта особенность утилиты apt, насколько я знаю, не документирована. Как и то, что она способна воспринимать опции, не описанные в man apt. В частности, некоторые (а возможно, и все — руки не дошли проверить) опции «полноразмерной» утилиты apt-get. В частности, опцию --no-install-recommends, принудительно запрещающую установку рекомендаций. То есть команда

$ sudo apt install --no-install-recommends xsane

по своим последствиям будет эквивалентна команде

$ sudo apt-get install xsane

Предвижу возражение, что первая команда ещё длинней второй. Однако никто не заставляет набирать её полностью — особенно если вспомнить о методах интеграции apt и zsh. То есть достаточно добавить в файл ~/.zshrc такое определение глобального псевдонима:

alias -g in='install --no-install-recommends'

чтобы свести приведённую громоздкую конструкцию к тому же простому apt in, о котором говорится в заметке по последней ссылке.

Недокументированные опции команды apt вкупе с механизмом глобальных псевдонимов Zsh можно использовать для расширения её функционала. Например, добавив в ~/.zshrc строку

alias -g rp='remove --purge'

можно получить полный аналог субкоманды purge для apt-get. Вероятно,если покумекать, можно найти и другие полезные комбинации «тайных» опций apt и явных Global alias из Zsh. Но мне пока хватило и приведённых.

Управление deb-пакетами. Утилита apt: без излишеств: 12 комментариев

  1. В обоих случаях при написании примера с командой apt-get $ sudo apt install xsane
    -get отсутствует.

  2. Случайно наткнулся на ваш блог, не нашел вкладку «Обо мне» , а было бы интересно. Из контекста удалось понять только то что вы пишете для Linux Format, но я его редко читаю, да и при засилии в нем индийских фамилий как то не заморчиваюсь на авторах.

  3. >То есть команда
    >$ sudo apt install —no-install-recommends xsane
    >по своим последствиям будет эквивалентна команде
    >$ sudo apt-get install xsane

    Вроде бы, надо наоборот:
    apt install xsane
    apt-get —no-install-recommends xsane

  4. Дмитрий, нет, в apt-get опция —no-install-recommends — умолчальная, в apt — нет
    из-за чего весь сыр-бор

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

  6. Vita, вызывать Synaptic на каждый чих — не всегда целесообразно.
    А на счёт зависимостей — это в общем-то зависит исключительно от майнтайнера, какие считать жёсткими, а какие — любыми прочими. То есть настоящие жёсткие зависимости определяются разработчиком пакета, а вот майнтайнер может добавить в их число и что-то из мягких. Пример xsane тут показательный: в Slackware или Archlinux’е, которые следуют аптсриму, Вы в среди его жёстких зависисмотей не найдёте, например, libgimp, который в deb-пакетах оказывается в Depends.

  7. Алексей! Не так уж часто приходится менять настройки Synaptic. Если только что-то пошло не так… Но заметила, что обновление системы через терминальные команды не всегда полное. При открытии Synaptic обнаруживается ещё несколько обновлений. Но это характерно, скорее всего, только для Ubuntu и на ней based.

  8. >Дмитрий, нет, в apt-get опция —no-install-recommends — умолчальная, в apt — нет
    >из-за чего весь сыр-бор
    У меня ровно наоборот.
    Встретилась такая фраза: «Note that apt-get now installs recommended packages as default and is the preferred program for package management from console to perform system installation and major system upgrades for its robustness.»
    https://www.debian.org/doc/manuals/debian-faq/ch-pkgtools.en.html#s-apt-get
    Почему сейчас, а раньше? У меня Debian 8.
    Сделал так:
    sudo echo ‘APT::Install-Recommends «false»;’ >> /etc/apt/apt.conf
    после чего «apt-get install» без параметров стал устанавливать без рекомендательных пакетов, «apt install» без параметров продолжает устанавливать также без рекомендаций.

  9. > У меня ровно наоборот.
    > У меня Debian 8
    Видимо, отличие умолчаний в Debian и Ubuntu.
    В частности, в Ubuntu сейчас /etc/apt/apt.conf нет как класса (раньше был).

  10. Vita, у меня прямо противоположные впечатления: apt upgrade чего-то хочет доапгрейдить после Synaptic’а и тем более после mint-update (ну в последнем случае это понятно). Вероятно, зависит от режима обновления Synaptic’а — стандартного или интеллектуального, но не разбирался, так как пользуюсь им в основном для массового удаления, наглядней видно, что purge, а что только remove :)

  11. >В частности, в Ubuntu сейчас /etc/apt/apt.conf нет как класса (раньше был).
    В Debian 8 тоже изначально нет, создал его сам.

Добавить комментарий