Журнал LinuxFormat - перейти на главную

LXF96:Hardcore linux:APT

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

Содержание

APT: Хитрости умельцев

Как раз когда вы подумали, что можете без опаски установить ПО, Пол Хадсон решил показать вам несколько мощных возможностей APT...

Первая буква в APT означает “advanced” [продвинутый], но если вы используете для него легковесную оболочку типа Synaptic, то он вдруг оказывается простоватым на вид, как будто он ничем не лучше RPM. Но вы ведь неспроста используете дистрибутив на базе Debian, верно? Конечно, если причина в любви к оформлению, с которым по умолчанию поставляется Ubuntu, то, вероятно, вам лучше перейти к отличному учебнику для начинающих на стр. 56.

Итак, похоже, остались одни профессионалы. Позвольте мне обрисовать то, что вы собираетесь терзать и брать на заметку в этом месяце. Вы изучите...

  • Как создать хранилище APT и восстановить настройки ваших приложений
  • Как автоматически выбрать самое быстрое зеркало Как очистить архив пакетов для экономии места на диске
  • Как автоматически заполучить и собрать пакеты исходных текстов
  • Как использовать apt-cache и apt-file для поиска пакетов и более!

Если ваш APT-опыт заключается лишь в установке программ, то вы узнаете многое. Если вы никогда до этого не использовали APT (без удобной оболочки), то вы узнаете еще больше. Сидите у моих ног и слушайте, пока я объясняю...

Самые основы

Advanced Packaging Tool [Продвинутый пакетный инструментарий] – это просто библиотека, известная как Libapt. Она также является оболочкой, поскольку всю тяжелую работу берет на себя dpkg – настоящее ядро менеджера пакетов Debian. APT отслеживает зависимости пакетов, вызывает для вас dpkg и запросто устанавливает приложения.

Итак, простая строка «установи мне программу» выглядит так:

 apt-get install foobar 

Если вы не можете найти пакет foobar, поищите командой

 apt-cache search foobar 

...или, в менее строгой форме, просто

 apt-cache search foo 

Проблема с нестрогостью, однако, в том, что вы получите всевозможные дурацкие совпадения – вышеприведенному запросу соответствует такая вещь, как lighttpt, потому что в его описании сказано «minimal memory footprint». Конечно, искатели поумнее используют перед шаблоном символ «крышки», например, так:

 apt-cache search ^foo 

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

Теперь, используя ваши невероятные навыки APT, запустите от имени суперпользователя (или используйте sudo в Ubuntu):

 apt-get install apt-file 

Именно в этот момент вы чудесным образом превращаетесь из героя командной строки в супергероя: apt-file позволяет вам запрашивать, к какому пакету принадлежат файлы или опрашивать пакет о содержащихся в нем файлах. Перед тем как начать, выполните apt- file update, потому что так собирается информационный кэш файлов. Теперь попытайтесь выполнить следующее и посмотрите, что происходит:

 apt-file search apache2ctl 

Будут просмотрены все доступные в вашей системе пакеты в поисках того, в котором находится файл apache2ctl, и в результирующем списке вы получите apache2.2-common, потому что он содержит этот файл. Вы можете также выполнять обратный поиск, то есть попросить apt-file вывести все файлы, содержащиеся в данном пакете:

 apt-file list apache2.2-common 

Итак, когда в следующий раз вы увидите подозрительный файл где-то в /bin или /usr/bin, обратитесь к своему приятелю apt-file.

Сила зеркал

Img 96 73 1.jpg

Если вы часто устанавливаете приложения, можно сберечь многие часы вашего времени, перенастроив APT на выбор зеркала с большей скоростью загрузки. А каждый сэкономленный час – это час для игры в Crack Attack, так что я уверен: быстрейшее зеркало вам обязательно нужно.

Если у вас чистый Debian, то в нем есть инструмент для зеркал, который выполнит за вас всю тяжелую работу: netselect-apt. Он основан на другом инструменте, называемом просто netselect, который прозванивает список серверов, проверяя время отклика. netselect-apt идет дальше, а именно а) загружает список серверов с debian.org, б) прозванивает их все, в) выбирает самый быстрый сервер и г) автоматически записывает новый файл sources.list для использования этого последнего.

Итак, выполните apt-get install netselect-apt для установки приложения, затем просто запустите netselect-apt и дайте ему поколдовать несколько минут. По окончании он запишет новый файл sources.list в текущий каталог, и вам надо открыть его и текущий файл sources.list один рядом с другим, чтобы вы могли вставить новый файл в существующую конфигурацию.

