Debian и другие: Aptitude в интерактивном режиме

Автор: Алексей Федорчук
30 января 2007 г

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

Содержание

Правда, как раз интерактивному режиму aptitude была посвящена прекрасная статья Тихона Тарнавского «Aptitude — превосходная степень apt», опубликованная в журнале Linuxformat #5(79), 2006, с 68-71. Это избавляет меня от необходимости подробного описания программы, позволяя сконцентрировать внимание на трех слабо освещенных аспектах — установке метапакетов, фиксации версий пакетов и настройке интерактивного режима. Все три эти вопроса рассмотрены применительно к дистрибутивам семейства Ubuntu. Но сначала —

Вводные замечания

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

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

Рис. 1. Aptitude — общий вид

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

Для начала ознакомимся с категориями пакетов. Это — совсем не те категории, о которых шла речь в заметке про устройство репозиториев, но за неимением лучшего термина придется воспользоваться этим. Список категорий включает следующие пункты:

  • Обновляемые пакеты — пакеты, для которых в репозитории доступны более новые версии;
  • New Packages — пакеты, недавно включенные в дистрибутив;
  • Установленные пакеты — очевидно из названия;
  • Неустановленные пакеты — пакеты, отсутствующие в системе, но доступные из репозиториев;
  • Виртуальные пакеты — списки взаимозаменяемых пакетов определенного назначения, например, агенты доставки почты, разноязычные словари для проверки орфографии, и так далее;
  • Задачи (Tasks) — те самые метапакеты, которые позднее будут предметом подробного рассмотрения.

Каждая категория разворачивается в список секций по назначению: программы для администрирования, базовые пакеты, текстовые редакторы, и так далее (рис. 2).

Рис. 2. Категории пакетов

Каждая секция разделяется на категории — main, restricted, universe, multivers, — о которых шла речь в заметке про устройство репозиториев. А уже категории содержат списки индивидуальных пакетов (рис. 3).

Рис. 3. Списки пакетов в категории

Каждый пакет списка имеет основной статус, а некоторые — еще и статус дополнительный (первое и второе поле каждой строки, соответственно). В число основных статусов входят:

  • i (от install) — установленный пакет;
  • p (от purge) — пакет не установленный или удаленный «вчистую» (по одной из прошлых заметок мы помним, что разницы между ними обнаружить почти невозможно);
  • c (от clean) — пакет, деинсталлированный с сохранением конфигурационных файлов;
  • v (от virtual) — виртуальный пакет.

Дополнительные статусы включают в себя:

  • A (от Auto) — установленный автоматически, как зависимость другого пакета; пакеты, не имеющие статуса A, считаются установленными вручную;
  • h (от hold) — пакет с фиксированной версией (то есть не подверженный апгрейду);
  • u (от unpacked) — пакет распакованный, но не установленный;
  • H — «недоустановленный» пакет;
  • C — пакет установленный, но не настроенный;
  • B — «сломанный» пакет.

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

Главное меню aptitude

Главное меню aptitude в интерактивном режиме выглядит следующим образом (см. рис. 1):

  • Действия (Actions);
  • Откат (Undo);
  • Пакет (Package);
  • Решатель (Resolver);
  • Поиск (Search);
  • Параметры (Options);
  • Окна (Views);
  • Помощь (Help).

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

$ LANG="POSIX" aptitude

В меню Действия имеются такие пункты (рис. 4):

  • Установить/удалить пакеты — выполнение соответствующих действий над отмеченными пакетами (что делается в пункте Пакет);
  • Обновить список пакетов — действие, аналогичное выполнению оператора update командного режима;
  • Mark Upgradable — пометить пакет как подлежащий обновлению;
  • Забыть о новых пакетах — не учитывать категорию New Packages;
  • Очистить кэш пакетов — аналогично выполнению оператора clean;
  • Очистить устаревшие файлы — аналогично выполнению оператора autoclean;
  • Играть в сапёра — здесь можно убить время в ожидании скачивания и установки пакетов;
  • Стать суперпользователем — если aptitude была запущена от пользователя обычного;
  • требует пароль root’а или (при использовании sudo) обычного пользователя;

  • Выйти — завершение сеанса.

Рис. 4. Меню Действия

Смысл пункта Откат понятен скорее по английски — только не подумайте, ради Бога, что тут вам заплатят какие-то деньги.

Смысл большинства пунктов меню Пакет вполне очевиден:

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

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

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

О пункте Поиск особо много говорить не приходится — легко догадаться, что через него осуществляется поиск пакетов вперед, назад (рис. 5). Здесь же можно отыскать и так называемые «сломанные пакеты» — этой теме много внимания уделено в упомянутой выше статье Тихона.

Рис. 5. Меню Поиск

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

Смысл пунктов меню Окна понятен без комментариев (рис. 6), и на них я останавливаться не буду.

Рис. 6. Меню Окна

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

Рис. 7. Меню Помощь

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

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

О прочих горячих клавишах можно прочитать в стать Тихона, встроенной справке или документации (man aptitude). Мы же перейдем к вопросу

О задачах и метапакетах

В списке категорий Задачи (Tasks) стоят на последнем месте, однако по значению эта категория далеко не последняя — именно выбором из нее определяется своеобразие каждого представителя семейства дистрибутивов Ubuntu.

К категории Задачи нередко применяется также термин метапакет — и мне он кажется предпочтительным. Понятие это пришло из FreeBSD, где под метапакетом (или метапортом) понимался просто список пакетов, вместе составляющих единый пакетный комплекс, и установка которого влекла за собой инсталляцию всех его компонентов. Например, установка метапакета KDE (или сборка одноименного метапорта) автоматически вызывает установку (сборку) всех пакетов этой системы — от kdelibs и kdebase до kdeedu, kdetoys и бессчетного числа пакетов интернационализации (kde-i18n-??).

В Ubuntu метапакеты также представляют собой списки пакетов реальных, однако собираются они по целевому назначению (рис. 8), чем и обусловлено их второе название — Задачи (Tasks).

Рис. 8. Меню Задачи — установка метапакетов

В число метапакетов входят:

  • dns-server — набор пакетов, обеспечивающих работу службы доменных имен;
  • edubuntu-desktop — набор пакетов, включающий рабочий стол и приложения одноименного дистрибутива, ориентированного на сферу образования;
  • edubuntu-live — то же, но для функционирования в качестве LiveCD (то есть без установки на винчестер);
  • edubuntu-server — то же в серверном исполнении;
  • kubuntu-desktop — метапакет, включающий KDE и основные его приложения;
  • kubuntu-live — то же для LiveCD;
  • lamp-server — джентльменский набор приложений для Интернет-сервера под Linux (традиционная аббревиатура от Linux, Apache, MySQL, PHP);
  • minimal — набор базовых пакетов; именно он устанавливается, если в меню инсталлятора выбрать пункт Install on command line System;
  • standard — набор утилит и приложений, стандартно присутствующих в любой Unix-системе;
  • ubuntu-desktop — рабочее окружение GNOME и набор GNOME- и Gtk-приложений;
  • ubuntu-live — то же для LiveCD;
  • xubuntu-desktop — рабочее окружение XFce и набор Gtk-приложений;
  • xubuntu-live — то же для LiveCD.

Как я уже сказал, именно установка соответствующего метапакета определяет специфику данного представителя семейства Ubuntu. Причем по умолчанию соответствующий метапакет (ubuntu-desktop, kubuntu-desktop, xubuntu-desktop, edubuntu-desktop) устанавливается на стадии начальной инсталляции с носителя одноименного дистрибутива (собственно Ubuntu, Kubuntu, Xubuntu, Edubuntu), делая его «самим собой».

Однако, если при инсталляции ограничиться минимальным набором (Install on command line System), а в дальнейшем доустановить один из метапакетов, то результат будет идентичный. Более того, если после обычной установки, скажем, Kubuntu, удалить метапакет kubuntu-desktop, заменив его на xubuntu-desktop, то мы получим систему, неотличимую от свежеинсталлированной Xubuntu.

