Управление пакетами в Ubuntu

Нечаянная ошибка в моей заметке "Байфлайер в Ubuntu" вызвала поток писем, что меня огорчило и... обрадовало: интерес к Ubuntu и, следовательно, к "Линуксу" среди простых пользователей в Беларуси, оказывается, растёт.

Первое, с чем сталкивается пользователь, впервые опробовав линуксную ОС после Windows, - необычность понятия "пакет". Однако ничего заумного в нём нет. Пакетная система работы с линуксным софтом порождена философией UNIX "делай только одну вещь". Грубо говоря, пакет - это архив, который содержит версию формата пакета, сжатую заархивированную управляющую информацию и сжатые заархивированные устанавливаемые файлы. Короче, архив в архиве. При этом пакет содержит только оригинальные файлы, а всякого рода часто встречающиеся общеупотребительные файлы включать в пакет не принято. Поэтому управляющая информация может включать в себя ссылки на другие пакеты, необходимые для работы, т.е. оговаривать так называемые "зависимости". Пример пакета: opera_11.01.1190_i386.deb. Здесь opera - наименование пакета, 11.01.1190 - его версия, i386 - признак, что пакет предназначен для компьютера c чипсетом архитектуры Intel не ниже 386, deb указывает, что пакет предназначен для ОС, совместимых с Debian GNU/Linux. Нередко интересуются, будет ли пакет, помеченный как i586 или i686, работать на конкретном интеловском компьютере. Узнайте класс своего процессора командой

cat /proc/cpuinfo

и обратите внимание на значение параметра cpu family. Это число должно быть больше или равно первой цифре, следующей за символом i в обозначении пакета. С процессорами AMD проще: пакеты помечаются как AMD64 или AMD32, в зависимости от разрядности процессора. И ещё: не устанавливайте 64-разрядные пакеты, если ваша ОС 32-разрядная: могут быть проблемы. Впрочем, при установке пакетов из репозиториев этого не должно случиться. Вот, собственно, и всё, что на первых порах надо знать о понятии "пакет".

ОС Ubuntu, потомок ОС Debian, обеспечивает пользователю несколько инструментов для управления пакетами. Основу составляют утилита apt (акроним от "Advanced package tool") и низкоуровневая утилита dpkg (акроним от "Debian package tool"). Кроме того, Ubuntu предлагает и другие интерфейсы к системе пакетов Debian GNU/Linux. К ним относятся в порядке возрастания уровня: псевдографический aptitude, графический Synaptic и, наконец, "Центр Приложений Ubuntu", который, в отличие от остальных, работает только с приложениями. Не буду рассматривать графические интерфейсы, их освоить легко, но возможности "не те". Также оставлю в покое aptitude как производное от apt. Порою встречающиеся утверждения, что aptitude лучше удовлетворяет зависимости, чем apt, считаю просто недоразумениями. Кроме кого, начиная с версии Ubuntu 10.10, aptitude удалён из дистрибутива. По моему убеждению, чтобы быть уверенным пользователем Ubuntu, осваивать следует apt и dpkg. Остальное приходит само собой.

 


apt

Возможности этого семейства утилит огромны. Как "Вести" уже сообщали (№№23, 26, 50 за 2008 г.), основная команда семейства - это apt-get install _наименование_пакета_. Можно устанавливать и сразу несколько пакетов, перечислив их наименования через пробелы. Тут важно понимать, что указываются только имена, ОС вытягивает из репозиториев именно то, что нужно для вашего компьютера и установленной сборки Ubuntu. При установке нового пакета инсталлятор проверяет, были ли ранее установлены пакеты, от которых зависит новый пакет, если нет, то пытается взять такие пакеты из доступных репозиториев. При недоступности таковых выдаёт ошибку. Но иногда следует указывать имена расширенные, которые включают в себя мажор версии пакета. Так поступают, если в репозитории находятся несколько версий и пользователю предоставляется возможность выбирать. Например, команда

sudo apt-get install virtualbox-4.0

сначала определит, не установлена ли другая версия virtualbox, если да, то с санкции пользователя "снесёт" её и установит именно virtualbox-4.0. А вот команда

sudo apt-get install virtualbox

просто попытается установить из репозиториев самую свежую версию этой замечательной виртуальной машины. При установке пакеты сначала попадают в кэш /var/cache/apt/archives, затем устанавливаются куда надо. Если очень интересно, куда, то это всегда можно узнать командой whereis, например, whereis virtualbox. По мере взросления вашей сборки Ubuntu в кэше накапливается много нужного и ненужного. Последнее занимает место и может быть удалено, о чём чуть позже.

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

sudo apt-get remove virtualbox

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

sudo apt-get --purge remove virtualbox

"снесёт" и конфигурационные файлы, и сам пакет в кэше.

Многие пакеты ОС Ubuntu обновляет в порядке штатной процедуры обновления, но только те, которые поддерживает компания Canonical, а также те, для которых обновления предоставляются сообществом Ubuntu. Остальные пакеты в пределах мажора версии можно обновлять самостоятельно. Например, команда

sudo apt-get upgrade opera -u

обновит ваш ранее установленный браузер Opera, повысив минор версии, если, конечно, таковая существует в репозитории, прописанном в /etc/apt/sources.list. При обновлении приложения строится дерево зависимостей, проверяются обновления для них и нередко обновляется не основной пакет, а только пакеты, от которых он зависит. Необязательная опция -u позволяет видеть, что именно обновляется. Кстати, теперь для добавления репозиториев нет необходимости редактировать файл /etc/apt/sources.list, достаточно воспользоваться командой add-apt-repository _источник_. Например, можно добавить источник deb-пакетов от Google вот такой командой:

sudo add-apt-repository "deb http://dl.google.com/linux/deb/ stable main"

После добавления нового источника пакетов никогда не забывайте проиндексировать список источников командой

sudo apt-get update

Если вы не знаете или забыли, какая версия пакета установлена и какие библиотеки он использует, то не стесняйтесь задать системе вопрос, например, командой apt-cache search _имя_пакета_, при этом мажор версии пакета, естественно, не указывается, например,

apt-cache search virtualbox

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

sudo apt-cache depends virtualbox-4.0

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

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

sudo apt-cache search all

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

sudo apt-get install apt-file

Имея в распоряжении apt-file, нетрудно найти директории, затронутые установкой конкретного приложения, например, virtualbox-4.0:

sudo apt-file search virtualbox-4.0

Для очистки кэша от устаревших пакетов, которые больше не скачиваются и не нужны, имеется очень полезная команда

sudo apt-get autoclean

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

sudo apt-get clean

Если надо убедиться, всё ли в порядке с пакетами, установленными в системе, то это проверяют командой

sudo apt-get check

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

sudo apt-get -f install

Я перечислил apt-минимум, которым должен владеть пользователь Ubuntu, желающий свободно управлять пакетным хозяйством своей системы, пополняемым из репозиториев. Однако, помимо пакетов из репозиториев, имеется огромное количество и других deb-пакетов, которые разработчики предлагают на своих сайтах. Чтобы воспользоваться этим богатством, нужно спуститься уровнем ниже.


dpkg

Об этой утилите "Вести" тоже рассказывали (№26, 2008 г.), но, по мнению автора, недостаточно и только в аспекте установки-удаления пакетов. Полную информацию об этой утилите можно почерпнуть в debianadmin.com/debianubuntu-package-management-using-dpkg.html. Я не рекомендую новичкам пользоваться этой утилитой для установки-удаления пакетов. dpkg не разрешает зависимости: если для устанавливаемого пакета требуются другие пакеты, то их нередко приходится устанавливать вручную. Кроме того, всякий раз при установке пакета требуется указывать путь к нему:

sudo dpkg -i /путь/пакет.deb

и выявлять зависимости командой:

dpkg --info /путь/пакет.deb

Неудобно! Проще скачанный пакет переместить из директория загрузок в вышеупомянутый кэш и установить его оттуда утилитой apt-get install, не указывая путь. Тем не менее, dpkg - весьма достойная утилита. Вот как без aptitude проще всего узнать, какие пакеты установлены в системе? Нет проблем:

dpkg -l

С помощью dpkg можно легко узнать, какая именно версия пакета установлена в системе и установлен ли пакет вообще; например, команда

dpkg -l 'virtualbox*'

выводит установленную версию виртуальной машины virtualbox, предваряя её суффиксом ii, но также выводит и старую версию пакета, если он не удалялся из кэша, предваряя его имя суффиксом rc. Более подробную информацию о версиях пакетов, по сравнению с предыдущей командой, можно получить, привлекая grep:

dpkg -l | grep 'virtualbox*'

Чтобы определить ширину колонок при выводе информации о пакетах, укажите её явно, например:

COLUMNS-150 dpkg -l 'virtualbox*'

Утилита dpkg также при желании позволяет посмотреть содержимое пакета:

dpkg -content /путь/пакет.deb


Вместо заключения

Зачем-то компания Canonical убрала из дистрибутива Ubuntu столь нужную утилиту gdebi, которая позволяла быстро установить скачанный deb-пакет двойным кликом по нему. Сейчас мы это исправим командой

sudo apt-get install gdebi

после чего свяжем любой deb-пакет с установщиком gdebi. Для этого щелкаем правой кнопкой мыши по любому deb-файлу в кэше, выбираем "Свойства" и в них помечаем, что пакет нужно открывать с помощью gdebi. Далее всё пойдёт, как в более ранних версиях Ubuntu.

Разумеется, управлять пакетами можно и мышью, воспользовавшись "Синаптиком" или "Центром Приложений". Но если вы желаете содержать систему в чистоте - не поленитесь, изучите, как можно управлять пакетами через терминал. Это необходимо, если хотите стать Повелителем Системы.

Михаил ГУРЧИК,
gor-mike@tut.by

Версия для печатиВерсия для печати

Номер: 

15 за 2011 год

Рубрика: 

На заметку
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!
 

Комментарии

Аватар пользователя v-tal
А как узнать, из какого источника был получен deb-пакет?
Аватар пользователя mike
>А как узнать, из какого источника был получен deb-пакет?

1) Источники имеют IP-адреса. Их надо перевести в цифровую форму. 2) Устанавливается логгер соединений, например, wireshark и настраивается на захват этих адресов с записью в лог-файл времени-даты установки соединений. 3) Система ведёт лог-файл /var/log/apt/history.log установки пакетов, в котором фиксируется время-дата и имена пакетов. 4) По временнОму пересечению логов находим адреса, с которых пакеты скачивались.

Если кто знает более простой способ или имеет готовый скрипт -- поделитесь.

Аватар пользователя Al
Mike, вот новое по убунте, может полезно: http://www.3dnews.ru/workshop/623861/
Аватар пользователя mike
Спасибо, в курсе. Убунте можно прикручивать разные столы, но пользуюсь Юнити + жесты. Обалденно удобно. При переходе на Венду в части рабочего пространства испытываю дискомфорт.
Аватар пользователя mike

>А как узнать, из какого источника был получен deb-пакет?

Также можно воспользоваться командой

apt-cahe policy pack_name

где pack_name -- это имя пакета. Правда, срабатывает только тогда, когда в системе есть информация из откуда именно пакет был установлен, а не скачан в какие-нибудь "Загрузки".