Если у вас не Debian, то, вероятно, у вас Ubuntu, а там имеется собственная прекрасная версия netselect-apt, встроенная в Synaptic. Поэтому:

  1. Запустите Synaptic из Система > Администрирование > Менеджер пакетов Synaptic.
  2. Перейдите в строке меню Настройки > Репозитории
  3. На вкладке Программное обеспечение Ubuntu, в списке выбора под заголовком Загрузить с выберите Другой...

В этом окне можно выбрать из списка конкретное зеркало в зависимости от страны, где вы находитесь, или щелкнуть на кнопке Выбрать лучший сервер, чтобы Ubuntu запустил netselect на основе списка серверов Ubuntu. Это потребует несколько секунд, но зато вы гарантированно получите наибыстрейший сервер из вам доступных.

Простое переформатирование

Что вам больше всего нравится в том, что менеджер пакетов управляет вашими программами? Бесспорно, две чаще всего указываемые функции – это легкость установки новых программ и автоматическое обновление, но одна из моих любимых – это возможность сохранить список выбранных вами программ в файле, чтобы прочитать позднее. На самом деле, будучи крупным потребителем виртуальных машин на нескольких ПК и имея возможность создавать список стандартных программ, которые мне нужно установить, я не должен в самый неподходящий момент проверять, не забыл ли какую-нибудь программу, потому что каждый ПК имеет одинаковый набор установленного ПО!

В APT эта магическая суперсила называется dpkg —get-selections. Он просматривает все установленные у вас программы и выводит их на экран. Например:

dpkg --get-selections > software 

Здесь список установленных программ будет сохранен в файле software: все до одного приложения, необходимые для воспроизведения состояния вашего ПК, теперь в нем. И если у вас есть резервная копия ваших документов (например, вашего каталога /home), то в комбинации с данным списком – это все, что необходимо для полного восстановления. Да, я понимаю, что многие пользователи Windows думают, что для безопасности им необходимо резервировать весь диск C:\, но у нас в Linux нет такой проблемы: в /bin, /sbin, /usr и им подобные все ПО поступает из менеджера пакетов – вот пусть он и помнит, какие файлы нам нужны!

Итак, сохранять список программ мы умеем, но ведь надо и восстанавливать этот список! Для этого вам необходим брат-близнец --get- selections, а именно (вы знали, вы знали!) --set-selections. Он читает данные пакетов строку за строкой, и мы закачаем в него содержимое pkglist – вот так:

dpkg --set-selections < pkglist 

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

apt-get dselect-upgrade 

Любое приложение, имеющееся в списке выбора, но не установленное, будет теперь установлено, так что идите попейте кофе и возвращайтесь обратно – у нас еще много магической работы!

Очистка пространства

Типы вроде меня устанавливают много приложений. Мой список --get- selections содержит более 3000 пакетов, так что после установки они занимают много места на диске. Но «для вашего удобства» APT любезно хранит все сжатые пакеты для всех установленных программ, чтобы очень быстро переустановить, если вы их удалили. На это уходит много места, потому что каждая программа съедает в два раза больше дискового пространства, чем ей нужно!

Посмотрите на каталог /var/cache/apt/archives. Если вы установили ваш дистрибутив сравнительно давно, то, вероятно, этот каталог содержит несколько сотен мегабайт ПО, которое бесполезно, если только вы не переустанавливаете программы на каждом шагу, чего большинство из нас не делает. Можно бы просто выполнить rm *, но это плохое решение: частично загруженные пакеты удалены не будут. Поэтому APT предоставляет нам два пути удаления этих старых пакетов:

 apt-get autoclean 
 apt-get clean 

Первый автоматически удалит архивные пакеты, которые сочтет старыми (то есть вы устанавливали их так давно, что шансы на то, что они вам нужны, невелики). Второй просто удаляет все архивные пакеты, старые или нет, освобождая, по существу, все занимаемое ими дисковое пространство. Если вам по жизни надо дурковать с недавно установленными пакетами, то опция autoclean как раз для вас. В противном случае обойдитесь простым clean.

Уборка мусора

Приложения удаляются командой apt-get remove имяпакета, но на самом деле это только половина работы: приложение-то удаляется, но остаются файлы его конфигурации. На вид это неумно, тем более что одна из самых ненавистных вещей в Windows – манера оставлять файлы, разбросанные повсюду в вашей системе! Но на практике это означает, что если вы когда-либо переустановите приложение, оно подключит и будет использовать существующие файлы конфигурации, так, как будто вы его не удаляли.

Если это раздражает вас, или вы помешаны на экономии каждого байта вашего дискового пространства, то вам необходима опция --purge для apt-get remove, заставляющая APT удалить все, что установила программа. Если вы опытный пользователь Synaptic, то --purge соответствует «Пометить для полного удаления».

Другая область, где APT может облегчить жизнь вашей системе – установка зависимостей ПО. Они явно необходимы, потому что без зависимостей ваши приложения не будут работать. Но что произойдет, если вы удалите некую программу? Я скажу вам, что: все зависимости, шедшие с ней, останутся в вашей системе, даже если они больше не нужны. Подумайте, сколько места на диске тратится даром!

И вновь APT спешит на помощь, со специальной командой: apt-get autoremove. Она сканирует вашу базу данных пакетов на предмет зависимых пакетов, которые больше не нужны, и удаляет их. Это сбережет немало пространства, особенно если вы устанавливали все библиотеки KDE для запуска уже неактуальных KDE-программ; но, с другой стороны, когда все эти зависимости понадобятся, их придется загружать снова. Помните, место на диске дешево.

Наверное, большинство людей использует APT ради его двоичных пакетов – тех классных предварительно собранных программ, которые «просто работают», потому что скомпилированы в системе, похожей на вашу. Но если вы иногда тоскуете по собирабельности (вот вам кандидат в орфографический словарь) Gentoo, то у Debian есть интересный компромисс: он позволяет вам, при желании, собирать пакеты самостоятельно. Нет, это не трудно – и да, вы получите все преимущества от сборки программ из исходных текстов. Так и вправду лучше, поскольку вы получите все дополнительные модификации, предусмотренные Debian для ПО, и оно действительно будет соответствовать двоичной версии, которую вы можете установить.

Прямиком к истокам

Для начала позаботьтесь о настройке вашего APT на загрузку файлов с исходными текстами из репозитория. Если вы используете чистый Debian, это означает, что вам необходима строка deb-src для каждой deb-строки в вашем файле sources.list. Если вы в Ubuntu, то вернитесь обратно в окно репозиториев в Synaptic и убедитесь, что выбран пункт Исходные тексты.

Теперь вы можете загрузить исходный текст пакета так:

apt-get -b source anjuta 

Выполнив эту команду – или ей подобную, для любого желаемого пакета – вы, вероятно, получите сообщение об ошибке типа «E: Child process failed» [Ошибка дочернего процесса]. Это практически бессмысленно, но если вы немного прокрутите вверх, то увидите нечто вроде ‘dpkg-checkbuilddeps: Unmet build dependencies’, означающее, что у вас установлено не все необходимое ПО, чтобы можно было собрать Anjuta.

Если бы вы компилировали Anjuta вручную, вам бы пришлось просмотреть список зависимостей и установить их одну за другой. Но с APT есть способ намного легче: apt-get build-dep. Он позволяет вам указать имя пакета и загрузить все требуемое ПО, чтобы сделать возможным сборку пакета из исходных текстов. Например:

apt-get build-dep anjuta 

Эта команда попросит APT загрузить требуемые библиотеки и инструменты и соберет все необходимое для компиляции ПО Anjuta, и вы сможете выполнить apt-get -b source anjuta вновь: на этот раз оно будет собрано из исходных текстов.

По завершении (а времени может уйти немало, в зависимости от размера компилируемого ПО), apt-get создаст пакет .deb, который можно установить напрямую, командой:

dpkg -i anjuta-some-version.deb 

Он установится при помощи менеджера пакетов, как и обычное приложение, но будет на 100% оптимизирован именно для конфигурации вашей системы.

Для вещей вроде Anjuta это в принципе не важно, но для приложений, зависящих от процессора, типа FFmpeg или Mplayer, отдача может быть намного большей – попробуйте сами!

Врезка

Upgrade и dist-upgrade

В APT есть два способа обновления программ: apt-get upgrade и apt-get dist-upgrade. Первый ищет обновления для всех программ в вашей системе, но не выполняет обновление, если для этого требуется установить или удалить другие пакеты для удовлетворения зависимостей. Второй обновляет все программы, даже если это требует каких-то добавлений или удалений, и это делает его фактически необходимым для обновления с одной версии дистрибутива до другой. APT относительно умен в обновлении приложений, потому что, делая выбор между обновлениями, выставляет приоритеты для наиболее важных программ.

Истинно продвинутые интерфейсы

Некоторые думают, что dselect – это хороший способ взаимодействовать с APT. Однако некоторые также думают, что версия Mr Tambourine Man от Уильяма Шатнера [William Shatner] тоже хорошая, поэтому я думаю, что нельзя угодить всем. Но если вам нравится мучительный, кошмарный опыт, когда ярлыки на экране кажутся не соответствующими тому, что вы на самом деле хотите сделать, то запустите dselect от имени суперпользователя. Это классическая оболочка командной строки для APT, и, в принципе, это Synaptic для командной строки. Новая, «улучшенная» оболочка – это Aptitude (просто выполните aptitude в командной строке), но, по нашему мнению, она еще непонятнее, чем dselect.

Персональные инструменты
купить
подписаться
Яндекс.Метрика