Моя дорогая Betsy. Управление пакетами: aptitude в командном режиме

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

Как можно было видеть из обзора интерактивной aptitude, эта программа предоставляет очень широкие возможности по управлению пакетами. Что, однако, компенсируется — да простят меня записные дебианисты и просто её поклонники — неудобством и крайней нелогичностью её интерфейса в этом режиме. Это если не говорить о визуальной заторможенности даже на современных машинах. Моё сугубое ИМХО — использование интерактивной aptitude, про крайней мере, в Ubuntu, целесообразно в двух случаях:

  • при необходимости массового изменения статуса пакетов и фиксации их версий;
  • после массового удаления пакетов, на предмет выявления «осиротевших» их зависимостей.

Для первой задачи альтернативы интерактивной aptitude просто нет, а две последующие решаются её средствами… может быть, не проще, но безусловно наглядней (повторяю, это не более чем моё очень скромное ИМХО). Для обычной же жизнедеятельности — поиска нужных пакетов, получения информации о них, установки и удаления — aptitude гораздо эффективней использовать в командном режиме.

Введение

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

Командные директивы с использованием основных операторов можно сгруппировать следующим образом:

  • директивы поиска;
  • директивы вывода информации;
  • директивы манипуляции с пакетами;
  • директивы манипуляции со статусом;
  • директивы обновления системы;
  • директивы «очистки»;
  • разные разности.

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

Операторы, вносящие изменения в систему, требуют привилегий администратора — и их желательно временно получить посредством команды sudo aptitude ... для выполнения единичной директивы или sudo -s на неопределённый срок. Использование sudo -i, меняющей всё пользовательское окружение, не рекомендуется, так как настройки aptitude делаются в аккаунте обычного пользователя.

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

Поиск пакетов

Резонные люди обычно начинают работу с пакетами поиском нужного для установки пакета. В случае с aptitude это делается так:

$ aptitude search keyword

ответом на что будет список всех пакетов, в названии которых имеется указанное ключевое слово — по умолчанию aptitude не ищет заданное слово в описаниях пакетов. В отличие от apt, вывод aptitude содержит также информацию о статусах пакета — основном и, если имеется, дополнительном. Так, поиск по ключевому слову aptitude:

$ aptitude search aptitude

даст примерно следующий вывод:

i A aptitude                                                            — средство управления пакетами с текстовым интерфейсом
p   aptitude:i386                                                       — средство управления пакетами с текстовым интерфейсом
i A aptitude-common                                                     — не зависящие от архитектуры файлы для менеджера пакетов aptitude
p   aptitude-dbg                                                        — отладочные символы для менеджера пакетов aptitude
p   aptitude-dbg:i386                                                   — отладочные символы для менеджера пакетов aptitude
v   aptitude-doc                                                        -
p   aptitude-doc-cs                                                     — Руководство по консольному менеджеру пакетов aptitude на чешском языке
p   aptitude-doc-en                                                     — руководство на английском языке для aptitude
p   aptitude-doc-es                                                     — Руководство по консольному менеджеру пакетов aptitude на испанском языке
p   aptitude-doc-fi                                                     — Руководство по консольному менеджеру пакетов aptitude на финском языке
p   aptitude-doc-fr                                                     — Руководство по консольному менеджеру пакетов aptitude на французском языке
p   aptitude-doc-it                                                     — Italian manual for aptitude, a terminal-based package manager
p   aptitude-doc-ja                                                     — Руководство по консольному менеджеру пакетов aptitude на японском языке

Вместо ключевого слова оператору search в качестве аргумента можно задать фильтр. Он предваряется символом тильды ~. В качестве фильтра можно задать условия поиска, например, в именах пакетов:

$ aptitude search ~naptitude

Что эквивалентно приведённой выше умолчальной форме директивы. А для поиска в описаниях пакетов можно использовать такую конструкцию:

$ aptitude search '~daptitude'

Что даст куда более длинный вывод:

p   apt-cacher                                                          — кеширующий прокси-сервер для работы с репозиторями пакетов Debian
p   apticron                                                            — Simple tool to mail about pending package updates
i A aptitude                                                            — средство управления пакетами с текстовым интерфейсом
p   aptitude:i386                                                       — средство управления пакетами с текстовым интерфейсом
i A aptitude-common                                                     — не зависящие от архитектуры файлы для менеджера пакетов aptitude
p   aptitude-dbg                                                        — отладочные символы для менеджера пакетов aptitude
p   aptitude-dbg:i386                                                   — отладочные символы для менеджера пакетов aptitude
p   aptitude-doc-cs                                                     — Руководство по консольному менеджеру пакетов aptitude на чешском языке
p   aptitude-doc-en                                                     — руководство на английском языке для aptitude
p   aptitude-doc-es                                                     — Руководство по консольному менеджеру пакетов aptitude на испанском языке
p   aptitude-doc-fi                                                     — Руководство по консольному менеджеру пакетов aptitude на финском языке
p   aptitude-doc-fr                                                     — Руководство по консольному менеджеру пакетов aptitude на французском языке
p   aptitude-doc-it                                                     — Italian manual for aptitude, a terminal-based package manager
p   aptitude-doc-ja                                                     — Руководство по консольному менеджеру пакетов aptitude на японском языке
p   cron-apt                                                            — автоматическое обновление пакетов с помощью apt-get
p   cupt                                                                — alternative front-end for dpkg — console interface
p   cupt:i386                                                           — alternative front-end for dpkg — console interface
p   dselect                                                             — утилита для управления пакетами Debian
p   dselect:i386                                                        — утилита для управления пакетами Debian
p   gbrainy                                                             — brain teaser game and trainer to have fun and to keep your brain trained
p   libcwidget-dev                                                      — high-level terminal interface library for C++ (development files)
p   libcwidget-dev:i386                                                 — high-level terminal interface library for C++ (development files)
p   pkgsync                                                             — automated package list

Можно также выбирать пакеты, входящие в определённые секции (~sname) или (задачи ~tname). Например, директива

$ aptitude search '~sgnome'

выберет все пакеты, входящие в секцию gnome, а конструкция

$ aptitude search '~tubuntu-desktop'

выведет список пакетов, составляющих задачу ubuntu-desktop.

Внимание: в командной оболочке zsh, которую я использую, фильтр обязательно заключается в строгие кавычки, как в приведённых примерах. В используемой по умолчанию в Ubuntu оболочке bash в большинстве случаев можно обойтись без них. Хотя и вреда от кавычек не будет ни малейшего.

Литеры, используемые для фильтров, легко запомнить, если осознать простую их мнемонику:

  • n — от name,
  • d — от description,
  • s — от section,
  • t — от task,
  • m — от maintainer.

Ключевое слово после литеры — это просто последовательность символов, поэтому на запрос вида

$ aptitude search 'napt'

последует вывод из длинного списка пакетов, не обязательно имеющих отношение к утилитам семейства APT. Чтобы избежать этого, можно прибегнуть к регулярным выражениям, таким же, как используются, например, в утилите grep. Так, директива

$ aptitude search 'n^apt'

отфильтрует только пакеты, начинающиеся с apt.

В директивах поиска можно использовать и логические операторы. Так, команда

$ aptitude search '~n^apt' '~n^dpkg'

выловит пакеты, имеющие отношение к apt и dpkg — логический оператор И подразумевается по умолчанию. Конструкция вида

$ aptitude search '~n^apt|~n^dpkg'

свяжет аргументы оператора поиска логическим ИЛИ. А вот в команде

$ aptitude search '~n^apt!~n^aptitude'

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

Пакеты можно также фильтровать по их статусу. Так, команда

$ aptitude search '~i'

выведет список всех инсталлированных пакетов, а команда

$ aptitude search '~U'

список пакетов, для которых в данный момент доступны обновления.

Запросы по ключевой последовательности символов можно комбинировать с запросами по статусу. Так, команда

$ aptitude search '~i~naptitude'
i A aptitude                                                            — средство управления пакетами с текстовым интерфейсом
i A aptitude-common                                                     — не зависящие от архитектуры файлы для менеджера пакетов aptitude

из всего множества пакетов, имеющих отношение к aptitude, выберет только установленные в системе. А команда

$ aptitude search '~i~tubuntu-desktop'

проделает то же самое для пакетов, установленных в составе соответствующего метапакета.

Здесь я привёл лишь некоторые примеры запросов на поиск пакетов, которые использую более-менее регулярно. А вообще-то эта тема лимитируется только потребностями и фантазией.

Информация о пакетах