Сама по себе установка метапакета происходит просто. Для этого достаточно через меню или клавишей «+» отметить нужный метапакет для установки и дважды нажать клавишу «g». Удаление метапакета осуществляется обратным порядком: отмечаем его клавишей нижнего подчеркивания (для «чистого» удаления» и опять дважды долбим по «g».

Список пакетов, устанавливаемых для каждой задачи, можно просмотреть, развернув соответствующий пункт списка метапакетов (рис. 9). Если не полениться и пролистать весь список, можно убедиться, что, за буквально единичными исключениями, пакеты в нем маркированы как автоматически установленные (то есть имеют дополнительный статус A).

Рис. 9. Состав метапакета (на примере KDE)

Это очень важно в концепции метапакетов. С одной стороны, именно благодаря автоматической связанности так легко можно сменить дистрибутив, просто удалив один метапакет и установив другой. Или — просто дополнить рабочее окружение еще одним вариантом (а то и всеми тремя, помимо текущего).

С другой стороны, связанность компонентов метапакета требует осторожного обращения с ними. Например, попытка избавиться «в лоб» (то есть обычной деинсталляцией типа remove или purge) от всякого рода экзотических шрифтов типа Деванагари, Теллугу и прочих (чрезвычайно востребованных, как вы понимаете, в наших широтах), или от столь же экзотических, сколь же необходимых, пакетов локализации на всех мыслимых и немыслимых языках Земного шара, приведет к тому, что, в случае с Kubuntu, например, вы лишитесь всего KDE, OOo и прочего, оставшись с «голым Васей», то есть метапакетом minimal. Пользователям Ubuntu и Xubuntu просьба не обольщаться — у них получится то же самое…

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

Автоматические зависимости и фиксация версий

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

Смириться — просто: достаточно переключить язык интерфейса KDE на English, чтобы избавиться от лицезрения смеси оксфордского с албанским.

Исправление же ситуации требует некоторых не совсем тривиальных действий. Напрашивающееся решение — подменить родной пакет kde-i18n-ru, установленный из репозитория Ubuntu, одноименным пакетом из Debian (где он собран на основании официального авторского пакета проекта KDE. Ну и зафиксировать его версию — дабы не произошло обратной замены при ближайшем же тотально апгрейде пакетов.

Но не тут-то было. Конечно, после этого мы получаем качественно русифицированное KDE и его приложения. Но удаление оригинального пакета kde-i18n-ru повлечет за собой и удаление ряда пакетов, связанных с ним автоматическими зависимостями — начиная с локально-зависимых компонентов OpenOffice.org и кончая даже пакетами базовой русификации — language-pack-ru, language-pack-ru-base, language-support-ru, результаты чего могут оказаться непредсказуемыми, вплоть до порчи локали.

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

  • отыскать все пакеты, связанные с kde-i18n-ru автоматическими зависимостями;
  • снять с них статус автоматически установленных;
  • зафиксировать версии каждого пакета, дабы они не обновились (вместе с зависимостями) при следующем апгрейде;
  • и только после этого заменить убунтийский kde-i18n-ru дебиановским аналогом.

Стоит ли овчинка выделки, и не проще ли остаться с полупереведенным KDE-интерфейсом (а то и просто с английским) — решать пользователю.

Другой способ избежать удаления пакетов русификации, связанных автоматическими зависимостями с kde-i18n-ru, будет рассмотрен в следующем разделе, в котором говорится

О настройках aptitude

Как уже говорилось, за интерактивные настройки aptitude отвечает меню Параметры (Options), включающее следующие пункты (рис. 10):

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

Рис. 10. Меню Параметры

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

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

Пункт Работа с зависимостями собственно и определяет поведение aptitude по умолчанию (рис. 12), каковые включают:

  • автоматическое разрешение зависимостей выбираемого пакета;
  • автоматическое исправление «сломанных» пакетов перед установкой или удалением;
  • отключение автоматической установки рекомендуемых (recommends) пакетов;
  • автоматическое удаление неиспользуемых пакетов

Рис. 12. Работа с зависимостями

Снятием или установкой соответствующих переключателей все или некоторые из этих умолчаний можно заменить на противоположные.

Кроме того, можно отключить автоматическое удаление некоторых, задаваемых маской, неиспользуемых пакетов. И это — второй способ сохранения пакетов русификации, связанных зависимостями с kde-i18n-ru, упомянутый в прошлом разделе. То есть нужно просто сконструировать маску (вроде *-ru*), под которую он подпадут — и никакие апгрейды им будут не страшны. Правда, некоторые пакеты охватить такой маской не удастся — и их придется все равно спасать вручную, как было описано выше.

В части Разное (рис. 13) можно установить автоматическое обновление кэша пакетов, удаление из кэша устаревших пакетов после загрузки новых, и, наконец, избавиться от необходимости двойного нажатия на клавишу «g» для выполнения заказанных действий над отмеченными пакетами (переключатель Показать, что будет сделано, перед тем, как делать).

Рис. 13. Разное

Наконец, если вы совсем запутались с опциями из предыдущих пунктов, пункт Отменить настройки позволит восстановить умолчальное состояние aptitude.

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