Воззрения кота Manual’а. Deb-пакеты. Приложение 5. Утилита aptitude

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

manul-logo-100Программа aptitude — пакетный менеджер, функционально примерно соответствующий как паре утилит apt-get и apt-cache, так и утилите apt. Однако по сравнению с обоими инструментами управления пакетами она предоставляет некоторые дополнительные возможности.

Общее вступление

Программа aptitude ныне не очень настойчиво рекомендуется к применению в Debian’е и совсем не рекомендуется — в дистрибутивах семейства Ubuntu. Однако воззерния кота Manual’а в отношении её заслуживают места хотя бы в приложениях к основному материалу. Во-первых, полноты картины радди, а во-вторых — потому, что она по прежнему используется в ряде «чистых» клонов Debian’а, например, в MX Linux.

Программа aptitude была создана в 1999 году Дэниелом Барроузом (Daniel Burrows) в качестве замены dselect — архаичной и неудобной в использовании надстройки над утилитами семейства dpkg. Впервые она была включена в Debian 2.2 (так называемый potato), и с тех пор утвердилась в этом дистрибутиве в качестве штатного средства управления пакетами.

Существует мнение, что aptitude выступает в качестве фронт-энда по отношению к утилитам семейства APT. Однако это не совсем так: aptitude и APT независимы друг от друга, но основаны на одном и том же наборе библиотек libapt.

Программа aptitude представлена во всех deb based дистрибутивах. Она рекомендуется к употребелнию в собственно Debian’е, а в ткаих его клонах, как Siduction и Aptosid выступает пакетным менеджером по умолчанию. Теоретически работает она и в Ubuntu со всеми его производными, и почти всегда присутствует в установке по умолчанию. Однако здесь главным средством управления пакетами в командной строке является семейство утилит APT И на практике оказывается, что совместное использование apt и aptitude не целесообразно. И потому резонные люди не рекомендуют применение последней в системах, основанных на Ubuntu, в том числе и в Linux Mint. Именно поэтому о ней не говорилось в книге, посвящённой этому дистрибутиву. А вот в LMDE, базовая часть которой целиком заимствована из Debian’а, никаких препятствий к применению aptitude не просматривается. Хотя, честно говоря, имея в руках Mint-реализацию утилиты apt, я ни разху не ощутил потребности в ней.

Как известно, полный набор утилит семейства APT обеспечивает весь мыслимый комплекс действий с пакетами — от установки единичного пакета с отслеживанием всех его зависимостей до полной пересборки системы из исходников, подобно тому, как это делается в дистрибутивах Source Based.

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

Программа aptitude работает в текстовом режиме и предполагает два метода использования – интерактивный, через основанный на ncurces интерфейс, и командный — непосредственно из строки шелла. Поскольку предполагается, что интерактивный метод проще в использовании, с него мы и начнём.

Интерактивный режим

Основное применение aptitude в интерактивном режиме — установка системы с помощью так называемого алтернативного инсталлятора, применяемого в Ubuntu Server, Lubuntu и при установке с mini.iso

Обзор интерфейса

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

После запуска aptitude перед нами предстает ее интерактивный текстовый интерфейс, основанный на библиотеке ncurses. Рабочее пространство программы разбито по умолчанию на три части: вверху — строка меню и краткая справка по наиболее употребимые горячим клавишам, в середине — разворачиваемый список категорий, внизу — поле описания пакетов.

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

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

  • Действия (Actions) — выполнение действий, «заказанных» в пункте Пакет;
  • Откат (Undo) — отмена выполненных действий;
  • Пакет (Package) — «заказ» действий с пакетами для выполнения в пункте Действия;
  • Решатель (Resolver) — здесь решаются проблемы с зависимостями;
  • Поиск (Search) — предлагается догадаться самим;
  • Параметры (Options) настройка интерфейса, работы с зависимостями и кое-какие прочие;
  • Окна (Views) — открытие и закрытие новых «окон» (которые правильней назвать вкладками);
  • Справка (Help) — она же Помощь.

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

$ LANG="POSIX" aptitude

Перемещение по пунктам — стрелками управления курсором или мышью, деактивизация меню — клавишей Escape.

Логику создателей интерактивного меню aptitude понять довольно сложно, поэтому мы будем рассматривать его не в установленном ими порядке, а в том, в каком задействуются на практике.

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

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

