LXF79:aptitude

Материал из Linuxformat.

Перейти к: навигация, поиск

Подумали о морфологии? Напрасно – речь идет вовсе не о прилагательных. Тихон Тарнавский рассказывает о новом прогрессивном способе управления пакетами в Debian.

Содержание


О менеджере пакетов Debian – apt – известно уже давно и многим, и рассказывалось о нём не раз; и это не странно, так как он определённо заслуживает внимания. Странно другое: что вниманием этим до сих пор обделена программа, призванная заменить пользователю две основные утилиты из набора apt и уже сейчас справляющийся со своими обязанностями много лучше них. «Куда уж лучше?» – спросите вы. Читайте дальше. Здесь я расскажу о почти универсальном инструменте управления пакетами – aptitude (packages.Debian.org/aptitude) – и его богатых возможностях. И думается, новое и полезное в этих возможностях могут найти как апологеты командной строки, даже уже попривыкшие ко всему богатству, предоставляемому стандартными утилитами apt, так и приверженцы графических оболочек в лице synaptic. Потому как ни synaptic, ни apt-tools не обладают такими удобными и полезными функциями, как aptitudec – о них-то я и хочу вам рассказать. Ну и конечно же, новые пользователи Debian и основанных на нём дистрибутивов тоже могут найти для себя много интересного.

Программа aptitudec может работать как из командной строки, так и в интерактивном режиме, с которого мы, пожалуй, и начнём. Чтобы перейти в интерактивный режим, нужно просто запустить программу без параметров.

Азбука aptitude

После старта aptitudec перед нами предстаёт его незамысловатый текстовый интерфейс следующего вида.

В самой верхней строке экрана находится подсказка по основным клавишам, первая из которых, F10 или Ctrl-T, вызывает меню, появляющееся в той же верхней строке. Во второй строке в момент запуска написана только версия программы; в дальнейшем там будет появляться ещё сжатая информация об объёме, который будет дополнительно занят или, наоборот, освобождён при установке, удалении и обновлении выбранных вами пакетов, а также об объёме данных, которые необходимо будет скачать из Интернета. Остальная часть экрана по умолчанию разбита на две равные горизонтальные половины: в верхней отображается список пакетов, разделённый по категориям (каким именно – очень гибко настраивается, да и не столь важно в целях дальнейшего изложения); в нижней – описание того пакета или категории пакетов, которые выбраны в верхней половине в данный момент времени. В правой части списка пакетов напротив соответствующих имён расположены два столбца цифр. В первом из них отображается номер версии пакета, которая сейчас установлена в системе. Во втором – номер самой свежей версии, доступной во всех подключенных репозитариях; конечно, со сноской на Default-Release (см. «Памятку об apt-репозитариях»), если он задан.

Перемещаться вверх-вниз можно стрелками, клавишей Enter – сворачивать/разворачивать категории пакетов. Остальные управляющие клавиши в большинстве своём ничуть не более неожиданны: к примеру, для установки или обновления пакет отмечается клавишей +; для удаления – клавишей – ; для удаления вместе с конфигурационными файлами – «_», т.е. Shift+«–»; также можно зафиксировать пакет на текущей версии (т.е. запретить обновлять его при полуавтоматическом обновлении всего дистрибутива) с помощью клавиши =. Все эти отметки отображаются в интерфейсе программы своим цветом. Установленные в системе пакеты выделены жирным белым шрифтом. Пакеты, отмеченные для установки, выделяются зелёным фоном, для обновления – голубым, для удаления – фиолетовым. Белым фоном выделяются зафиксированные, а красным – сломанные (т.е. обладающие нарушенными зависимостями) пакеты. Текущее положение курсора отмечено инверсным выделением строки.

Как видите, перечисленными клавишами пакеты только помечаются для установки/удаления, никаких реальных действий по отдельному нажатию на каждую из них не происходит. После того, как вы выбрали необходимые пакеты для определённых действий, нажмите клавишу g (от «Go» – «поехали!») для того, чтобы выполнить их.