Следующий этап применения aptitude — получение информации о тех пакетах, которые можно заподозрить в полезности. Этой цели служит оператор show, требующий аргумента в виде имени пакета. Например, информация о самом пакете aptitude выглядит так:

$ aptitude show aptitude
Пакет: aptitude
Состояние: установлен
Автоматически установлен: да
Версия: 0.6.8.1-2ubuntu2
Приоритет: необязательный
Раздел: admin
Сопровождающий: Ubuntu Developers
Архитектура: amd64
Размер в распакованном виде: 4 855 k
Зависимости: aptitude-common (= 0.6.8.1-2ubuntu2), libapt-pkg4.12 (>= 0.9.3), libboost-iostreams1.49.0 (>= 1.49.0-1), libc6 (>= 2.14), libcwidget3,
                        libept1.4.12 (>= 1.0.9), libgcc1 (>= 1:4.1.1), libncursesw5 (>= 5.6+20070908), libsigc++-2.0-0c2a (>= 2.0.2), libsqlite3-0 (>=
                        3.6.5), libstdc++6 (>= 4.6), libtinfo5, libxapian22
Рекомендует: sensible-utils, apt-xapian-index, libparse-debianchangelog-perl
Предлагает: aptitude-doc-en | aptitude-doc, tasksel, debtags
Конфликтует: ia32-apt-get (< 22), ia32-apt-get (< 22), aptitude
Описание: средство управления пакетами с текстовым интерфейсом
 aptitude — утилита для управления пакетами со множеством полезных функций, в том числе: mutt-подобный синтаксис для удобного поиска пакетов, отложенное
 выполнение  запрошенных пользователем действий (как у dselect), получение и вывод на экран списка изменений для большинства пакетов и параметры
 командной строки как у apt-get.

 Также aptitude занимает немного места и следит за чистотой системы, удаляя ненужные более вспомогательные пакеты.
Сайт: http://aptitude.alioth.debian.org/

Здесь мало чего заслуживает комментирования. Разве что хотел бы обратить внимание на пункт Зависимости: в их списке можно увидеть libapt, но самого apt‘а не найти. Это — свидетельство того, что aptitude не является фронт-эндом для последнего, о чём уже упоминалось в прошлом очерке.

Оператор show показывает, от каких пакетов зависит тот, что указан в качестве её аргумента. Информацию обратного характера, то есть пакетов, зависящих от данного, можно получить с помощью оператора why. Например, директива

$ aptitude why aptitude

покажет, для каких пакетов зависимостью является пакет aptitude

i   tasksel Зависит aptitude (>= 0.2.15-1)

А оператор why-not, напротив, выведет список пакетов, которые с данным сосуществовать не могут по тем или ниным причинам:

$ aptitude why-not aptitudep
B  dpackage:i386     Предоставляет dpackage
pB  dpackage:i386     Предлагает    apt:i386
pB  apt:i386      Предлагает    aptitude:i386 | synaptic:i386 | wajig:i386
p   aptitude:i386 Конфликтует   aptitude

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

Установка выбранных пакетов осуществляется посредством оператора install, требующем в качестве аргумента имени пакета:

# aptitude install package_name

При этом последовательно будут выполнены следующие действия:

  • просмотр официальных репозиториев, перечисленных в конфигурационном файле /etc/apt/source.list, и PPA-репозиториев, которым соответствуют файлы в каталоге /etc/apt/sources.list.d (файлы эти — те же, что и для утилит семейства APT);
  • скачивание deb-пакета из Сети, помещение его в локальный кэш пакетов (в каталог /var/cache/apt/archives);
  • распаковка архива, инкорпорация его компонентов в файловую систему и, при необходимости, выполнение действий по настройке, автоматически или, если требуется, в интерактивном режиме.

При разрыве связи во время скачивания пакета его уже полученный фрагмент помещается в каталог /var/cache/apt/archives/partial/, и повторение процедуры install продолжает докачку с места обрыва.

Оператор install команды aptitude, в отличие от одноименного из apt-get, по умолчанию получает из репозитория, помещает в локальный кэш, устанавливает и настраивает не только «жесткие» зависимости пакета (собственно depends), но и часть «мягких» (те, что относятся к категории recommends). На усмотрение пользователя остается только установка «мягких» зависимостей из категории suggests. Хотя, такое положение можно изменить — или соответствующими настройками, или, как мы увидим далее, опциями командной строки.

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

Пакет, «испорченный» по какой-либо причине (например, неаккуратным вмешательством в конфигурационные файлы) можно «починить». Команда

# aptitude reinstall package_name

вернет его в первозданное состояние.

Установленные пакеты, оказавшиеся не нужными, могут быть удалены. Директива

# aptitude remove package_name

удалит указанный в качестве аргумента пакет с сохранением его конфигурационных файлов. Именно таким пакетам присваивается статус c, что маркируется соответствующей литерой в выводе команды aptitude search. Полная же очистка системы от всех следов пакета достигается применением оператора purge:

# sudo aptitude purge package_name

В этом случае пакет в выводе команды aptitude search маркируется литерой p, то есть становится неотличимым от пакета, которого в системе никогда не было. Однако оператор purge не удаляет конфигурационные файлы пакета из домашнего каталога пользователя — это придется проделать самостоятельно.

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

# aptitude purge ’~nzsh’

В данном примере будут бесследно удалены все пакеты, имеющие компонент zsh в своем имени.

По умолчанию оба оператора удаления — и remove, и purge, — деинсталлируют не только пакет, указанный в качестве аргумента, но и все те, которые были установлены автоматически в качестве его зависимостей — разумеется, только в том случае, если в системе не осталось других программ, которые их используют.

Ранее говорилось о возможности инверсии умолчального отношения к рекомендованным зависимостям. Так, избежать принудительного выполнения «рекомендаций» можно с помощью опции -R (или --without-recommends), данной в командной директиве установки конкретного пакета. Напротив, если игнорирование «рекомендаций» запечатлено в конфигурационном файле как умолчальное, установить их для отдельного пакета можно, прибегнутв к опции -r (--with-recommends), которая инвертирует действие опции -R, то есть заставит установить все рекомендуемые зависимости.

Должен предупредить: применение опции -R к установленной системе Ubuntu требует осторожности. Базовая ее инсталляция осуществляется по принципу «плюс recommends». И применение к ней aptitude -R делает как бы «ненужными» многие пакеты. Так что перед тем, как нажать Enter в ответ на предложение

Хотите продолжить? [Y/n/?]

внимательно прочтите весь предшествующий ему вывод. Впрочем, привычка читать вывод перед тем, как «давить батоны», не будет лишней при работе с любой программой…

Командная aptitude: изменения статуса пакетов

На странице про интерактивную aptitude говорилось о возможности изменения статуса пакетов через её меню. Однако и в командном режиме это делается ничуть не сложнее. Так, перманентно зафиксировать версию пакета (пакетов) можно с помощью директивы

# aptitude hold package_name

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

# aptitude unhold package_name

Если версия пакета должна быть зафиксирована только на одну, ближайшую, операцию обновления, надо прибегнуть к директиве

# aptitude keep package_name

Для изменения дополнительного статуса A, очень важного при управлении пакетами, используется пара операторов markauto и unmarkauto. Первый помечает именованный пакет или их группу по шаблону как установленные автоматически в качестве зависимостей. Так, командой

# aptitude markauto ’~slibs’

в качестве автоматически установленных (статус A) будут помечены все пакеты из секции libs — то есть практически все библиотеки. Следствием чего явится автоматическое удаление неиспользуемых библиотек после деинсталляции последнего зависимого от них пакета.

Если же для некоторых библиотек это по каким-либо причинам нежелательно, их можно «размаркировать» (то есть снять дополнительный статус A) командой

# aptitude unmarkauto package_name

переведя таким образом в категорию пакетов, установленных вручную. И, следовательно, могущих быть удаленными только явным образом.

Обращаю внимание на символ # в приведённых примерах: он подчёрикает, что все операции по изменению статуса пакетов требуют прав root’а, так как связаны с изменением локального кеша.

Командная aptitude: обновление системы

Программа aptitude позволяет выполнить и тотальное обновление системы, причём в двух различных режимах safe-upgrade и full-upgrade. Правда, оба они начинаются с обновления локального кэша, то есть выполнения директивы

# aptitude update

После чего можно переходить собственно к обновлению. И для начала — в его «безопасном» варианте, то есть в режиме

# aptitude safe-upgrade