aptitude_002
Тем не менее, пробежимся по ним беглой рысью.

  • в пунктах Установить (Install), Удалить (Remove) и Удалить полностью (Purge) отмечаются пакеты, предназначенные для установки, удаления с сохранением конфигов и удаления «вчистую», соответственно;
  • пункты Оставить (Keep) и Удержать (Hold)— фиксирую версии пакетов при единичном ближайшем апгрейд и навеки (или до принудительной отмены фиксации);
  • пункты Отметить как установленные автоматически и Отметить как установленные вручную принудительно задают пакетам соответствующий статус, вне зависимости от того, как они были установлены на самом деле.

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

aptitude_003
Так что, закончив развлекуху с предопределением судьбы пакетов, самое время отправиться в пункт Действия главного меню. Где мы видим следующую картину:

aptitude_004
Назначение подпункта Установить/удалить пакеты очевидно — это реальное выполнение соответствующих действий над отмеченными в пункте Пакет пакетами. А также приводит к исполнению всх прочих заказов.

Подпункт Обновить список пакетов вызывает обновление локального кэша пакетов, необходимое при подключении новых репозиториев. А подпункт Отметить обновляемые помечает в локальном кэше пакеты, для которых доступны обновления; само по себе обновление будет выполнено при переходе к первому подпункту.

Подпункт Забыть о новых пакетах заставляет не учитывать категорию New Packages. А Очистить кэш пакетов приводит к удалению файлов пакетов, скачанных в процессе жизнедеятельности aptitude, находящихся в каталоге /var/cache/apt/archives/. Действие подпункта Очистить устаревшие файлы сходно, но он вызывает удаление файлов, соответствующих только пакетам устаревших версий.

Подпункт Играть в сапёра позволяет убить время в ожидании скачивания и установки пакетов.

Наконец, Стать суперпользователем именно это и означает, если aptitude была запущена от пользователя обычного. Все пункты из меню Действия требуют прав администратора (кроме игры в сапёра — это баловство доступно и простому юзеру). Так что в этом пункте будет выведено приглашение sudo ввести пароль пользователя:

[sudo] password for alv:

Права администратора можно получить и иным путём — выбором одного из действий в этом пункте, что вызовет предложение Стать суперпользователем:

aptitude_005
И при согласии опять же последует приглашение sudo:

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

Смысл пункта Откат понятен скорее по английски (Undo) — не ожидайте от его выбора каких-либо денег.

Пункт меню Решатель вызывает у меня некоторое недоверие, я им никогда не пользовался, и потому изучение его возможностей оставляю на усмотрение заинтересованных лиц.

В пункте Поиск, как легко догадаться, осуществляется поиск пакетов вперед и назад, причём по умолчанию инкрементно:

aptitude_007
Здесь же, через подпункт Найти неработоспособные можно отыскать и так называемые «сломанные пакеты» — на скриншоте они выделены кумачом:

aptitude_008
Приведённый пример взят из моей самосборной Pure Betsy, и таких кумачовых строк в довольно много. Они не означают, что в моей системе что-то неправильно: они вызваны удалением ряда метапакетов, которые мне по жизни не нужны, и жить это не мешает ни в малейшей степени.

Пункты меню Окна позволяют создавать несколько вкладок разного назначения, например, для списка пакетов, их категорий, рекомендаций и так далее. Разумеется, в каждый момент можно видеть только что-то одно, но между этими списками легко переключаться в любом направлении:

aptitude_009
Некоторые вкладки возникают как бы самопроизвольно. Так, при обращении к пункту Параметры, доступный для настройки их список выводится в новой вкладке. Открытие каждого подпункта меню Справка также создаёт отдельную вкладку. И подчас нужно довольно долго переключаться между открытыми вкладками, чтобы добраться, наконец, до списка пакетов, нуждающихся в окучивании. И делать это удобнее не через меню, а горячими клавишами (см. далее). Или — мышью через собственно tab-подобные вкладки.

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

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

Горячие клавиши

Практически все действия, доступные через главное меню aptitude, могут быть выполнены и с помощью горячих клавиш. Что, учитывая изрядную тормознутость интерфейса, может быть предпочтительным. Полный комментированный (на русском языке) список хоткеев можно посмотреть через пункт Справка -> Справка:

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

Хоткеи для отметки

  • + — отметить пакет для установки (или снять фиксацию версии);
  • — отметить пакет для удаления с сохранением конфигов;
  • _ — отметить пакет для удаления «вчистую»;
  • : — зафиксировать версию пакета для ближайшего обновления;
  • = — зафиксировать текущую версию пакета навеки (или до снятия фиксации);
  • M — отметить пакет как установленный автоматически;
  • m — отметить пакет как установленный вручную.