На самом деле, по первому нажатию ещё ничего не происходит – всего-навсего создается новый список всех пакетов, у которых должен измениться статус . Здесь, точно так же, как и раньше, можно скрывать/раскрывать категории пакетов; например, на приведенном рисунке свёрнута категория «фиксированные пакеты» – это те пакеты, которые оставлены не обновлёнными, хотя для них доступны более свежие версии. Одно из основных удобств в работе с программой – то, что все без исключения управляющие клавиши работают во всех без исключения видах списков пакетов (а их не так уж мало), причём не только на отдельных пакетах, но и на категориях. Например, в текущем списке вы можете установить курсор на строку «удаляемые пакеты» и одним нажатием на «_» удалить их вместе с конфигурационными файлами. Либо, если вы, к примеру, передумали обновлять все выбранные для обновления пакеты, нажать на строке «обновляемые пакеты» клавишу «:», которая отменяет обновление выбранных пакетов без их фиксации. После того, как вы убедитесь, что должны произойти именно те действия, которые вам нужны, вы можете ещё раз нажать g – теперь это уже приведёт к реальным операциям над пакетами (если вы запустили программу от имени обычного пользователя, то предварительно появится предложение ввести пароль root; думаю, не стоит акцентировать внимание на том, что aptitudec лучше запускать через sudo).

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

Статусы пакетов, как вы могли заметить по двум предпоследним иллюстрациям, помечаются не только цветами. Обратите внимание на два крайних левых символа перед название каждого пакета: первый из них обозначает текущее состояние, второй – действие, которое затребовано в отношении данного пакета. Значения этих символов достаточно понятны и просты для запоминания: каждый их них является первой буквой названия (англоязычного, естественно) того действия или состояния, которое и обозначает (см. врезку «Легенда aptitudec»).

Родословная aptitude

Герой нашей статьи является, на сегодняшний день, «вершиной эволюции» среди программ управления пакетами в Debian и основанных на нём дистрибутивах, таких как Ubuntu, Mepis или Knoppix. Родоначальником этого эволюционного древа стал dpkg, функционально аналогичный широко известному RPM. Dpkg способен производить определённые действия с одним отдельно взятым пакетом. Так как работать с каждым пакетом в отдельности очень неудобно, то в качестве надстройки над dpkg появилось семейство программ apt, условно называемое apt-tools, утилиты которого работают уже не с единичными пакетами, а со всей базой. Эти утилиты набрали такую популярность, что превратились в стандарт де-факто в управлении пакетами не только на исторической родине – в Debian; многие из них были переработаны и для обработки баз rpm-пакетов, и их совокупность даже стала стандарт-ным системным менеджером пакетов в некоторых rpm-дистрибутивах (например, Alt Linux). В самом Debian развитие средств управления пакетами на этом не остановилось и смогло породить нечто ещё более универсальное и автоматизированное, уже как надстройку над программами из состава apt-tools. Действительно, aptitude может всё, на что способна основная пара из набора apt – apt-get и apt-cache, плюс ещё немного, а большинство из общих с ними функций стали ещё более удобными для пользователя. Кроме того, aptitude может работать как в режиме командной строки, так и в качестве интерактивной оболочки с текстовым интерфейсом на базе NCurses. Все эти преимущества и привели к тому, что рекомендованным средством работы с пакетами в нынешней стабильной ветке Debian является уже не apt-tools, а именно aptitude.

Вернёмся к экрану предпросмотра действий над пакетами. Между меню и строкой статуса появилась ещё одна строка. Как нетрудно догадаться по её содержимому, она представляет собой перечень открытых списков. Когда мы нажали g и перешли в режим предпросмотра, основной список пакетов никуда не делся, а остался открытым на заднем плане. Вы можете перемещаться между открытыми списками с помощью клавиш F6/F7; можете закрыть текущий список клавишей q. Например, если вы изменили что-то в списке предпросмотра, вы можете его закрыть (q) и затем вызвать снова, уже для новых действий (g). Это может оказаться удобным потому, что в списке предпросмотра отображаются ещё и такие пакеты, которые не выбраны для установки, но рекомендуются или предлагаются устанавливаемыми пакетами; после внесения изменений вы, возможно, захотите посмотреть на новые рекомендации. Естественно, перед выходом из предпросмотра не обязательно что-то менять – можно просто вернуться к общему списку «по собственному желанию».

Я уже упоминал о том, что списков отображения в aptitudec довольно много; а рассказал пока только о двух из них – общем списке пакетов и списке предпросмотра. Третьим основным списком является список свойств пакета. Попасть в него можно, нажав Enter на любом пакете (на рис. 5 показана часть такого списка для пакета apt). Этот список также содержит свои категории, которые точно так же можно скрывать и отображать. В их число входит список зависимостей и обратных зависимостей разного уровня, описание пакета и список доступных версий. Такие списки довольно наглядны, но в большинстве своём слишком громоздки для того, чтобы работать с ними целиком. Поэтому их части доступны как отдельные списки, вызываемые своими управляющими клавишами. Вот наиболее часто используемые из них: список версий, доступный по клавише v (versions); список зависимостей – клавиша d (dependencies); и список обратных зависимостей, т.е. тех пакетов, которые сами зависят от данного – клавиша r (reverse dependencies). Особенно полезно бывает использовать эти возможности в сочетании: например, списки зависимостей часто бывают разными у разных версий одного и того же пакета. К зависимостям конкретной версии можно попасть из списка версий, выбрав в нём нужную и нажав на ней d.