Без указания аргумента (или аргументов) эта директива обновит все установленные пакеты на новые их версии, доступные в репозитории. Но только в том случае, если это не повлечёт за собой инсталляции новых пакетов в качестве их зависимостей. Или, напротив, удаления зависимостей, уже имеющихся. Если то или другое явление имеет место быть — нас об этом проинформируют, но сама процедура обновления выполнена не будет. И тогда можно будет прибегнуть к директиве

# aptitude full-upgrade

Она выполнит принудительное обновление системы, то есть: для всех обновляемых пакетов при необходимости установит новые пакеты-записимости и удалит старые.

В двух словах: safe-upgrade обновит все пакеты системы, если это не потребует изменения их «списочного состава», full-upgrade приведёт последний в соответствие с новыми реалиями.

Если в качестве аргументов любого из операторов указать список пакетов, то, как легко догадаться, обновлению подвергнутся только в нём поименованные — при тех же условиях.

Важно, что пакеты, имеющие статус h (то есть с зафиксированной версией), не подвергнутся обновлению ни при выполнении оператора safe-upgrade, ни при dist-upgrade.

Как и при выполнении оператора install, процедуры safe-upgrade и full-upgrade безболезненно переживают разрыв связи (или, например, прерывание по нажатию клавишной комбинации Control+C): повторный их запуск возобновляет установку с момента прерывания.

Оистка системы

Как уже говорилось на одной из предыдущих страниц, установка пакетов начинается с их скачивания из сети и помещения в каталог /var/cache/apt/archives. И сами собой они оттуда не удаляются, зазря занимая место на диске. Хотя в большинстве случаев ни для чего уже не нужны никому (за исключением некоторых специальных случаев): при необходимости переустановки пакета обычно его проще скачать заново, и часто уже обновлённый. Разумеется, при наличии нормального подключения к сети — но в ином случае применение Ubuntu не целесообразно вообще, лучше поискать дистрибутив, не столь ориентированный на онлайн.

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

Благо, aptitude позволяет избавиться и от промежуточных продуктов собственной жизнедеятельности. Для начала — deb-файлов тех пакетов, которые ныне не установлены в системе (то есть устаревших версий — при регулярном употреблении операторов safe-upgrade и full-upgrade их накапливается изрядное количество). Делается это так:

# aptitude autoclean

Если deb-файлы устаревших версий пакетов не нужны заведомо, то те, что соответствуют версиям актуальным, теоретически могут пригодиться — например, для переноса индивидуализированной системы на другие машины. Но это — ситуация достаточно редкая: обычно и от них имеет смысл избавляться, по крайней мере, время от времени. И для этого тоже предусмотрена специальная директива:

# aptitude clean

Которая полностью очистит каталог /var/cache/apt/archives.

Разные разности

Командная aptitude «умеет много гитик», с которыми можно ознакомиться в документации к этой программе. И рассмотрение которых я оставляю заинтересованным лицам. Здесь же хотелось бы упомянуть одно одной из таких «гитик» — возможности тэгирования пакетов. То есть присвоения некоему их набору пользорвательского тэга (user-tag) с произвольным именем. Это можно сделать при установке пакетов:

# aptitude install --add-user-tag myset [package list]

То есть присвоить указанный тэг набору своих любимых приложений. А можно проделать это в любой момент времени после установки пакетов с помощью конструкции вида:

# aptitude add-user-tag myset geany pidgin abiword gnumeric

И в дальнейшем использовать этот тэг для поиска:

$ aptitude search '?user-tag(myset)'

избирательного обновления

# aptitude safe-upgrade '?user-tag(myset)'

и прочих манипуляций. При наличии некоторой толики фантазии механизму тэгирования пакетов можно придумать немало применений.

Если необходимость в тэгировании пакетов отпала, тэги легко ликвидировать такой командой:

# aptitude remove-user-tag tag_name

В общем, после знакомства с aptitude можно сделать вывод, что она предоставляет все возможности, обеспечиваемые утилитами apt-get и apt-cache плюс ряд дополнительных, подчас неоценимых, удобств. И потому использование ее в командном режиме, казалось бы, предпочтительно перед указанными средствами комплекта APT. Однако реалзизация apt для Mint обеспечивает практически тот же функционал — за исключением разве что, сложного поиска по шаблонам. Однако читатель сам сможет сделать заключение: использовать ему aptitude или нет.

Предварительное оглавление

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