Хоткеи для действий

  • g — выполнение заказанных действий над отмеченными пакетами; на самом деле по первому нажатию клавиши «g» только выводится список «заказанных» пакетов; сами по себе установка, удаление и т.д. начнутся после повторного нажатия той же клавиши; впрочем, это можно изменить в настройках;
  • U — обновление локального кэша пакетов;
  • V — отметка обновляемых;
  • f — забыть о новых пакетах;
  • q — выход из aptitude или её Справки.

Хоткеи для поиска

  • / — прямой поиск;
  • \ — обратный поиск;
  • n — повторный прямой поиск;
  • N — повторный обратный поиск;
  • b — поиск «сломанных» пакетов.

Хоткеи для вкладок

  • F6 — переключение на следующую вкладку;
  • F7 — переключение на предыдущую вкладку;
  • q — закрытие вкладки.

Кроме того, не вредно помнить, что комбинация клавиш Control+T активизирует меню, комбинация Control+U отменяет последнее действие, а горячая клавиша ? вызывает ту справку, которая внутри пункта Справка.

Настройка интерфейса

Кое-какие вещи в умолчальном интерфейсе интерактивной aptitude могут показаться непривычными и (или) неудобными. Честно говоря, автору этих строк в ней кажется непривычным и неудобным почти всё. Но его примирение с этой программой обусловлено, во-первых, удобством её командной ипостаси (о чём речь впереди) и, во-вторых, тем, что некоторые возможности настройки интерфейса таки имеют место быть.

Как нетрудно догадаться, они выполняются через главное меню: Параметры -> Предпочтения, после чего в новой вкладке выводится список доступных для изменения параметров, объединённых в три секции:

  • Настройки интерфейса;
  • Работа с зависимостями;
  • Разное.

aptitude_012
В настоящий момент нас будет интересовать только первая секция, касающаяся интерфейса. Как можно видеть из следующего скриншота, тут всё довольно просто, потому что каждый настраиваемый параметр прокомментирован, причём при нашей умолчальной локали — по русски:

aptitude_013
Так что я вкратце изложу свои соображения по поводу включения или выключения отдельных пунктов. Разумеется, всё сказанное ниже — не более чем ИМХО.

  • Показывать некоторые из доступных команд вверху экрана — по первости лучше оставить в умолчальном (то есть включённом) состоянии; но при регулярном использовании интерактивной aptitude надобность в этой подсказке быстро исчезает;
  • Скрывать строку меню, когда она не используется — эту опцию (по умолчанию она отключена) я включил бы сразу, ибо действия через меню, как уже говорилось, довольно медленны; да и при необходимости вызвать его всегда можно комбинацией клавиш Control+T;
  • По возможности использовать строку ввода внизу экрана — при включении этой опции строка ввода будет расположена внизу экрана, в выключенном состоянии (по умолчанию) ввод будет показан в виде всплывающего диалогового окна; дело вкуса, для меня удобнее первый вариант;
  • Показывать результаты частичного поиска (инкрементный поиск) — единственным аргументом против этой опции (включённой по умолчанию) может быть только ну исключительная слабость машины;
  • Завершать работу программы при закрытии последнего окна — учитывая следующий пункт, ничему не мешает;
  • Запрашивать подтверждение при выходе — если включена предыдущая опция, лучше оставить во избежание случайного выхода из программы;
  • Пауза после скачивания файлов — имеет смысл сохранить умолчальное состояние, то есть При возникновении ошибки;
  • Использовать индикатор скачивания «status-line» для всех скачиваний — по умолчанию выключено, но мне кажется удобным;
  • Показывать область информации по умолчанию — включено по умолчанию, и лучше оставить по крайней мере до окончания настроек зависимостей, а там — как больше понравится; я оставляю;
  • Показывать закладки для доступных окон — безусловно, лучше оставить включённым, ибо наглядно и проще переключаться;
  • Показывать закладки для области информации — в отличие от предыдущей опции, эта по умолчанию выключена, и вроде не особенно нужна;
  • Перейти к следующему элементу после изменения состояния пакета — по умолчанию по выполнении действия с пакетом происходит возврат к исходному списку категорий, если включить эту опцию — к следующему пакету из списка; в чем необходимости не вижу, поскольку с пакетами редко приходится работать по их порядку в списках;
  • Автоматически показывать причину неработоспособности пакетов — при включении (как по умолчанию) для «сломанных» пакетов в области информации будут показаны зависимости, которые не могут быть удовлетворены;
  • При запуске показывать список пакетов вместо стандартного дерева — включение опции выводит при запуске программы «плоский» список всех пакетов в алфавитном порядке, без всякого структурирования, что мне кажется неудобным.

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

Настройки интерфейса интерактивной aptitude выполняются от лица обычного пользователя и, соответственно, имеют силу только в его сеансе, ибо отражены в файле ~/.aptitude/config — обычном текстовом файле, доступном и для прямого редактирования.

aptitude и зависимости

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

aptitude "";
aptitude::Ignore-Recommends-Important "true";
aptitude::Keep-Unused-Pattern "";
aptitude::Delete-Unused-Pattern "";
(END)

То есть — почти никак: все умолчальные параметры считываются сначала из файла /usr/share/aptitude/aptitude-defaults, а затем из конфиголв в каталоге /etc/apt/apt.conf.d. Из всего, что имеет отношение к зависимостям, можно видеть только строку игнорирования рекомендаций. Так что продолжим наши развлечения с зависимостями, перейдя к соответствующей секции:

aptitude_014
Здесь всё происходит точно так же, как и при настройке интерфейса: каждая опция прокомментирована, и остаётся только решить, нужна ли она именно вам.

Для первых двух опций, Автоматически разрешать зависимости выбираемого пакета и Автоматически исправлять пакеты с ошибками… умолчальное, то есть положительное, решение напрашивается, иначе использование aptitude (как и любого другого менеджера пакетов) утрачивает смысл.

А вот с опцией Автоматически устанавливать рекомендуемые пакеты возможны варианты. Дело в том, что обычно используемая в Ubuntu для установки пакетов утилита apt-get, в отличие от aptitude, рекомендованные пакеты по умолчанию не устанавливает. И для приведения работы этих программ в соответствие друг с другом есть резон отключить эту опцию. В этом случае в конфиг aptitude добавится такая строка:

Apt::Install-Recommends "false";

С другой стороны, для графических фронт-эндов к APT, таких, как Symantic и Muon Package Manager, напротив, рекомендованные зависимости устанавливают. Подозреваю, что и Центр приложений ведёт себя аналогично. Так что может понадобиться вернуть умолчальное значение. В этом случае та же строка приобтетёт вид:

Apt::Install-Recommends "true";

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

Возможно, что читатель, помимо рекомендованных зависимостей, пожелает по умолчанию устанавливать также и предлагаемые. Сделать это через интерактивное меню нельзя, но легко решается добавлением в ~/.aptitude/config одной строки:

$ echo 'Apt::Install-Suggests "true";' >> .aptitude/config

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

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

Что же до пункта Пакеты, которые никогда не будут автоматически удалены, то, как нетрудно понять, он содержит список шаблонов имён пакетов, «неудаляемых» при установке новых их версий. По умолчанию в этот список включены маски имён образов ядра и его модулей:

^linux-image.*$ | ^linux-restricted-modules.*$ | ^linux-ubuntu-modules.*$

И трогать их не надо. А вот чем дополнить список — решать пользователю (при условии, что он знает, что делает).

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

Вообще-то опций конфигурирования для aptitude предусмотрено великое множество. Ознакомиться с полным их набором и их умолчальными значениями можно, прочитав файл /usr/share/aptitude/README. Это английская версия, существуют пего переводы на ряд других языков, русского среди которых нет.

А теперь, покончив со вторым пунктом, который про свободу Африке зависимости, пора завершить тему частью Разное. Где тоже не так много опций:

aptitude_015
И включение/отключение их сугубо субъективно. Разве что опцию Автоматически обновлять установленные пакеты я бы однозначно оставил в умолчальном (то есть отключённом) состоянии. Ну и изменять URL для скачивания списков изменений я бы тоже поостерёгся. Да, Показать, что будет сделано, перед тем как делать — часто раздражает. Но даёт некоторую паузу во времени — чтобы последний раз подумать перед сносом всей системы.

Командный режим

Как можно было видеть из обзора интерактивной 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 или нет.

[Общее содержание]

Воззрения кота Manual’а. Deb-пакеты. Приложение 5. Утилита aptitude: 3 комментария

  1. Про тэгетирование пакетов — ещё бы строчку о том, как посмотреть все свои тэги. Сайт с официальным руководством что-то не хочет открываться.

  2. Чтоб я помнил, тёзка… С aptitude не работаю с появления автономного apt, то есть вот уже года четыре. Это всё кот Manual — он настоял, чтобы этот старый текст вошёл, хотя бы в качестве приложения: вдруг кому будет интересно…

  3. Тэгетирование пакетов очевидно нужно для того, чтобы заново установить свои программы. Скажем после переустановки системы, чтобы перейти на Cintu и т.д . Для новичков, каким являюсь и я — это проблема.

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