Ад зависимостей

К чему я так много говорю об этих списках? Сейчас мы обсудим ещё одну важную тему. Важную в том смысле, что это одна из ключевых проблем всех существующих систем управления пакетами, и aptitudec даёт практически неограниченные возможности для ручного решения этой задачи. Речь о «сломанных» зависимостях. Например, вы выбираете какой-нибудь один пакет для обновления, и его новая версия зависит от новой версии некой библиотеки; в то же время среди оставшихся необновлёнными попался пакет, зависящий от более старой версии той же библиотеки (временами бывает, что в зависимостях версии прописаны строго, а не через >=) – всё, как минимум один из этих пакетов сломался. Что делать в таком случае? Всё достаточно просто. По клавише b находим сломанный (broken) пакет, заходим в его список версий. Действительно ли нам нужна именно сломанная версия? Если нет, выбираем другую (так же, как и в основном списке: +) – возможно, на этом проблема будет решена. Если нужна именно сломанная версия, посмотрите на нижнюю половинку экрана, там может быть уже приведена причина поломки (вместо описания пакета); если нет, то переключение между описанием и служебной информацией осуществляется клавишей i (info). Описание причины даёт вам понять, в какую сторону двигаться: в направлении прямых или обратных зависимостей (d или r соответственно).

Памятка об apt-репозитариях

Хотя это и не относится напрямую к aptitude, а касается и лежащего в его основе apt, напомним пару моментов касательно репозитариев deb-пакетов. Вероятно, Debian'щикам-новичкам эта информация окажется не лишней. Первый и основной файл настроек – это, конечно же, /etc/apt/sources.list. Вот простейший пример этого файла:

deb ftp://debian.org.ua/debian stable main contrib non-free
deb ftp://debian.org.ua/debian testing main contrib non-free
deb ftp://debian.org.ua/debian unstable main contrib non-free
deb ftp://debian.org.ua/debian experimental main contrib non-free

Второй момент, на который мне хочется обратить ваше внимание – это файл настроек /etc/apt/apt.conf. Конкретно, я хочу напомнить о такой опции, как Default-Release. Пример строки из файла apt.conf:

APT::Default-Release "testing";

Дело в том, что по умолчанию apt, равно как и aptitude, устанавливает для каждого пакета самую свежую версию, не глядя на то, в какой ветке она находится. Если же установлена упомянутая опция, apt и aptitude обращаться в первую очередь к указанной в ней ветке и, если нужный пакет в ней присутствует, выбирают именно его. Таким образом можно оставить всю систему в состоянии testing, даже если вы хотите установить один или несколько пакетов из unstable или даже experimental. Далее углубляться в возможности тонкой настройки с помощью этих двух файлов я не буду. Наиболее полную информацию о них вы можете найти в соответствующих man-страницах: man sources.list и man apt.conf.

В списках зависимостей также работает поиск сломанных пакетов (b). Если вам все ещё не ясны пути решения, можно нажать Enter на подсвеченной красным строке, чтобы открыть полное описание соответственного пакета, а оттуда, прямо с заголовка – перейти в список доступных версий (v). Продолжайте, пока проблема не будет решена. После этого клавишей q закройте всю последовательность открытых списков и переходите к следующей поломке, либо, если таковых не осталось, приступайте к выполнению (g).

Ручное исправление поломок может помочь всегда – нужно только понимать, как именно их устранять в каждом конкретном случае, но это дело привычки. Кроме того, в версии aptitudec 0.4.x появилась новая возможность: автоматическое разрешение зависимостей. Как вы можете видеть на рис. 2, при наличии сломанных пакетов в самом низу экрана появляется рекомендация рассмотреть предложенные программой варианты. Нажав, как подсказывает aptitudec, клавишу e, мы попадаем в список пакетов, которые предлагается: сохранить на текущей версии, обновить, установить, удалить. Если предложенное решение вас не устроит, клавишей «.» можно перейти к следующему, а клавишей «,» – вернуться к предыдущему. Когда подходящее вам решение будет найдено, вы можете его применить, нажав «!». Оптимальное решение рано или поздно обязательно будет найдено, но нередко бывает проще разрешить зависимости вручную, чем пересмотреть с полсотни предлагаемых вариантов. Именно поэтому я и уделил столько внимания ручному управлению – вам может пригодиться и то, и другое.

Ты где, пакетик?!

От приемов поиска сломанных пакетов мы плавно переходим к ещё одной очень объёмной теме: поисковым возможностям. Здесь я уже не буду вдаваться в подробности, а только перечислю некоторые функции. Поиск (так уж повелось) вызывается клавишей «/» и является инкрементным, т.е. выбор первого пакета, соответствующего критериям поиска, происходит прямо в процессе ввода. По умолчанию поиск ведётся по именам пакетов, но, используя управляющие символы, можно искать, к примеру, по описаниям или по состоянию пакета. Например, упомянутая выше клавиша b, поиск сломанных пакетов, – это всего лишь сокращение к «/~b», где «~» как раз и обозначает поиск по состоянию пакета. Аналогично можно искать, например, пакеты, от которых остались только конфигурационные файлы: «/~c». Когда вы полностью набрали искомую строку, вы можете закрыть окно поиска нажатием Enter и далее искать следующие вхождения этой же строки столь же традиционной клавишей n.

Ещё одно свойство aptitudec – оно же кардинальное отличие от apt-tools – никак нельзя обойти вниманием. В aptitudec пакеты имеют дополнительное свойство, говорящее о том, запросили ли вы этот пакет к установке вручную, или он установился автоматически для удовлетворения зависимостей. Сделано это для реализации одной очень удобной функции: автоматического удаления автоматически установленных пакетов, от которых уже ничего не зависит (лихо завернуто!). Это практически избавляет вас от необходимости ручных чисток. Пакет остаётся установленным у вас в системе только в двух случаях: либо вы сами решили, что он вам нужен, либо от него зависит что-то вам нужное; это сводит практически к нулю вероятность что-то случайно забыть в установленном состоянии. Кроме того, существует возможность самостоятельно пометить любой пакет как установленный вручную либо автоматически. Делается это соответственно клавишами m (от «manual») и M (Shift+m, вероятно, по аналогии с предыдущей). Эти клавиши, как и любые другие, действуют не только на отдельных пакетах, но и на категориях в любом списке. Например, вы можете нажать M на категории «libs», разом сделав все библиотеки установленными автоматически; т.е. те из них, от которых никто не зависит, будут удалены. Таким образом одним нажатием клавиши вы добьётесь действия, аналогичного умолчательному поведению отдельной утилиты управления пакетами – deborphan.

Это, пожалуй, практически всё, что я хотел сказать о работе с aptitudec. То есть, говорить, конечно, можно ещё очень и очень долго – возможностей он предоставляет несметное количество, и многие из них заслуживают внимания. Но всем сказанным почти исчерпалось то, чего не рассказать было просто нельзя. Под конец, для полноты картины, кратко затронем работу из командной строки.

CLI – великий и ужасный

В командной строке aptitudec предоставляет практически те же возможности, что и apt-get с apt-cache; чтобы не быть многословным, просто приведу список соответствий их параметров (см. врезку). Деление пакетов на «автоматические» и «установленные вручную» сохраняется и в режиме командной строки. Есть и ещё некоторые, менее существенные отличия от apt-tools, о которых вы можете прочитать в man aptitudec.

И в завершение мне остаётся только присоединиться к рекомендациям создателей дистрибутива: пользуйтесь aptitudec; думаю, вам понравится.

Легенда aptitude

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

i installed (установлен) install (установить)
d - delete (удалить без файлов настройки)
p purged (не установлен) purge (удалить полностью)
u - upgrade (обновить)
c config (удалён без файлов настройки) -
B broken (сломаны зависимости) broke (будут сломаны зависимости)

Aptitude вместо apt

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

aptitude apt
aptitude install / remove apt-get install / remove
aptitude purge apt-get remove --purge
aptitude reinstall apt-get install --reinstall
aptitude update / upgrade / dist-upgrade (начиная с Lenny - full-upgrade) apt-get update / upgrade / dist-upgrade
aptitude search apt-cache search
aptitude show apt-cache show
aptitude clean / autoclean apt-get clean / autoclean
aptitude markauto / unmarkauto нет аналогов

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

alias aptitude='sudo aptitude -f --with-recommends'

что означает:

Опция Значение
-f Принудительно исправлять неработоспособные пакеты.
--with-recommends Рекомендуемые пакеты будут трактоваться как строгие зависимости
Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию