Пакеты в debian как они есть


Содержание

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

Базовая конфигурация

APT использует файл, который содержит список «источников» из которых могут быть получены пакеты. Это файл /etc/apt/sources.list. Записи в этом файл обычно следуют формату:

Конечно, указанные выше записи приведены только для примера и не должны использоваться. Первое слово каждой линии, deb или deb-src, показывают тип архива: является ли эта строка ссылкой на бинарные пакеты (deb), которые являются прекомпилированными пакетами, которые мы обычно используем, или это это ссылки на исходные коды оригинальных программ, плюс контрольные файлы Debian (.dsc) и diff.gz, содержащие изменения необходимы для «дебианизации» программы.

В Debian версии 6.0.5, установленного загрузкой файлов из интернета, sources.list имеет следующее содержание:

Здесь представлены строки, необходимые для базовой установки Debian. Первый блок указывает на региональный архив основных файлов, второй — на обновления безопасности, а третий на обновления Debian.

Строки, начинающиеся с deb — ссылки на архивы бинарных пакетов, начинающиеся с deb-src — ссылки на архивы исходных кодов пакетов.

Файл /etc/apt/sources.list может содержать различные типы строк. APT умеет использовать архивы следующих типов: http, ftp, file (локальные файлы, то есть директории, содержащие примонтированные файловые системы типа ISO9660) и ssh, насколько мне известно.

Не забудьте запустить команду apt-get update после изменения файла /etc/apt/sources.list. Вы должны сделать это чтобы APT мог получить списки пакетов из указанных вам источников. Когда вы устанавливаете пакет APT получает необходимые файлы с хостов перечисленных в /etc/apt/sources.list, сохраняет их в локальном репозитарии (/var/cache/apt/archives/) и переходит к установке.

Основные утилиты для управления пакетами

dpkg – установщик пакетных файлов Debian
apt-get – утилита командной строки для APT
aptitude – имеет как псевдографический интерфейс, так и вариант для командной строки
synaptic – графический (gui) интерфейс для APT
dselect – менеджер пакетов на основе меню
tasksel – установщик задач

Для установки программ с помощью apt выполните следующее:

Утилита имеет следующие параметры:

-h — отобразить справку
-d — только загрузить пакеты, но не устанавливать их
-f — попытаться продолжить, если тесты целостности не пройдены
-s — ничего не делать, только провести симуляцию установки
-y — отвечать Да на все вопросы и ничего не спрашивать
-u — также отобразить список обновляемых пакетов.

Примеры использования apt-get

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

Обновление списка пакетов из источников, перечисленных в вашем файле sources.list:

Обновление программ с помощью APT:

Чтобы изменить список зеркал APT:

Искать пакет в локальном кэше:

Удалить программу с помощью APT:

Обновить список пакетов:

Обновить доступные списки пакетов:

Обновить все установленные пакеты:

Показать все установленные и удалённые пакеты:

Показать статус установки пакета:

Показать все пакеты, удовлетворяющие маске:

Показать пакеты, которые содержат строку:

Показать список файлов в пакете:

Показать статус пакета:

Показать детали пакета:

Показать связанные пакеты:

Установить пакет из deb файла:

Вычистить пакет из системы вместе с конфигурационными файлами:

Повторно запустить конфигурацию для пакета:

Получить исходные коды пакета:

Определяет зависимости для исходников и устанавливает их, если нужно:

Установить пакет из указанного релиза:

Предотвращает загрузку указанной программы при старте системы:

Параметр -u показывает список обновляемых пакетов:

Как узнать, какие пакеты могут быть обновлены?

apt-show-versions — это программа, которая показывает какие пакеты в системе могут быть обновлены и, кроме того, некоторую полезную информацию.

Управление пакетами с помощью aptitude

Aptitude является в настоящий момент предпочтительной системой для работы с APT (Advanced Package Tool). Она запоминает, какие пакеты были установлены напрямую Вами, а какие пакеты были установлены за счет зависимостей. Недавние пакеты будут автоматически удалены системой aptitude, когда они будут уже не будут требоваться какому-либо пакету, установленному напрямую. Aptitude имеет продвинутые функции фильтрации пакетов, но они могут быть сложны в настройке.

Обновление локального кеша доступных пакетов (ранее: apt-get update):

Обновить доступные пакеты (ранее: apt-get upgrade):

Обновить доступные пакеты, даже если это значит удаление части пакетов (ранее: apt-get dist-upgrade):

Установить пакет (ранее: apt-get install):

Удалить пакет (ранее: apt-get remove):

Удалить пакет и конфигурационные файлы (ранее: apt-get –purge remove):

Искать пакет с текстом «string» в имени или описании (ранее: apt-cache search string):

Показать подробную информацию о пакете (ранее: apt-cache show pkgname):

Удалить загруженные файлы пакетов (ранее: apt-get clean):

Удалить только файлы пакетов старых версий, но пакеты текущих версий оставить (ранее: apt-get autoclean):

Зафиксировать пакет на текущей версии и не обновлять его автоматически (ранее: не понятная команда echo-to-file):

Чтобы снять фиксацию следует использовать параметр unhold.

Оптимизированный sources.list

Вообще говоря, усилия для создания оптимизированного sources.list не дают особого улучшения.

apt-spy создает sources.list автоматически, на основе задержек и пропускной способности. netselect-apt создает более полный sources.list, но использует более простой метод выбора лучшего зеркала (сравнения времени пингов).

Команда dpkg-divert

Файловые «отклонения» (divertions) — это способ заставить dpkg не устанавливать файл в директорию по умолчанию, но устанавливать в измененную директорию. «Отклонения» могут быть использованы с помощью дебиановских скриптов управления пакетами для перемещения файла в другое место когда он вызывает конфликты. Системные администраторы также могут использовать «отклонение» для подавления конфигурационного файла пакета или в случае, когда некоторые файлы (которые не помечены как conffiles) должны быть сохранены системой dpkg во время установки новой версии пакета, содержащего эти файлы.

Что делать, если команда dpkg сломана

Сломанный dpkg делает невозможным установку любых .deb файлов. Процедура, описанная ниже, поможет вам в этой ситуации. Вам понадобится любая команда для браузинга сайтов, к примеру, links.

Для архитектуры i386, в URL может быть использована также ссылка http://packages.debian.org/dpkg

Локальный архив пакетов

Для того, чтобы создать локальный архив пакетов, совместимый с APT и системой dselect, пакеты должны быть созданы и занесены в особое дерево директорий.

Локальный deb репозитарий, похожий на официальный архив Debian, может быть создан следующим образом:

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

К этим архивам можно получить удаленный доступ, если предоставить доступ к этим директориям посредством HTTP или FTP и внести соответствующие изменения в файл /etc/apt/sources.list

Команда auto-apt

auto-apt — это приложение для установки пакетов по требованию.

Основные ошибки при управлении пакетами

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

1. Если Вы получили представленное ниже сообщение, когда пытались выполнить команду вида apt-get install package

то вы забыли выполнить команду apt-get update после того, как внесли изменения в файл /etc/apt/sources.list.

2. Если ошибка выглядит как эта:

в момент, когда вы пытаетесь воспользоваться одним из методов apt-get, кроме source, то у вас нет прав суперпользователя, то есть вы работаете под обычным пользователем.

Существует ошибка похожая на представленную выше, которая возникает когда вы запускаете две копии apt-get в одно и то же время или если вы даже пытаетесь запустить apt-get пока активен процесс dpkg. Единственный метод, который может использоваться одновременно с другими — это метод source.

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

и затем попробуйте заново провести установку. Может понадобиться выполнить вторую из представленных выше команд больше чем один раз. Это может быть хорошим уроком для тех приключенцев, которые любят использовать «не стабильный» софт.

The Debian GNU/Linux FAQ
Глава 6 — Основы системы управления пакетами Debian

6.1 Что такое пакет Debian?

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

Двоичные (Binary) пакеты, которые содержат выполняемые и конфигурационные файлы, страницы man/info, информацию об авторских правах и другую документацию. Эти пакеты распространяются в архивах специального формата Debian (см. Какой формат у двоичных пакетов Debian?, раздел 6.2); их обычно можно отличить по расширению ‘.deb’. Двоичные пакеты могут быть распакованы при помощи утилиты dpkg ; подробности даны в странице руководства.

Исходные (Source) пакеты, которые состоят из .dsc файла описывающего исходный пакет (включая имена файлов описанных ниже), .orig.tar.gz файла, содержащего оригинальный исходный текст программы в архивном формате tar.gz и, обычно, .diff.gz файл содержащий специфические для Debian изменения к оригинальным исходным текстам. Утилита dpkg-source запаковывает и распаковывает исходные архивы Debian; детали описаны на страницах руководства.

При установке программного обеспечения система управления пакетами использует «зависимости» (dependencies), которые тщательно определены сопровождающим пакет. Эти зависимости указаны в файле control , связанном с каждым пакетом. Например пакет содержащий GNU компилятор C ( gcc ) «зависит» от пакета binutils , в котором содержатся компоновщик и ассемблер. Если пользователь попытается установить gcc до того как установит binutils , то система управления пакетами (dpkg) выдаст сообщение об ошибке, содержащее указание на необходимость установить binutils , и прервет установку пакета. (Обычно, эта возможность может быть отключена настойчивым пользователем, см. dpkg(8) .) Более подробно смотри ниже в Что подразумевают говоря, что пакет Зависит/Рекомендует/Предполагает/Конфликтует/Заменяет/Предоставляет (Depends/Recommends/Suggests/Conflicts/Replaces/Provides) другой пакет?, раздел 6.9.

Инструменты управления пакетами Debian могут использоваться для:

манипуляций и управления пакетами и частями пакетов,

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

помощи разработчику в сборке пакетов,

помощи пользователю в установке пакетов, размещенных на удаленном FTP сервере.

6.2 Какой формат у двоичных пакетов Debian?

«Пакет» Debian, или архив Debian, содержит выполнимые файлы, библиотеки и документацию связанные с определенным набором программ или с множеством взаимосвязанных программ. Как правило, файл архива Debian имеет расширение .deb .

Внутренний формат двоичных пакетов Debian описан в странице руководства deb(5) . Этот внутренний формат может быть изменен (в различных выпусках Debian GNU/Linux), поэтому всегда используйте dpkg-deb(1) для различных манипуляций с файлами .deb .

6.3 Почему у пакетов Debian такие длинные имена?

Имена двоичных пакетов Debian удовлетворяют следующему соглашению: _ — .deb

Заметим, что foo полагается именем пакета. Для проверки имени пакета связанного с конкретным .deb файлом можно воспользоваться следующими методами:

просмотреть файл «Packages» в каталоге FTP сервера, где хранился архив Debian. Этот файл содержит блоки описаний для каждого пакета; первое поле в каждом блоке — имя пакета.

использовать команду dpkg —info foo_VVV-RRR.deb (где VVV и RRR — версия и ревизия проверяемого пакета). При этом, среди прочей информации, выводится имя пакета соответствующее архивному файлу.

Компонент VVV — номер версии определяемый разрабочиком программы. На формат версии нет каких либо ограничений, он может быть различным, напр., «19990513» или «1.3.8pre1».


Компонент RRR номер ревизии Debian, определяется разработчиком Debian (или конкретным пользователем, если тот хочет построить пакет сам). Этот номер соответствует количеству пересмотров, которому подвергся пакет, так, при каждом пересмотре, обычно, вносятся изменения в Debian Makefile ( debian/rules ), управляющий файл Debian ( debian/control ), сценарии инсталяции и удаления ( debian/p* ), или в файлы конфигурации используемые с пакетом.

6.4 Что это за управляющий (control) файл Debian?

Спецификации содержимого управляющего файла Debian приводятся в «Руководстве по пакетам Debian» (Debian Packaging manual), глава 4, см. Какая ещё документация существует для системы Debian?, раздел 11.1.

Короткий пример файла control для пакета Debian hello приведен ниже:

Поле Package определяет имя пакета. Это имя по которому инструменты упраления пакетами будут его опознавать. Обычно такое же, но не обязательно, как первая часть имени файла архива Debian.

Поле Version определяет версию разработчика и (в последнем компоненте) номер ревизии пакета данной программы как раскрыто в Почему у пакетов Debian такие длинные имена?, раздел 6.3.

Поле Architecture определяет тип процессора для которого был скомпилирован данный пакет.

Поле Depends содержит список пакетов, которые должны быть установлены для успешной установки данного пакета.

Installed-Size показывает сколько дискового пространства займет установленный пакет. Этот параметр может использоваться программами установки для определения остающегося дискового пространства.

Строка Section определяет «раздел», в котором хранится пакет Debian на FTP сервере. Это имя подкаталога (в одном из основных каталогов, см. Что содержат каталоги в FTP-архивах Debian?, раздел 5.1) в котором хранится пакет.

Поле Priority показывает насколько важным является пакет для установки; некоторые программы, напр., dselect или console-apt могут сортировать пакеты по категориям. См. Что такое Требуемый/Важный/Стандартный/Необязательный/Дополнительный (Required/Important/Standard/Optional/Extra) пакет?, раздел 6.7.

В поле Maintainer указан e-mail адрес человека, ответственного за поддержку данного пакета.

В поле Description дается краткое описание возможностей, предоставляемых пакетом.

Для более подробной информации о полях, которые может иметь пакет, смотрите главу 4 Руководства по пакетам Debian, «Управляющие файлы и их поля.»

6.5 Что такое Debian conffile?

Conffile содержит список файлов конфигурации (обычно помещаемых в /etc ), которые система управления пакетами не будет перезаписывать при обновлении пакета. Это гарантирует, что содержимое файлов конфигурации будет сохранено и позволяет обновлять пакеты не прерывая работу системы.

Чтобы точно определить, какие файлы сохраняются при обновлении, запустите:

и смотрите в строке «Conffiles:».

6.6 Что это за сценарии preinst, postinst, prerm и postrm?

Это выполняемые сценарии, которые автоматически запускаются перед или после установки пакета. Вместе с файлом control , эти файлы являются частью «управляющего» раздела архивного файла Debian.

Данный сценарий выполняется перед тем, как пакет будет распакован из .deb файла. Многие сценарии ‘preinst’ останавливают сервисы, которые будут обновлены пакетом, до завершения установки или обновления.

Этот сценарий, обычно, завершает требуемую настройку пакета после того, как он был извлечен из .deb файла. Часто, сценарий ‘postinst’ запрашивает у пользователя различные параметры и/или предупреждает пользователя, что если он примет значения по-умолчанию, то позже прийдется переконфигурировать пакет. Многие сценарии также ‘postinst’ выполняют команды, необходимые для запуска или перезапуска сервиса после установки или обновления пакета.

Этот сценарий, обычно, останавливает выполнение всех демонов, связанных с пакетом. Он выполняется перед удалением файлов, связанных с пакетом.

Этот сценарий, обычно изменяет ссылки или другие файлы, связанные с пакетом, и/или удаляет файлы созданные пакетом. (См. также Что такое виртуальный пакет?, раздел 6.8).

В настоящее время все управляющие файлы можно найти в каталоге /var/lib/dpkg/info . Файлы, относящиеся к пакету foo имеют имя «foo» и расширения «preinst», «postinst» и т.д. Файл foo.list в этом каталоге содержит список всех файлов установленных пакетом foo . (Заметим, что местонахождение файлов определяется dpkg; вам не следует полагаться на указанный каталог).

6.7 Что такое Требуемый/Важный/Стандартный/Необязательный/Дополнительный (Required/Important/Standard/Optional/Extra) пакет?

Для каждого пакета Debian создателями дистрибутива определен приоритет (priority), в качестве помощи для управления пакетами. Приоритеты следующие:

Требуемый (Required): пакет, который необходим для правильного функционирования системы.

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

Важные (Important) пакеты содержат программы, которые должны иметься в любой Unix-подобной системе.

Без этих программ не смогут работать или не будут обладать полной функциональностью другие пакеты. Сюда НЕ относятся Emacs, X11, Tex или любое другое большое приложение. Это пакеты образующие базовую структуру.

Стандартные (Standard) пакеты являются стандартными для любой Linux системы, включая сравнительно небольшие, но не слишком ограниченные, системы работающие только в текстовом режиме.

Это то, что будет установлено по умолчанию, если пользователь не выберет чего-либо еще. Сюда не относятся многие большие приложения, но входят такие, как Emacs и ограниченное подмножество TeX и LaTeX.

Необязательные (Optional) пакеты содержат все то, что вы, как правило, можете захотеть установить, если не вполне осознаете свои потребности.

Сюда входят X11, полный дистрибутив TeX, и множество других приложений.

Дополнительные (Extra): пакеты, которые либо конфликтуют с другими пакетами, имеющими более высокий приоритет, и применимые только тогда, когда вы знаете, что это такое, либо имеющие специализированные требования, которые делают их неподходящими для раздела «Optional».

6.8 Что такое виртуальный пакет?

Виртуальный пакет — это общее имя, применимое к любому из группы пакетов, все из которых обеспечивают выполнение какой либо функции. Например, программы tin и trn , обе являются программами для чтения новостей и должны удовлетворять зависимость программы, которая требует наличия в системе программы чтения новостей, для своей работы. Поэтому обе предоставляют «виртуальный пакет», называемый news-reader .

Аналогично, smail и sendmail обеспечивают функции почтового транспортного агента. Поэтому они предоставляют виртуальный пакет «mail transport agent». Если один из них установлен, то любая программа, зависящая от пакета mail-transport-agent , будет удовлетворена существованием данного виртуального пакета.

Кроме того, если в системе установлено более одного пакета, предоставляющего определенный виртуальный пакет, то Debian обеспечивает системного администратора механизмом, позволяющим определить один из этих пакетов предпочтительным. Для этого имеется команда update-alternatives , описанная далее в Некоторым пользователям нравится mawk, другим — gawk; некоторым — vim, другим — elvis; некоторым — trn, другим — tin; как осуществялется поддержка предпочтений в Debian?, раздел 10.10.

6.9 Что подразумевают говоря, что пакет Зависит/Рекомендует/Предполагает/Конфликтует/Заменяет/Предоставляет (Depends/Recommends/Suggests/Conflicts/Replaces/Provides) другой пакет?

В системе пакетов Debian введено понятие «зависимости» между пакетами, которое показывает насколько правильная работа Программы А зависит от существования Программы В на данной системе:

Пакет A зависит (depends) от пакета B, если B абсолютно необходим для работы A. В некоторых случаях, A не просто зависит от B, но дополнительно требует определенную версию B. В этом случае, обычно, накладывается требование, чтобы версия B была не ниже заданной.

Пакет A рекомендует (recommends) установку Пакета B, если сопровождающий пакета считает, что большинство пользователей не захотят пользоваться A не имея функциональности, предоставляемой пакетом B.

Пакет A поддерживает (suggests) Пакет B, если B содержит файлы относящиеся (и обычно расширяющие их) к функциям выполняемым пакетом A.

Пакет A конфликтует (conflicts) с Пакетом B, когда A не может работать, если установлен пакет B. Наиболее часто, конфликты возникают в случаях, когда A содержит файлы, заменяющие аналогичные, но содержащиеся в B. «Конфликты» часто сочетаются с «заменой».

Пакет A заменяет (replaces) пакет B, когда файлы установленные пакетом B удаляются и (в некоторых случаях) замещаются файлами пакета A.

Пакет A предоставляет (provides) Пакет B, когда все файлы и функциональность B обеспечиваются A.

Более подробная информация об использовании этих терминов может быть найдена в Руководстве по пакетам (Packaging manual) и в Руководстве по политике (Policy manual).

6.10 Что означает слово Pre-Depends (Пред-Зависимости)?

«Pre-Depends» это специальная форма зависимости. Большинство пакетов будут извлечены dpkg из архивных файлов независимо от того, существуют ли файлы от которых они зависят или нет. Проще говоря, dpkg извлекает файлы пакета из архива и помещает их на положенные места. Если пакет зависит от существования других пакетов, то dpkg откажется завершать установку (выполняя конфигурацию) до установки необходимых пакетов.

Однако, для некоторых пакетов, dpkg откажется даже распаковывать файлы до разрешения зависимостей. Такие пакеты указывают, что они «Pre-depend» от наличия других пакетов. Проект Debian обеспечивает механизм для безопасного обновления системы с формата a.out на формат ELF , где критичен порядок, в котором пакеты будут распакованы. Существуют и другие ситуации, когда может применяться этот метод.

Более подробная информация может быть найдена в Руководстве по пакетам.

6.11 Что означают слова неизвестно/установить/удалить/очистить/удерживать (unknown/install/remove/purge/hold) в статусе пакета?

Эти флаги определяют, что пользователь хочет сделать с пакетом (что определяется либо действиями пользователя при работе в разделе «Выбор» («Select») программы dselect , либо непосредственными обращениями пользователя к dpkg ).

неизвестно (unknown) — пользователь никогда не проявлял интереса к пакету.

установить (install) — пользователь хочет, чтобы пакет был установлен или обновлен.

удалить (remove) — пользователь хочет, чтобы пакет был удален, но не хочет удалять какие-либо из его файлов конфигурации.

очистить (purge) — пользователь хочет, чтобы пакет был удален полностью, включая его файлы конфигурации.

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

6.12 Как я могу перевести пакет в удерживаемое (hold) состояние?

Есть два пути, которыми можно перевести пакет в удерживаемое состояние — при помощи dpkg или dselect.

С dpkg, вы просто экспортируете список выбранных пакетов:

Затем редактируете полученный файл selections.txt , заменяете строку, содержащую выбранный вами для удерживания пакет, напр. libc6 , с:

Сохраняете файл и загружаете его в базу данных dpkg:

C dselect, вы просто переходите в меню Выбор (Select), находите нужный пакет и нажимаете клавишу ‘=’ (или ‘H’). Изменения вступят в силу сразу же после вашего выхода из режима Выбор.

6.13 Как я могу установить пакет исходных текстов?

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

(см. страницу руководства apt-get(8) ).

6.14 Как я могу построить двоичный пакет из исходного?

Вам необходимы foo_*.dsc, foo_*.tar.gz и foo_*.diff.gz файлы для компиляции исходного текста (для родных пакетов Debian файла .diff.gz может не быть).

Если у вас есть эти файлы и установлен пакет dpkg-dev , то следующая команда:

извлечет пакет в каталог foo-version .

Если вы хотите скомпилировать пакет, то перейдите в каталог foo-version и выполните команду

для компиляции программы, затем

как пользователь root, для сборки пакета, и затем

Как посмотреть список установленных пакетов в Debian или Ubuntu

В любой операционной системе бывает полезно посмотреть что же там установлено. Когда просматриваешь установленные приложения в Windows, узнаешь для себя много нового (всевозможные бары и плагины, которые ставятся автоматически с какой-нибудь нужной программой). В Linux Все попроще, в системе устанавливаются только те пакеты, которые Вы явно указали (все вспомогательные пакеты всегда указываются без обмана), но придя на новое рабочее место всегда интересно посмотреть как же “устроен” сервер и что наустанавливал на него предыдущий админ.

До сегодняшнего дня я даже и не знал об этих командах. Для того чтобы не забыть о них самому я, выкладываю их в блоге. Если заметили, я часто так делаю :)

Вывод списка всех установленных пакетов

Если необходимо просто вывести на экран список всех пакетов, которые есть в системе, то сделать это можно командой:

Выглядит это так:

Это всего лишь часть кода. В жизни его в разы больше.

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

Способ номер раз

Перенаправить весь вывод в текстовый файл (package.txt):

Способ номер два

С точным вхождением

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

Пример выведет все установленные пакет, где есть фраза libreoffice.

P.S. Если у вас есть блог, то не стоит отказываться от лишнего трафика, который могут нести соц. сети. Сетей много, начиная от ВКонтакта и заканчивая Pinterest. Кстати, как добавить кнопку «Pin It» от Pinterest отлично описано на wpincode.com. Добавить такие кнопки можно как на WordPress, так и на самописный движок.

  1. topic23 опубликовал 10 Март 2014, 18:58 #

Честно говоря это самые первые команды любого линуксоида. Когда вы устанавливаете дистрибутив Линукс вручную, как это было в конце 90-х на RedHat-подобных дистрибутивах, то выбор пакетов при установке как правило производился именно вручную. И потом для облегчения и заточки системы обязательно требовалось пройтись по списку ручками при помощи команды rpm. Сейчас конечно проще. Графический интерфейс установки и кнопки “далее-далее”.

  • itshaman опубликовал 11 Март 2014, 19:03 #

Мое изучение Linux началось с Ubuntu 7.04 и там как-то неприходилось просматривать из консоли установленные пакеты. Помню, раньше я вообще старался консоль не использовать, думал, что чего в ней удобного. Это сейчас я 60% своего времени и дома и на работе пользуюсь консолью.


Ну, и к тому же, самое главное, что я все же добрался до этих команд хоть и путь до них был долог))

Спасибо, помогло, периодически ставлю на «чистую» новую Ubuntu, с нужным мне набором программ. Да и терминаЛище Ррулит, конечно же

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

Для установки ПО в Debian чаще всего используются двоичные (binary) пакеты — файлы с расширением deb. DEB пакет обычно содержит исполняемые файлы, файлы настроек, справочные страницы в форматах man и информацию о необходимых для его работы зависимостях. Для распаковки deb пакетов можно использовать утилиту dpkg.

При установке программного обеспечения система управления пакетами проверяет и при необходимости устанавливает «зависимости» (dependencies), которые подобраны создателями пакета. Эти зависимости указаны в файле control, имеющемся в каждом пакете.

Программы для управления пакетами в Debian

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

Важно понимать, что высокоуровневые инструменты управления пакетами, такие как aptitude или dselect , для управления пакетами используют apt , который, в свою очередь, использует dpkg .

Подробнее об инструментах управления пакетами Debian написано в Chapter 2. Debian package management справочнике Debian.

8.1.1 dpkg

Это основная программа управления пакетами. dpkg может вызываться с многими параметрами. Наиболее часто используемые из них:

  • Показать список всех параметров:
    dpkg —help
  • Показать управляющий файл (и другую информацию) для указанного пакета:
    dpkg —info foo_VVV-RRR.deb
  • Установить пакет на жёсткий диск (т. е. распаковать и настроить):
    dpkg —install foo_VVV-RRR.deb
  • Распаковать архив Debian на жёсткий диск (но не настраивать):
    dpkg —unpack foo_VVV-RRR.deb . Учтите, что в результате данной операции пакет не обязан быть в рабочем состоянии; для правильной работы может потребоваться внесение изменений в некоторые файлы. Данная команда удаляет любую ранее установленную версию программы и запускает сценарий preinst указанного пакета (см. Зачем нужны сценарии preinst, postinst, prerm и postrm?, раздел 7.6).
  • Настроить пакет, который был распакован ранее:
    dpkg —configure foo . Кроме всего прочего, эта команда запускает сценарий postinst указанного пакета (см. Зачем нужны сценарии preinst, postinst, prerm и postrm?, раздел 7.6). Она также обновляет файлы, перечисленные в

    conffiles . Обратите внимание, что в качестве аргумента для параметра configure указывается имя пакета (т. е. foo), а не имя файла-архива Debian (т. е. foo_VVV-RRR.deb).

  • Извлечь единственный файл с именем «blurf» (или группу файлов с именами по шаблону «blurf*») из архива Debian:
    dpkg —fsys-tarfile foo_VVV-RRR.deb | tar -xf — blurf*
  • Удалить пакет (но не его файлы настроек):
    dpkg —remove foo
  • Удалить пакет (вместе с файлами настроек):
    dpkg —purge foo
  • Вывести состояние установки пакетов, содержащих в имени строку (или регулярное выражение) «foo*»:
    dpkg —list ‘foo*’

8.1.2 APT

APT (Advanced Package Tool) — расшифровывается как усовершенствованный инструмент управления пакетами, в него входит программа apt-get . Эта программа позволяет легко получать и устанавливать из командной строки пакеты из разных источников. В отличие от dpkg , программа apt-get не понимает файлы .deb, она работает с именами пакетов, и может устанавливать архивы .deb только из источников, указанных в файле /etc/apt/sources.list . После скачивания архивов .deb команда apt-get запускает dpkg .[5].

Часто используемые команды apt-get :

    Обновить список пакетов, имеющихся в источниках:

(вы должны регулярно запускать эту команду для обновления списка пакетов)

  • Обновить все пакеты в системе (без установки дополнительных пакетов или удаления пакетов):
  • Установить пакет foo и все его зависимости:
  • Удалить пакет из системы:
  • Удалить из системы пакет и все его файлы настроек:
  • Обновить все установленные в системе пакеты с установкой или удалением дополнительных пакетов, если это потребуется для обновления какого-то пакета:

    upgrade оставит старую установленную версию пакета, если для разрешения новых зависимостей при обновлении потребуется установка дополнительных пакетов. Команда

    dist-upgrade менее консервативна.)

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

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

В комплект инструментов apt входит также программа для обработки запросов по списку пакетов apt-cache . Её можно использовать для поиска пакетов, имеющих определённую функциональность, с помощью простых текстовых запросов или регулярных выражений, а также для получения списка зависимостей из системы управления пакетами. Часто используемые команды apt-cache :

  • Найти пакеты, содержащие в своём описании слово :
  • Показать подробную информацию о пакете:
  • Показать зависимости пакета:
  • Показать подробную информацию о доступных версиях пакета и о пакетах, от него зависящих (об обратных зависимостях пакета):

Дополнительную информацию можно найти в справочных страницах apt-get(8) , sources.list(5) из пакета apt и в файле /usr/share/doc/apt-doc/guide.html/index.html из пакета apt-doc .

8.1.3 aptitude

aptitude — это пакетный менеджер для систем Debian GNU/Linux, предоставляющий пользовательский интерфейс для инфраструктуры управления пакетами apt. aptitude имеет текстовый интерфейс, написанный с использованием библиотеки curses, позволяет удобно и быстро выполнять задачи управления пакетами.

Помимо функциональности dselect и apt-get , aptitude реализует много других дополнительных возможностей, которых нет ни в одной из этих программ:

  • обеспечивает лёгкий доступ ко всем версиям пакета;
  • позволяет легко отслеживать устаревшее ПО, занося его в «список устаревших пакетов и пакетов, созданных локально»;
  • включает достаточно мощную систему поиска и ограничения отображаемых пакетов. Пользователи, знакомые с mutt , освоятся быстро, так как синтаксис регулярных выражений был навеян этой программой;
  • можно использовать для установки заранее сформированных наборов для определённых задач. Подробности см. вtasksel, раздел 8.1.5;
  • в полноэкранном режиме имеет встроенную функциональность команды su и может запускаться от обычного пользователя. Когда действительно понадобятся права администратора, вызовет su (и, если нужно, запросит пароль суперпользователя).

С aptitude можно работать, используя визуальный интерфейс (просто запустить

aptitude ), или непосредственно из командной строки. Используемый синтаксис командной строки очень похож на синтаксис apt-get . Например, для установки пакета foo , можно выполнить

aptitude install foo .

Заметим, что aptitude является предпочтительной программой для ежедневного управления пакетами из консоли.

Более подробную информацию можно найти в справочной странице aptitude(8) и в пакете aptitude-doc .

8.1.4 synaptic


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

8.1.5 tasksel

Иногда бывает трудно найти подходящий комплект пакетов для выполнения определённой задачи. Разработчики Debian определили

задачи , представляющие собой наборы из нескольких пакетов Debian, предназначенных для определённой деятельности. Задачи можно устанавливать с помощью программы tasksel или aptitude .

Обычно программа установки Debian автоматически устанавливает задачу создания стандартной системы и окружения рабочего стола. Тип устанавливаемого окружения рабочего стола зависит от используемого носителя CD/DVD, как правило это рабочий стол GNOME (задача

gnome-desktop ). Также, в зависимости от ваших ответов во время установки, могут быть автоматически установлены другие задачи. Например, если вы выбрали какой-то язык, то также автоматически будет установлена задача, связанная с ним, и если программа установки обнаружит, что установка происходит на переносном компьютере, то также автоматически будет установлена задача

8.1.6 Другие инструменты управления пакетами

8.1.6.1 dselect

Данная программа предоставляет меню-ориентированный интерфейс для системы управления пакетами Debian. Для woody и более ранних версий это был основной интерфейс управления пакетами для первоначальной установки системы, но сейчас пользователям вместо неё предлагается использовать aptitude . Некоторым пользователям может быть более удобно пользоваться aptitude , к тому же это рекомендуемая замена для dselect при масштабных обновлениях. Подробности об aptitude см. в aptitude, раздел 8.1.3.

Основные возможности dselect :

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

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

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

Метод (Access) или

Выбрать (Select) , то dselect просто продолжит выполнение указанного действия. Например, если пользователь выбрал действие

Удалить (Remove) , то dselect выполнит удаление всех файлов, помеченных для удаления пользователем, которые он выбрал в меню

Выбрать (Select) ранее.

Выбрать (Select) позволяют войти в дополнительные меню. В обоих случаях, меню представляют собой экран, разделённый надвое; в верхней части представлен список выбираемых пунктов, в нижней части выводится описание («справка») по каждому пункту.

Доступна подробная справка; к ней можно обратиться в любой момент, нажав клавишу «?».

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

  • Начните с выбора метода доступа (Access Method). Здесь выбирается способ, с помощью которого пользователь получает доступ к пакетам Debian; например, у некоторых есть компакт-диски с пакетами Debian, другие же скачивают эти пакеты по FTP. Выбранный «метод доступа» сохраняется и после выхода из dselect , поэтому, если он не изменился, то нет необходимости вызывать этот пункт меню каждый раз.
  • Затем обновите (Update) список доступных пакетов. Для этого dselect читает файл «Packages.gz», который находится в верхнем уровне дерева каталогов, в котором хранятся пакеты Debian (если его там нет, dselect предложит его создать).
  • Выберите (Select) нужные пакеты для установки в систему. После выбора данного пункта меню, пользователю будет показан экран помощи (если в командной строке не указан параметр «—expert»). После выхода из экрана помощи, будет показано разделённое меню для выбора устанавливаемых (или удаляемых) пакетов.Верхняя часть экрана представляет собой относительно узкое окно со списком 29000 пакетов Debian; нижняя часть экрана содержит описание пакета или группы пакетов, которые выделены выше.Для указания пакета или группы, над которым будет совершаться операция, следует навести подсветку на название пакета или метку группы. После этого можно выбрать требуемую операцию; Для установки: нажмите клавишу «+».

    Для удаления: пакеты можно удалить двумя способами.

    • Удалить (removed): эта команда удаляет большинство файлов принадлежащих пакету, но оставляет файлы, помеченные как настроечные (см. Зачем нужен файл conffile?, раздел 7.5) и информацию о настройке пакета. Выполняется нажатием клавиши «-».
    • Вычистить (purged): команда удаляет все файлы пакета. Выполняется нажатием клавиши «_».

    Заметим, что невозможно удалить «все пакеты». Если вы попытаетесь это сделать, то система будет сокращена до первоначально установленных базовых пакетов.

    Для «фиксации» Фиксация выполняется нажатием «=», и указывает dselect не выполнять обновление пакета, даже если установленная версия устарела по сравнению с той, что имеется в используемом вами хранилище пакетов Debian (указанном через метод доступа (Access Method), и инициализируемом при выполненииобновления (Update)).

    Если пакет зафиксирован, то вернуть его в нормальное состояние можно, нажав «:». Это указывает dselect , что пакет может быть обновлён, если доступна более новая версия. Такая настройка используется по умолчанию.

    Вы можете выбирать различный порядок показа пакетов, используя клавишу «o» для переключения между режимами сортировки. Изначально пакеты отсортированы по приоритету; в пределах каждого приоритета пакеты представлены в порядке появления в каталоге (также называемого разделом), в котором они хранятся. При задании такого порядка сортировки, сначала могут отображаться пакеты из раздела A (как пример), потом какие-то из раздела B, а за ними ещё пакеты (с меньшим приоритетом) из раздела A.

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

    Если вы выбрали пакет для установки или удаления, например, package/foo.deb , и этот пакет зависит от других пакетов (или рекомендует их), например, package/blurf.deb , то dselect выведет дополнительный экран, подобный основному экрану выбора. Там среди пакетов, относящихся к данному, вы сможете выбрать те, что следует установить. Вы можете принять предлагаемый вариант или отказаться от него. В последнем случае следует нажать Shift-D; для возврата к предлагаемому варианту нажмите Shift-U. В любом случае, свой выбор можно сохранить нажатием Shift-Q.

  • Возвратившись после выбора пакетов в главное меню, вы можете выбрать «Установить» (Install) для установки и настройки выбранных пакетов. Если вы отметили пакеты для удаления, то можете выбрать пункт «Удалить» (Remove). В любой момент времени можно выбрать пункт «Выход» (Quit) для выхода из dselect; при этом выбор пакетов, отмеченных для установки и удаления, dselect сохранит.

8.1.6.2 dpkg-deb

Данная программа позволяет манипулировать файлами-архивами Debian (

.deb файлами). Часто используемые команды:

  • Вывести список допустимых параметров:
    dpkg-deb —help
  • Определить, какие файлы содержатся в файле-архиве Debian:
    dpkg-deb —contents foo_VVV-RRR.deb )
  • Извлечь файлы из указанного архива Debian в определённый пользователем каталог:
    dpkg-deb —extract foo_VVV-RRR.deb tmp извлечёт все файлы из

    foo_VVV-RRR.deb в каталог

    tmp/ . Это удобно для просмотра содержимого пакета в отдельном каталоге без его установки в основное дерево каталогов.

  • Извлечь из пакета файлы с управляющей информацией:
    dpkg-deb —control foo_VVV-RRR.deb tmp .

Учтите, что любые пакеты, просто распакованные командой

dpkg-deb —extract , будут установлены некорректно, для установки следует использовать

Дополнительную информацию можно найти в справочной странице dpkg-deb(1) .

8.1.6.3 dpkg-split

Эта программа делит большие пакеты на файлы меньшего размера (например, для записи на дискеты), а также может использоваться для объединения набора разделённых файлов обратно в один файл. Она может использоваться только в системах Debian (т. е. в системах, содержащих пакет dpkg ), т. к. вызывает программу

dpkg-deb для разделения файла пакета на отдельные компоненты.

Например, для того чтобы разделить большой .deb файл на N частей, нужно:

  • Выполнить команду
    dpkg-split —split foo.deb . В результате в текущем каталоге получится N файлов, приблизительно по 460 Кбайт каждый.
  • Скопировать эти N файлов на дискеты.
  • Скопировать содержимое дискет на жёсткий диск другой машины.
  • Объединить эти части файлов вместе командой
    dpkg-split —join «foo*» .

8.2 Говорят, что Debian способен обновить работающую программу; как это делается?

Ядро (файловая система) в системах Debian GNU/Linux поддерживает замену файлов, даже когда они используются.

Мы также предоставляем программу start-stop-daemon , которая используется для запуска служб при загрузке компьютера или их останова при изменении уровня выполнения (например, при переключении из многопользовательского в однопользовательский или для выключения компьютера). Эта же программа используется сценариями установки при установке нового пакета со службой, для остановки работающей службы и её перезапуска при необходимости.

8.3 Как узнать, какие пакеты установлены в системе Debian?

Чтобы получить список всех установленных пакетов, выполните команду

Эта команда выведет для каждого пакета однострочную сводку, включающую два символа состояния (объясняемые в заголовке), имя пакета, установленную версию и краткое описание.

Чтобы узнать состояние пакетов, имена которых начинаются с «foo», выполните команду:

Чтобы получить более подробный отчёт о состоянии определённого пакета, выполните команду:

8.4 Как посмотреть список файлов установленного пакета?


Чтобы вывести список файлов установленного пакета

foo , выполните команду

Учтите, что файлы, созданные сценариями установки, не отображаются.

8.5 Как определить пакет, которому принадлежит определённый файл?

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

foo , выполните одну из следующих команд:

    dpkg —search имя_файла Эта команда ищет

имя_файла в установленных пакетах. (Это, в настоящий момент, эквивалентно поиску всех файлов с расширением

.list в каталоге

/var/lib/dpkg/info/ и выводу имён всех пакетов, которые содержат заданное имя файла и отклонения (diversions).)

Более быстрая альтернатива этому — программа dlocate .

    zgrep foo Contents-ARCH.gz Эта команда ищет файлы, содержащие в своих полных именах путей подстроку

    Contents-ARCH.gz (где ARCH представляет нужную архитектуру) расположены в основных каталогах пакетов (main, non-free, contrib) на FTP-сайте Debian (то есть, в

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

    foo , пользователю нужно искать более чем в одном файле

    Преимущество этого метода над

    dpkg —search состоит в том, что будут найденыфайлы в тех пакетах, которые могут быть не установлены в вашей системе.

    apt-file search foo Если вы установите пакет apt-file , то приведённая выше команда выполнит поиск файлов, содержащих в своих полных путях подстроку или регулярное выражение

    foo . Преимущество этой команды перед приведёнными ранее в том, что вам не нужно будет получать файлы

    Contents-ARCH.gz , так как это будет сделано автоматически для всех источников, описанных в /etc/apt/sources.list , при запуске (с правами суперпользователя) команды

    8.6 Почему при удалении «foo» не удаляется «foo-data»? Как вычистить старые неиспользуемые пакеты библиотек?

    Некоторые пакеты разделены на программы («foo») и данные («foo-data») (или на «foo» и «foo-doc»). Так в Debian сделано для многих игр, мультимедийных приложений и словарей, и объясняется это тем, что некоторым пользователям может быть нужно получить только данные без установки программ, или эти программы могут работать без данных, что делает их установку необязательной.

    Подобное относится и к библиотекам: обычно они устанавливаются, так как пакеты приложений зависят от них. Когда пакет приложения вычищается, пакет библиотеки может остаться в системе. Или когда пакет приложения больше не зависит, скажем, от libdb4.2, а зависит от libdb4.3, то пакет libdb4.2 может остаться в системе при обновлении пакета приложения.

    В таких случаях «foo-data» не зависит от «foo», поэтому при удалении пакета «foo» большинство инструментов управления пакетами не станет удалять его автоматически. То же самое относится и к пакетам библиотек. Это необходимо для избежания циклических зависимостей. Тем не менее, если для управления пакетами вы используете программу aptitude (см. aptitude, раздел 8.1.3), то она отслеживает автоматически устанавливаемые пакеты и удаляет их, когда в системе не остаётся пакетов, от них зависящих.

    Управление пакетами в Debian: 1 комментарий

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

    Записки программиста

    Памятка по управлению пакетами в Debian и Ubuntu

    15 августа 2012

    Помните, как некоторое время назад у меня не срослось с установкой FreeBSD на Asus Eee PC 1215P и я был вынужден поставить Xubuntu? Тот случай неиллюзорно намекнул мне, что поддержка железа операционной системой имеет большее значение, нежели я полагал. Притом не только на десктопе — на серверах также требуется поддержка сетевых карт, RA >А теперь я понял еще кое-что. Система управления пакетами во FreeBSD очень далека от совершенства. Это вынужден признать даже такой фанат Фряшки, как я.

    Вот некоторые из проблем, с которыми сталкивается пользователь FreeBSD:

    • Необходимо следить за /usr/ports/UPDATING и периодически выполнять описанные там действия;
    • Софт во FreeBSD зачастую обновляется не так быстро, как в Linux;
    • Не всякий софт во FreeBSD доступен в виде бинарного пакета, вспомним хотя бы OpenOffice;
    • А некоторого софта вообще нет (из недавнего припоминаю wxFormBuilder);
    • Иногда удивляют опции, с которыми были собраны бинарные пакеты (так бинарный пакет Perl собран без поддержки нитей);
    • Заморочки с лицензиями, например, при установке шрифтов или софта, написанного на Java;
    • Удаление пакетов, ставших ненужными, автоматизировано лишь частично (в утилите pkg_cleanup);

    А вот пользователи Debian и основанных на нем дистрибутивах с этими проблемами не сталкиваются. Все управление пакетами в Debian происходит с помощью следующих простых команд.

    Обновление базы доступных пакетов:

    Пакеты можно искать через веб-интерфейс или с помощь команды:

    Просмотр дополнительной информации о пакете:

    Пакеты в debian как они есть

    Одно из основных преимуществ Linux систем — это управление пакетами. Формат самих пакетов и способы управления ими отличается в разных дистрибутивах, но, тем не менее, можно выделить два основных направления.

    В дистрибутивах на базе RHEL используется RPM формат пакетов, а управлять ими можно при помощи rpm или yum. Второе направление используется в операционных системах семейства Debian (например Ubuntu). В них применяется формат пакетов deb, а роль инструментов, помогающих управлять ими, apt и dpkg. Именно вторую группу мы и обсудим в статье. В этой статье-шпаргалке мы пройдемся по всем основным инструментам для управления пакетами, которыми пользуются системные администраторы на Debian и Ubuntu. Сохранив эту статью вы сможете всегда к ней обратиться при возникновении проблем с пакетами.

    Как применять это руководство

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

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

    Не забывайте про следующие моменты, обращаясь к данному руководству:

    • Если вы не знакомы с инструментами управления пакетами для Debian, то полностью прочтите раздел “Описание инструментов управления пакетами для Debian”.
    • Каждый раздел руководства можно использовать по отдельности. Поэтому можете сразу обращаться к той части, которая вам нужна в текущий момент.
    • Используйте содержание к руководству для поиска важной вам информации.
    • Копируйте команды в терминал вашей ОС, чтобы видеть результат для вашей ОС.

    Описание инструментов управления пакетами для Debian

    Debian/Ubuntu системы используют довольно небольшое количество инструментов для управления пакетами.

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

    Apt-get

    apt-get, пожалуй, наиболее часто используемый инструмент. Его основные задачи — обеспечения интерфейса с удаленными хранилищами пакетов, которыми управляют разработчики ОС, и выполнение базовых операций с ними. Так же при помощи этой команды можно обновить локальный кеш пакетов, установить новые или удалить старые пакеты.

    Чаще всего, apt-get применяется для обновления кеша и выполнения операций на рабочей системе.

    Apt-cache

    Другой незаменимый инструмент из семейства apt — apt-cache . С его помощью вы сможете получить информацию о доступных пакетах из локального кеша.

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

    Aptitude

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

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

    В отличии от инструментов apt-* dpkg автоматически не устанавливает требуемые зависимости. Основные задачи dpkg — работа с .deb пакетами напрямую и получение полной информации о пакете и его структуре. Хотя при помощи dpkg можно получить информацию об установленных пакетах в системе, его первостепенная задача — это работа с отдельными пакетами.

    Taskel

    Taskel стоит особняком в этом ряду. Эта программа объединяет пакеты, основываясь на выполнении определенной задачи.

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

    Другие

    Конечно на этом ряд инструментов для управления пакетами не заканчивается. Существуют еще и другие программы с отличающимся функционалом и манерой предоставления информации. Мы будем к ним обращаться только по необходимости, но не стоит про них забывать. Очень полезными могут оказаться такие инструменты как apt-file , dselect и gdebi .

    Обновление кеша пакетов и самой системы

    В Debian/Ubuntu системах реализован очень удобный подход не только для поддержания актуальности списка пакетов, но и для их обновления.

    Обновление локального кеша пакетов

    Удаленные хранилища, в которых хранятся пакеты, постоянно обновляются. А так как все инструменты управления пакетами работают с локальным кешем, следует следить за актуальностью кеша.

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

    Для обновления кеша воспользуйтесь командой apt-get и её подкомандой update :

    Информация о доступных пакетах для вашей операционной системы полностью обновится.

    Обновление пакетов без их удаления

    Команда apt предоставляет вам возможность легко поддерживать актуальность установленных пакетов.

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

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

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

    Обновление пакетов с удалением по необходимости

    Команда apt предоставляет вам возможность легко поддерживать актуальность установленных пакетов.

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

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

    Чаще всего, удаляемые пакеты заменяются на аналоги, поэтому эта операция, как правило, безопасна. Тем не менее, всегда обращайте внимание на список удаляемых пакетов для избежания неожиданностей. Для выполнения такого типа обновления вам понадобится следующая команда:

    В итоге получите полностью обновленную систему.

    Установка и скачивание пакетов

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

    Поиск пакетов

    Первый шаг при установке пакетов — поиск необходимого пакета в хранилищах. Большинство команд apt работает напрямую с кешем вашей локальной машины. Таким образом вы экономите на времени выполнения и сетевом трафике.

    Поиск пакетов — это единственная операция, которая работает с локальным кешем. Для выполнения поиска вам потребуется команда apt-cache . Не забывайте, что кеш необходимо предварительно обновить командой sudo apt-get update :

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

    Например, если вы ищете htop , то вы увидите следующий результат:

    Как вы видите, помимо пакета htop , мы получили два других пакета, в описании которых присутствует слово htop (описание в примере сокращено).

    Установка пакета из хранилищ

    Для установки пакета из хранилищ со всеми необходимыми зависимостями можно воспользоваться командой apt-get install .

    В качестве аргументов команде следует передать название пакета или пакетов точно так, как они названы в хранилищах.

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

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


    Как видите, хотя мы устанавливаем только apache2, пакет apache2-data устанавливается в качестве зависимости. В это случае вы можете просто нажать Enter или Y для подтверждения действия или N для отмены.

    Установка определенной версии пакета из хранилища

    Если вам нужна определенная версия пакета, то указать её вы можете через знак равенства после имени пакета:

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

    Переустановка пакетов

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

    Таким образом вы получите доступ к тем же (а иногда и к другим) вариантам настройки пакета.

    Холостой запуск действий с пакетами

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

    В результате вы увидите полный список требуемых зависимостей и изменений для установки пакета. Таким образом, вы можете увидеть что произойдет в системе, как если бы вы выполнили эту команду с правами администратора (sudo).

    Например, чтобы увидеть что произойдет при установке apache2, надо выполнить следующее:

    Вы видите полный список пакетов и их версий, которые будут установлены, но это всего лишь симуляция процесса.

    Такой же подход можно применять и к другим процедурам, например полному обновлению системы:

    Отключение запроса на подтверждение действий

    По-умолчанию, apt требуется подтверждение от пользователя по многим действиям. К ним относятся установка зависимостей и обновление пакетов.

    Чтобы не отвечать каждый раз на эти запросы, вы можете сразу указать ваш ответ по-умолчанию, указав флаг -y :

    В результате все пакеты будут установлены без лишних вопросов к администратору. Также можно поступить и при обновлении системы:

    Восстановление испорченных зависимостей и пакетов

    Случается так, что установка обрывается в силу проблем с зависимостями либо по другим причинам. Например, вы устанавливаете .deb пакет при помощи dpkg , не указав все необходимые зависимости.

    Команда apt-get попробует исправить ситуацию, если ей передать флаг -f :

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

    Загрузка пакетов из хранилища

    Иногда вам требуется скачать сам пакет без установки. Вы можете это легко сделать указав подкоманду download команде apt-get .

    Так как вы не вносите изменений в систему, права администратора не требуются.

    Пакет будет загружен в текущий рабочий каталог.

    Загрузка исходного кода пакета

    Команда apt может загрузить не только сам .deb пакет, но и его исходный код, если соответствующая информация указана в списке используемых вами хранилищ.

    Для загрузки исходного кода соответствующая deb-src строка должна быть указана в файле source.list для apt . Более подробно вы можете почитать об этом в соответствующем разделе руководства.

    После выполнения требуемых действий, исходный код можно скачать следующей командой:

    Файлы будут загружены в текущий каталог. Чаще всего это — каталог пакета, файл описания dsc и сам пакет сжатый архиватором tar.

    Такой подход может быть полезен, если вы хотите внести свои изменения в имеющийся пакет.

    Установка .deb пакета

    Установка пакетов из хранилищ является предпочитаемым вариантом, но иногда разработчика предоставляют только сам .deb пакет.

    Для их установки вам понадобится dpkg , который в основном работает с отдельными пакетам. Эта команда не обращается к хранилищам, а ищет необходимый пакет по указанному вами пути:

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

    Все необходимые пакеты будут установлены.

    Установка программных “задач” при помощи Tasksel

    Большие наборы пакетов можно установить при помощи, так называемых, “задач”. Задачи — набор пакетов, которые вместе образуют определенную программную среду. Примером таких задач служат сервер LAMP, окружение рабочего стола или сервера приложений.

    Не на всех системах tasksel установлен по-умолчанию. Установить его можно следующим образом:

    Выбрать группу задач можно в интерактивном режиме командой:

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

    Список установленных и доступных к установке задач можно получить следующим образом:

    Далее можно установить задачу из командной строки выполнив:

    Удаление пакетов и их файлов

    Удаление пакетов так же можно выполнить при помощи систем управления пакетами. В этом разделе мы рассмотрим как удалить пакеты и файлы, оставшиеся после них.

    Удаление пакета

    Для удаления пакета требуется выполнить подкоманду remove команды apt-get . Большинство файлов, связанных с пакетом будут удалены, за одним большим исключением. Все файлы настройки остаются нетронутыми, чтобы вы могли легко восстановить состояния пакета в случае его повторной установки. Такой подход очень удобен, так как вы сохраняете все настройки, если случайно удалили пакет.

    Для удаления необходимо указать название пакета:

    Пакет будет удален, а файлы настройки сохранены.

    Удаление пакета и связанного с ним файлов

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

    В отличии от remove , purge удаляет все файлы. Такой подход может быть полезен в случае когда вам необходимо создать настройки заново и начать с чистого листа. Не забывайте, что удалив файлы настройки, восстановить вы их не сможете.

    Теперь при переустановке пакета будет использованы настройки по-умолчанию.

    Автоматическое удаление невостребованных зависимостей

    При использовании apt-get remove или apt-get purge вы удаляете указанный вами пакет. Но все зависимости, что были установлены ранее для этого пакета остаются нетронутыми. Для удаления таких брошенных зависимостей используйте команду autoremove :

    Чтобы удалить конфигурационные файлы зависимых пакетов, используйте ключ —purge . Таким образом все лишние файлы будут удалены. Действие идентично команде purge .

    Очистка устаревших загруженных пакетов

    По мере добавления новых пакетов в хранилища, некоторые из них становятся устаревшими. Команда apt-get способна удалить файлы на вашем компьютере, которые связаны с устаревшими пакетами при помощи подкоманды autoclean .

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

    Получение информации о пакетах

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

    Отображение информации о пакете

    Чтобы просмотреть информацию о пакете из хранилища, воспользуйтесь подкомандой show команды apt-cache . Команде достаточно передать название пакета из хранилища.

    Команда выведет вам подробную информацию о пакете, включая его зависимости, версию, архитектуру, конфликты, полное название пакета, размер пакета в установленном виде и др. информацию.

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

    Отображение информации о .deb пакете

    Чтобы получить информацию о deb пакете используйте ключ —info команды dpkg . Так же следует указать путь к deb файлу.

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

    Отображение прямых и обратных зависимостей

    Для вывода всех зависимостей следует воспользоваться командой apt-cache c подкомандой depends .

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

    Вывод версий установленных и доступных к установке пакетов

    Довольно часто в хранилище находятся несколько версий пакетов, причем одна из них устанавливается по-умолчанию. Чтобы получить список доступных версий, используйте подкоманду policy команды apt-cache

    Вы увидите номер установленной версии, версию по-умолчанию, если не указать её отдельно, а так же таблицу версий с указанием приоритета.

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

    Вывод установленных пакетов при помощи dpkg -l

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

    Первый метод — использование dpkg или dpkg-query с ключом -l . Вывод команд идентичен. При использовании без аргументов вы получите список всех установленных и частично установленных пакетов. Пример вывода:

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

    • u: неизвестно
    • i: установлен
    • r: удален с сохранением файлов настроек
    • p: удален без сохранения файлов настроек
    • h: удержание версии

    Второй символ показывает действительный статус пакета в системе управления пакетами. Он принимает значения:

    • n: не установлен
    • i: установлен
    • c: наличие файлов настроек, но сам пакет отсутствует
    • u: распакован. Файлы распакованы, но не настроены
    • f: Пакет частично установлен. Указывает на возникшую ошибку в процессе установки
    • w: пакет ожидает запуска от другого пакета
    • p: Пакет был запущен из другого пакета

    Третий символ, как правил, пробел, но может принимать только одно значение:

    • r: Требуется переустановка. Обычно означает, что пакет испорчен и восстановить его невозможно.

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

    Вывод состояния пакета при помощи фильтров

    Если указать маску названия пакета после ключа -l , то вы получите информацию о пакетах, попадающих под эту маску. Например, давайте найдем библиотеку для обработки YAML:

    Как видите первый и четвертый результаты не установлены, то есть вы получаете информацию не только о установленных пакетах, но и о доступных.

    Вывод установленных пакетов при помощи dpkg —get-selections

    Второй способ: вывод списка установленных пакетов — использование команды dpkg с ключом — -get-selections .

    Вы получите список всех установленных и удаленных с сохранением настроек пакетов.

    Чтобы вывести только установленные пакеты, используйте:

    Для вывода удаленных пакетов используйте:

    Поиск среди установленных пакетов

    Чтобы найти установленный пакет используйте маску пакета после ключа —get-selections. Опять, вы увидите не только установленные пакеты, но и удаленные с сохранением настроек пакеты.

    Так же как и в предыдущем примере, допускается использование ключей awk.


    Вывод установленных пакетом файлов

    Чтобы получить список файлов, которые установил определенный пакет, используйте ключ -L команды dpkg :

    Вы получите список абсолютных путей к файлам. Файлов настроек, которые были созданы в процессе работы, вы не увидите.

    Поиск пакета, установленного по адресу

    Чтобы понять какой пакет установил интересующий вас файл, вы можете использовать команду dpkg с ключом -S :

    Вы увидите название пакета, ответственного за файл:

    Не забывайте, что это связка работает только для файлов, созданных в процессе установки.

    Обнаружение пакета, ответственного за файл, без его установки

    При помощи ключа -S довольно легко определить какому пакету принадлежит файл. Но иногда вам необходимо знать какой пакет даст вам определенный файл или команду, до установки самого пакета.

    Для этого вам понадобится утилита apt-file . Она поддерживает базу связки файлов и пакетов.

    Установить её можно следующим образом:

    Затем обновите базу данных утилиты и приступайте к поиску:

    И снова, такой метод подходит только для файлов, созданных в процессе установки.

    Передача списка пакетов между системами

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

    Экспорт списка пакетов

    Для начала вам понадобится создать список пакетов. Получить такой список можно при помощи команды dpkg —get-selections .

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

    Экспортировать ключи можно следующим образом:

    Все созданные файлы теперь можно перенести на другую машину.

    Импорт списка пакетов

    Если вы создали список пакетов, как описано выше, то импортировать его вы можете так же при помощи команды dpkg .

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

    Теперь обнулите состояние не основных пакетов в системе. То есть изменения надо наносить на свежие пакеты. Команда должна быть выполнена с правами администратора.

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

    Убедитесь в том, что она установлена и обновите её БД.

    Теперь мы можем применить наш список пакетов поверх имеющегося:

    Эта команда установит нужные состояния для интересующих нас пакетов. Чтобы применить изменения выполните следующую команду:

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

    Добавление хранилищ и PPA

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

    Добавление PPA

    PPA (личные архивы пакетов) — своего рода аналог хранилищам. На момент написания руководство они доступны только для Ubuntu. PPA гораздо меньше по объему чем хранилища и поддерживаются частными лицами.

    Добавив PPA в список доступных источников пакетов, вы можете использовать их так же как и обычные хранилища. Таким образом можно поддерживать актуальность пакетов или предоставлять пакеты недоступные в стандартных хранилищах. Не забывайте, вы добавляете только те PPA, которым доверяете, так как вы будете устанавливать оттуда пакеты. Чтобы добавить PPA воспользуйтесь командой add-apt-repository . Вы должны передать команде приставку ppa: , имя собственника ppa на launchpad, слеш и название ppa.

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

    Добавление хранилища

    Существует два подхода для добавления хранилищ в ubuntu и debian.

    Первый — вручную внести изменения в файл /etc/apt/sources.list/ или добавить файл списка, оканчивающийся на .list , в каталог /etc/apt/sources.list.d/ .

    Добавлять источник нужно в формате:

    • deb или deb-src : Указывает на тип хранилища. Традиционные хранилища обозначаются при помощи deb , а хранилища исходных кодов — при помощи deb-src .
    • url: Главный url хранилища. Адрес расположения хранилища.
    • release code name or suite: кодовое имя вашей системы, обозначающее набор пакетов именно для вашей версии системы.
    • component names: Отметка набора пакетов, которые вы хотите сделать доступными себе.

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

    Второй способ добавления хранилищ — команда add-apt-repository . Как правило, эта утилита установлена по-умолчанию в ubuntu и debian. Если у вас её нет, то установить её можно следующим образом:

    Далее, просто отдавайте хранилища в указанном формате этой утилите.

    Не забывайте обновлять кеш после добавления хранилища. Иначе система не увидит новых пакетов.

    Заключение

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

    Debian. Шпаргалка сисадмина. Управление пакетами

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

    Теоретическая часть

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

    Общая информация

    Все пакеты для Debian можно разделить на два типа 1 :

    Двоичные пакеты (binary) — содержат исполняемые файлы, файлы настроек, справочные страницы, информацию об авторских правах. Пакеты поставляются в файлах с расширением .deb (специфичен именно для Debian-систем).

    Пакеты исходного кода (source) — содержат описание пакета, файл с tar-архивом немодифицированного исходного кода (расширение .orig.tar.gz) и обычно файла, содержащего особые Debian-специфичные изменения к оригинальному исходному коду (расширение .diff.gz)

    Имена файлов пакетов включают в себя последовательно общее имя пакета, номер ревизии, архитектуру.

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

    Файл control

    Вся сопроводительная информация о пакете находится в файле control. Некоторые атрибуты 3 в этом файле рассмотрены ниже, назначение остальных легко можно понять исходя из их названия. Рассмотрим для примера вывод файла control для пакета mysql-server-5.5:

    Приоритет (priority) 4 — может принимать значения требуемый (required), важный (important), стандартный (standard), дополнительный (optional) и экстра (extra). Все типы указаны в порядке уменьшения их важности для операционной системы. Если без требуемых пакетов операционная система не сможет функционировать нормально, то экстра и дополнительные пакеты в принципе не нужны для работы системы, они добавляют дополнительный функционал.

    В нижней части текста можно встретить атрибуты, которые содержат списки определенных пакетов. Некоторые из этих пакетов могут быть установлены по желанию, а какие-то должны присутствовать обязательно. В этом случае говорят, что пакет 5 : зависит (depends), пред-зависит (pre-depends), рекомендует (reccomends), предлагает (suggests), ломает (breaks), конфликтует (conflict), предоставляет (provides), заменяет (replace), наращивает (enhances). Конечно же все эти поля содержат имена других пакетов, без которых работа основного невозможна (как в случае с пакетами в атрибуте depends), которые добавляют дополнительный функционал (reccomends, suggests), или которые могут даже заменять уже существующие в системе пакеты (replace) и так далее.

    Почти в самом низу находятся данные файла conffile 6 . Он необходим для определения конфигурационных файлов, которые нельзя заменять при обновлении пакета, чтобы сохранить настройки.

    Сценарии установки

    Помимо данных самого приложения и информации о нем, в пакетах также поставляются сценарии, которые определяют необходимые действия до/после установки/удаления пакета. Все сценарии установленного пакета хранятся в каталоге низкоуровневой утилиты управления пакетами — dpkg — /var/lib/dpkg/info с соответствующим расширением (проверим это на примере все того же mysql-server-5.5):

    Вот за что отвечает каждый сценарий 7 :

    .preinst — выполняется перед распаковкой пакетов, обычно останавливает связанные с ними службы;

    .postinst — выполняется соответственно после распаковки пакета и в большинстве случае служит для настройки только что распакованного пакета — либо самостоятельной, либо с помощью пользователя путем запроса каких-либо данных и/или вывода предупреждений. Конечно же остановленные на этапе выполнения сценария .preinst службы должны быть запущены;

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

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

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

    Утилиты управления пакетами

    Существует достаточно много утилит управления пакетами, например: apt, aptitude, dpkg, dselect, synaptic и другие. Все они обладают практически идентичным функционалом для «повседневного» использования, но различаются некоторыми другими функциями, интерфейсом и т.д.

    В данном случае меня интересуют утилиты командной строки для администрирования прежде всего серверов, не обладающих графическим интерфейсом, а потому я собираюсь рассмотреть три наиболее часто используемые утилиты — dpkg, apt, aptitude.

    Надо понимать, что высокоуровневые утилиты, такие как aptitude, основаны на apt, которая в свою очередь использует низкоуровневую dpkg 9 .

    Основные различия

    Основные различия заключаются в следующем 10 :

    • является основным низкоуровневым инструментом для работы с пакетами, умеет работать с файлами .deb, в отличие от apt и aptitude, работает только с существующими пакетами, загружать ничего не умеет, пользуйтесь этим инструментом очень аккуратно;
    • не умеет работать с зависимостями и если устанавливаемому пакету нужны какие-либо другие, dpkg выкинет ошибку и вам придется подгружать зависимости вручную;
    • ведет очень подробные логи в файле /var/log/dpkg.log;
    • рекомендуют использовать для обновлении системы при переходе между версиями дистрибутивов, а также просто при установке или обновлении пакетов благодаря более надежному механизму разрешения зависимостей пакетов;
    • apt-get и apt-cache работают только в режиме командной строке;
    • apt-cache предоставляет возможность поиска с использованием регулярных выражений только в именах и описаниях пакетов;
    • умеет работать с предпочтениями 11 только через файл /etc/apt/preferences, в отличие от aptitude;
    • менее требовательна к аппаратным ресурсам.
    • крайне не рекомендуют использовать для обновления системы при переходе от одной версии дистрибутива к другой; встречаются ситуации с массовым удалением пакетов при обновлении в нестабильных сборках;
    • является наиболее универсальным функциональным инструментом на основе apt;
    • умеет работать как в режиме командной строки, так и в интерактивном режиме;
    • наиболее полезная при выполнении повседневных задач управления пакетами — усиленные возможности поиска (поддерживаются регулярные выражения при поиске в метаданных пакета), подробный анализ существующих пакетов, управление устаревшими пакетами, удобный доступ ко всем версиям пакета;
    • уступает по производительности другим утилитам.

    Базовые функции

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

    aptitude apt-get/apt-cache описание
    aptitude update apt-get update обновление метаданных локального архива пакетов
    aptitude install foo apt-get install foo установить актуальную на данный момент версию пакета foo со всеми необходимыми зависимостями
    aptitude safe-upgrade apt-get upgrade установить актуальные на данный момент версии имеющихся в системе пакетов без удаления существующих
    aptitude full-upgrade apt-get dist-upgrade установить актуальные на данный момент версии имеющихся в системе пакетов с удалением существующих, если это необходимо
    aptitude remove foo apt-get remove foo удаление пакета foo без удаления его конфигурационных файлов
    apt-get autoremove удаление зависимостей от отсутствующих в системе пакетов
    aptitude purge foo apt-get purge foo удаление пакета foo вместе с его конфигурационными файлами
    aptitude clean apt-get clean очистка локального хранилища полученных файлов пакетов
    aptitude autoclean apt-get autoclean как и предыдущая команда, но удаляет также пакеты, которые больше не могут быть получены
    aptitude show foo apt-cache show foo отобразить детальную информацию о пакете foo
    aptitude search apt-cache search поиск в имени и описании пакета в соответствии с заданным регулярным выражением
    aptitude why объяснение почему определенный пакет должен быть установлен в системе
    aptitude why-not объяснение почему определенный пакет не должен быть установлен в системе

    Расширенные функции

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

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

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

    Серия контента:

    Этот контент является частью # из серии # статей: Изучаем Linux, 101

    Этот контент является частью серии: Изучаем Linux, 101

    Следите за выходом новых статей этой серии.

    Об этой серии

    Эта серия статей поможет вам освоить задачи администрирования операционной системы Linux. Вы также можете использовать материал этих статей для подготовки к экзаменам первого уровня сертификации профессионального института Linux (LPIC-1).

    Чтобы посмотреть описания статей этой серии и получить ссылки на них, обратитесь к нашему перечню материалов для подготовки к экзаменам LPIC-1. Этот перечень постоянно дополняется новыми статьями по мере их готовности и содержит самые последние (по состоянию на апрель 2009 года) цели экзаменов сертификации LPIC-1. Если какая-либо статья отсутствует в перечне, можно найти ее более раннюю версию, соответствующую предыдущим целям LPIC-1 (до апреля 2009 года), обратившись к нашим руководствам для подготовки к экзаменам института Linux Professional Institute.

    Краткий обзор

    Из этой статьи вы узнаете, как управлять пакетами приложений на вашем компьютере Linux с помощью инструментов управления пакетами Debian. Вы научитесь:

    • Устанавливать, переустанавливать, обновлять и удалять двоичные пакеты Debian.
    • Находить пакеты, содержащие определенные файлы или библиотеки, даже если эти пакеты не установлены.
    • Получать информацию о пакетах (версия, содержимое, зависимости, целостность, статус установки), даже если они не инсталлированы.


    Эта статья поможет вам подготовиться к сдаче экзамена LPI 101 на администратора начального уровня (LPIC-1) и содержит материалы цели 102.4 темы 102. Цель имеет вес 3.

    Необходимые условия

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

    Введение в управление пакетами

    Как связаться с Яном

    Ян – один из наших наиболее популярных и плодовитых авторов. Ознакомьтесь со всеми статьями Яна (EN), опубликованными на сайте developerWorks. Вы можете найти контактные данные в профиле Яна и связаться с ним, а также с другими авторами и участниками ресурса My developerWorks.

    Раньше многие Linux-приложения поставлялись в виде исходного кода, который пользователи могли компилировать и получать необходимые программы вместе с man-руководствами, конфигурационными файлами и так далее. Сегодня в большинстве дистрибутивов Linux используются так называемые пакеты – предварительно собранные приложения или наборы приложений, которые сразу можно инсталлировать на той Linux-системе, для которой они предназначены. В этой статье вы узнаете об инструментах управления пакетами, которые помогают инсталлировать, обновлять и удалять пакеты. Вы познакомитесь с одной из таких программ – Advanced Packaging Tool (сокращенно APT). Эта система управления пакетами используется в операционной системе Debian Linux и других основанных на ней дистрибутивах (например, в Ubuntu). В статье Изучаем Linux, 101: управление пакетами с помощью RPM и YUM, которая является частью этой серии, будут рассмотрены инструменты управления пакетами операционной системы Red Hat Linux.

    С точки зрения пользователя, основная функциональность управления пакетами обеспечивается на уровне команд. Поскольку разработчики Linux стараются сделать эту систему максимально доступной для пользователей, основные инструменты управления пакетами дополняются различными надстройками, включая графический интерфейс, которые скрывают от конечных пользователей всю изначальную сложность. В этой статье, а также в статье Изучаем Linux, 101: управление пакетами с помощью RPM и YUM мы сосредоточимся на рассмотрении основных инструментов, хотя будут затронуты и некоторые другие средства, которые впоследствии вы сможете изучить самостоятельно.

    Инструменты APT, RPM и YUM (последние две программы предназначены для управления пакетами в ОС Red Hat) имеют много общего. Все они умеют инсталлировать и удалять пакеты приложений. Информация об инсталлированных пакетах хранится в базе данных. Все эти инструменты обладают базовой функциональностью командной строки, а дополнительные надстройки позволяют использовать более дружественный пользовательский интерфейс. Все три пакета можно загрузить из Интернета.

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

    Установка пакетов Debian

    Предположим, вы хотите изучить язык Lisp, и ваш коллега посоветовал поработать с компилятором gcl . Вы могли бы попытаться выполнить команды gcl —help , which gcl или type gcl , однако если gcl отсутствует в вашей системе, то вы увидите сообщения, подобные сообщениям в листинге 1.

    Листинг 1. Отсутствие компилятора gcl

    Если бы во втором случае (листинг 1) вы не получили подсказку, то вам пришлось бы вновь обратиться к коллеге и уточнить, какой именно пакет необходимо установить. В противном случае вы могли бы просто догадаться, что компилятор gcl содержится в пакете gcl. Часто этот способ срабатывает, но он не всегда правильный. Позже я покажу, как можно найти требуемый пакет. В нашем примере необходимо установить пакет gcl, и это делается путем запуска команды apt-get с опцией install , как показано в листинге 2. Обратите внимание на то, что команда apt-get определит, какие дополнительные пакеты необходимо инсталлировать с учетом зависимостей, и выведет список всех пакетов, которые будут инсталлированы. На этом шаге вам будет предложено подтвердить продолжение инсталляции. В нашем примере мы отвечаем y для инсталляции gcl и дополнительного пакета libreadline5.

    Листинг 2. Установка gcl с помощью apt-get

    Из листинга 2 видно, что программа apt-get откуда-то считала список пакетов (подробнее об этом далее), построила дерево зависимостей и определила, что необходимо также инсталлировать отсутствующий в системе пакет libreadline5, который требуется для установки gcl. Также обратите внимание на то, что она предложила вам инсталлировать отдельный пакет с документацией – gcl-doc. Далее была выведена некоторая дополнительная информация (включая объем занимаемого пакетом дискового пространства) и от вас потребовалось подтвердить продолжение инсталляции, после чего, наконец, был установлен пакет gcl и требуемый дополнительный пакет libreadline5. Обычно пакеты Debian имеют расширение .deb, и видно, что пакеты были загружены и распакованы, о чем говорит следующая строка.

    Unpacking gcl (from . /gcl_2.6.7-45ubuntu1_i386.deb) .

    Предположим, что вместо установки пакета вы просто хотите выяснить, зависит ли он от других пакетов. Для этого можно запустить команду apt-get с опцией -s (т. е. simulate — симуляция). Существует и несколько других опций с такой же функциональностью, например, —just-print и —dry-run (подробную информацию можно найти на man-страницах). В листинге 3 показано, как происходит симуляция установки пакета gcl-doc.

    Листинг 3. Симуляция, или пробный прогон инсталляции gcl-doc

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

    Расположение пакетов

    В предыдущем разделе вы научились инсталлировать пакеты Debian. Но откуда они берутся? Каким образом apt-get узнаёт, откуда их загружать? Мы уже говорили о том, что apt-get откуда-то считывает список пакетов. А начинается этот поиск с просмотра файла /etc/apt/sources.list, который сообщает программе apt-get , где следует искать пакеты; источником может быть компакт-диск, локальная файловая система вашего компьютера или адрес в сети (http или ftp). Дополнительные источники пакетов можно добавить в директорию /etc/apt/sources.list.d.

    В листинге 4 показано несколько первых строк файла /etc/apt/sources.list на моем компьютере. Обратите внимание на то, что первая строка, в которой указан компакт-диск с дистрибутивом Linux, закомментирована (начинается с #). Если вам требуется установить много новых пакетов, которые еще не успели слишком устареть, возможно, стоит снять комментарий этой строки и инсталлировать пакеты с инсталляционного CD- или DVD-диска. Если же у вас имеется широкополосный доступ к Интернету или необходимо получить большое количество обновлений, то, возможно, имеет смысл загрузить самые последние версии приложений из источников в Интернете, перечисленных в /etc/apt/sources.list.

    Листинг 4. Содержимое файла /etc/apt/sources.list

    Чтобы определить, какие пакеты установлены в системе, программа apt-get и подобные ей инструменты используют локальную базу данных. Эти программы сверяют установленные версии пакетов с доступными версиями, получая информацию о доступных версиях из перечисленных в файле /etc/apt/sources.list источников и сохраняя ее в локальной системе. Для синхронизации информации из локальной базы данных с источниками, указанными в /etc/apt/sources.list, используется команда apt-get update . Следует всегда выполнять эту команду перед установкой или обновлением любого пакета, а также после изменения файла /etc/apt/sources.list или добавления файлов в директорию /etc/apt/sources.list.d.

    Удаление пакетов Debian

    Для удаления пакета вы можете запустить программу apt-get с опцией remove . Симуляция удаления показана в листинге 5.

    Листинг 5. Симуляция удаления gcl

    Обратите внимание на то, что пакет libreadline5, который был установлен в качестве зависимости для gcl, не был автоматически удален, хотя одна из строк листинга 5 говорит о том, что этот пакет (вместе с двумя другими пакетами заголовков Linux) больше не нужен. Чтобы удалить указанный пакет вместе со всеми пакетами, которые были установлены в качестве зависимостей и больше не требуются, запустите команду apt-get с опцией autoremove (или с эквивалентной опцией remove —auto-remove ). При этом удаляются все ставшие ненужными зависимости, а не только те, которые были установлены для того пакета или пакетов, которые вы удаляете (в нашем примере такими зависимостями являются пакеты linux-headers-2.6.31-14 и linux-headers-2.6.31-14-generic). В листинге 6 показано, как удалить пакет gcl, его зависимость – пакет libreadline5, а также два пакета заголовков Linux, которые больше не используются и не связаны ни с какими другими пакетами.

    Листинг 6. Удаление gcl и всех зависимостей

    Если вы запустите программу apt-get с опцией autoremove , но не укажете имя пакета, из системы будут удалены все неиспользуемые пакеты, которые были установлены в качестве зависимостей. Также можно использовать команду apt-get purge для удаления конфигурационной информации (подробные сведения можно найти на man-страницах).

    Обновление пакетов Debian

    Если вам необходимо обновить отдельный пакет, снова запустите команду apt-get с опцией install . В листинге 7 показано, как обновить уже инсталлированный на моем компьютере пакет tzdata. Перед обновлением пакетов не забывайте запускать команду apt-get update , чтобы убедиться в том, что в вашей локальной базе данных содержится информация о самых последних доступных обновлениях.

    Листинг 7. Обновление отдельного пакета

    Обновление всех пакетов или обновление системы до новой версии

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

    Дополнительную информацию о других возможностях и параметрах команды apt-get можно найти на man-страницах.

    Настройка APT: конфигурационный файл apt.conf

    Если вы откроете man-страницу apt-get , то увидите, что у этой команды есть множество параметров. Если вы часто используете команду apt-get , и значения параметров по умолчанию не очень вам подходят, то вы можете задать новые умолчания в файле /etc/apt/apt.conf. Обращения к файлу apt.conf из различных сценариев осуществляются с помощью команды apt-config . Для получения дополнительной информации обратитесь к man-страницам apt.conf и apt-config.

    Изменение конфигурации пакетов Debian

    Система APT содержит функцию с именем debconf, которая используется для настройки пакетов после их инсталляции. Пакеты, поддерживающие эту функцию (а поддерживают ее не все пакеты), можно заново конфигурировать после их инсталляции. Самый простой способ сделать это – использовать команду dpkg-reconfigure . Например, с помощью команды adduser можно создавать домашние директории, доступные для просмотра всем пользователям системы. Это может оказаться неприемлемым из соображений безопасности. Аналогично, пакет tzdata, который мы обновили в листинге 7, позволяет запускать команду dpkg-reconfigure tzdata для изменения часового пояса. Команду dpkg-reconfigure необходимо запускать с привилегиями пользователя root.

    На рисунке 1 показан первый вопрос, который задается при запуске команды dpkg-reconfigure tzdata . В зависимости от вашего компьютера вместо значения по умолчанию «America» будет другой континент. Перемещайтесь по экрану с помощью клавиши Tab и клавиш со стрелками.

    Рисунок 1. Изменение часового пояса с помощью dpkg-reconfigure

    Получение информации о пакетах Debian

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

    Проверка статуса пакета с помощью dpkg

    Одним из инструментов APT является программа dpkg . Это инструмент управления пакетами среднего уровня, который может инсталлировать и удалять пакеты, а также отображать их статус. Программа dpkg настраивается с помощью конфигурационного файла /etc/dpkg/dpkg.cfg; кроме того, в вашей домашней директории может присутствовать файл .dpkg.cfg, в котором можно указать дополнительные настройки.

    Для работы dpkg используются файлы, хранящиеся в дереве каталогов /var/lib/dpkg на жестком диске вашего компьютера. В частности, файл file /var/lib/dpkg/status содержит информацию о статусах инсталлированных на компьютере пакетов. В листинге 8 продемонстрировано использование команды dpkg -s для отображения статуса пакета tzdata после его обновления и статуса пакета gcl после его удаления. Обратите внимание на то, что после удаления пакета gcl в системе остались его конфигурационные файлы. Чтобы удалить загруженные файлы пакета из кэша, а также конфигурационную информацию, вы можете использовать опцию purge .

    Листинг 8. Статус пакета tzdata

    Пакеты и содержащиеся в них файлы

    Часто возникает необходимость узнать, что содержится в пакете, или из какого пакета был получен тот или иной файл. Обе этих задачи может решить dpkg. В листинге 9 продемонстрировано использование команды dpkg -L для вывода списка файлов (включая директории), инсталлированных в составе пакета libparted. Для большинства пакетов достаточно лишь указать его имя, не указывая конкретную версию. Тем не менее, в системе может быть инсталлировано несколько версий одного пакета, поэтому для получения информации о нем с помощью dpkg может потребоваться указать его имя полностью.

    Листинг 9. Что находится в пакете libparted?

    Чтобы узнать, в каком пакете содержится указанный файл, используйте команду dpkg с опцией -S , как показано в листинге 10. Имя пакета будет отображено слева.

    Листинг 10. В каком пакете содержится файл?

    Иногда система может показать, что файл не принадлежит какому-либо пакету. В этом случае для выяснения имени пакета может потребоваться выполнить дополнительный поиск. Например, программа инсталляции может создать символические ссылки, которые не будут распознаваться частью какого-либо пакета. Сравнительно недавно в Linux появилась система alternatives (alternatives), управляемая посредством команды update-alternatives . Альтернативы часто создаются для таких команд, как java , которые могут являться частью пакетов, разработанных различными производителями – openJDK, Sun или IBM (а, возможно, и другими компаниями).

    В листинге 11 продемонстрировано использование команды which для получения списка компонентов, задействованных при запуске команды java . Далее мы используем команду ls , чтобы выяснить, с каким объектом символически связана команда java . Ссылка на директорию /etc/alternatives подсказывает нам, что используется система альтернатив, поэтому мы используем команду update-alternatives для поиска дополнительной информации и, наконец, с помощью команды dpkg -S убеждаемся, что команда java является частью пакета openjdk-6-jre-headless. Установка системы альтернатив могла быть выполнена сценарием завершающей стадии установки пакета openjdk-6-jre-headless.

    Листинг 11. Более сложный пример использования dpkg –S

    Команда aptitude

    Ранее мы упоминали о том, что статусы пакетов хранятся в файле /var/lib/dpkg/status, а также о том, что вывод информации о пакетах – это не единственное назначение программы dpkg. Теперь давайте рассмотрим команду aptitude , которая обладает полноэкранным текстовым интерфейсом (включая библиотеку ncurses) для работы с функциями APT. Вы можете использовать aptitude для инсталляции или удаления пакетов, а также для управления флагами статусов, которые показывают, например, следует ли обновлять пакет, или можно оставить его в текущем состоянии. Если запустить команду aptitude (от имени пользователя root), то вы увидите на вашем экране примерно следующее (рисунок 2).

    Рисунок 2. Выполнение команды aptitude

    Нажимайте клавишу Enter, чтобы развернуть/свернуть выбранный пункт, а затем нажмите ctrl-t, чтобы перейти в панель меню. На рисунке 3 видно, что помимо прочих обновлений, для моей операционной системы доступна новая версия ядра – 2.6.31.20. Символ ‘i’ в левом столбце соответствует текущему статусу пакета (install) и означает, что он готов для инсталляции. В меню Help можно найти описание значений всех параметров, включая следующие: оставить текущую версию пакета и не обновлять его, удалить пакет из системы, включить возможность автоматической установки пакета и, соответственно, возможность его автоматического удаления. Вспомните опцию autoremove команды apt-get . Теперь вы знаете, как можно проверять и указывать, какие пакеты могут удаляться автоматически. Для изменения флагов используйте меню Package или комбинации клавиш, описанные в меню Help.

    Рисунок 3. Проверка флагов пакета с помощью команды aptitude

    Для поиска пакетов используется символ косой черты («/»). Например, если вы захотите переустановить пакет gcl, который был удален ранее, просто наберите «/gcl». Если в результате поиска будут найдены другие пакеты, содержащие «gcl», например, gcl-doc, нажмите клавишу «n» для перехода к следующему значению. После этого используйте меню Package, чтобы пометить пакет для инсталляции.

    Когда вы закончите, выберите пункт меню Actions->Install/remove packages (или нажмите клавишу «g»), чтобы применить изменения. Если вы не хотите применять изменения, вы можете закрыть программу с помощью опции quit.

    Вы можете вызвать справку в любом месте программы, воспользовавшись панелью меню или набрав знак вопроса («?»); чтобы закрыть справку, нажмите клавишу «q».

    Другие средства обновления Debian

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

    Помимо aptitude существуют и другие интерактивные интерфейсы для систем Debian, включая dselect, synaptic, update-manager, gnome-apt и wajig. Synaptic представляет собой графическое приложение для использования в системе X Window System. На рисунке 4 показан пользовательский интерфейс synaptic и наш старый друг – пакет gcl, помеченный для инсталляции.

    Рисунок 4. Инсталляция gcl с помощью synaptic

    Если вы нажмете кнопку Apply, то будет установлен пакет gcl и все остальные пакеты, для которых запланировано обновление. Кнопка Reload обновляет список пакетов. Если вы привыкли работать с графическими интерфейсами, то synaptic может показаться вам проще в использовании по сравнению с apt-get, dpkg или dselect.

    Также вы можете обнаружить в вашей системе программу update-manager – приложение для графической среды X Window, предназначенное для поддержания системы в актуальном состоянии. Если эта программа уже инсталлирована, то, вероятно, она запускается автоматически с определенной периодичностью, и поэтому вы не пропустите важные обновления. На рисунке 5 показано, как менеджер обновлений выводит список доступных обновлений, которые вы видели на рисунке 2. Так же, как и в aptitude, обновления отсортированы таким образом, чтобы вы видели, какие из них являются важными обновлениями, влияющими на безопасность, а какие – рекомендуемыми.

    Рисунок 5. Пример работы с менеджером обновлений Update Manager

    Поиск пакетов Debian

    В заключительной части нашей статьи, посвященной управлению пакетами в Debian, я расскажу, как искать пакеты. Обычно программа apt-get и другие упомянутые в этой статье инструменты уже знают (на основании списка доступных пакетов) обо всех пакетах Debian, которые могут вам понадобиться. Для поиска информации о пакетах в вашей системе можно использовать полезную программу apt-cache , с которой мы до сих пор не работали. Программа apt-cache может выполнять поиск на основе регулярных выражений (более подробно о регулярных выражениях рассказывается в статье Изучаем Linux, 101: поиск в текстовых файлах с помощью регулярных выражений). Предположим, вы хотите узнать имя пакета, содержащего загрузчик Linux. В листинге 12 показано, как можно сделать это.

    Листинг 12. Поиск загрузчика Linux (linux loader) с помощью apt-cache

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

    Если вы все-таки не нашли нужный пакет, вы можете попытаться поискать его в списке пакетов на Web-сайте Debian (см. раздел Ресурсы) или где-нибудь в сети Интернет.

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

    • Можно попробовать угадать, какой пакет может содержать нужную программу, и загрузить его без установки. Когда вы получите этот пакет, можно просмотреть его содержимое.
    • Можно поискать информацию в Интернете.
    • Можно воспользоваться функцией command-not-found, о которой будет рассказано чуть позже (раздел Команда не найдена).

    У команды apt-get имеется опция -d , которая позволяет загружать пакет, не инсталлируя его. Другая опция, —print-uris , показывает, откуда будет загружен пакет, а также его контрольную сумму. В настоящее время контрольные суммы, как правило, вычисляются по алгоритму SHA256, поэтому вы можете проверить целостность контрольной суммы загруженного пакета с помощью команды sha256sum . Учтите, что если пакет уже загружен, то информация об URI-адресе и контрольной сумме не отображается, поэтому следует получить эту информацию до начала загрузки пакета.

    Предположим, вы хотите узнать, действительно ли интерпретатор gcl содержится в пакете gcl. В листинге 13 показано, как можно использовать команду apt-get для загрузки пакета gcl без его инсталляции.

    Листинг 13. Использование apt-get только для загрузки пакета

    После загрузки пакета вы можете запустить программу dpkg с опцией —info , чтобы получить информацию о пакете, или с опцией —contents – чтобы посмотреть, какие файлы находятся внутри пакета. Как правило, загружаемые файлы помещаются в директорию /var/cache/apt/archives/. В листинге 14 показано, как найти загруженный файл и узнать, какие исполняемые файлы будут установлены при инсталляции пакета (при условии, что они устанавливаются в директорию . /bin/. ).

    Листинг 14. Просмотр содержимого файла deb-файла с помощью dpkg

    Если вы нашли и загрузили нужный вам файл .deb с помощью какой-то другой программы, а не apt-get , вы можете инсталлировать его, выполнив команду dpkg -i .

    Если вы решили не инсталлировать пакет, загруженный в архив APT, то удалить его можно с помощью команды apt-get clean .

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

    Команда не найдена

    Давайте вспомним листинг 1, в котором выводилось сообщение о том, какой пакет требуется для установки компилятора gcl . Как же была получена эта информация? Когда командная оболочка Bash выполняет поиск команды и не находит ее, она пытается обратиться к функции с именем command_not_found_handle . В листинге 15 показано, как эта функция определена в моей операционной системе Ubuntu 9.10.

    Листинг 15. Функция command_not_found_handle

    Если функция command_not_found_handle существует, происходит ее вызов (в качестве аргументов используются исходная команда и ее исходные аргументы), и ее код завершения становится кодом завершения командной оболочки. Если же эта функция не определена, командная оболочка выводит сообщение об ошибке и возвращает код завершения 127. Обычно эта функция определена в системном файле /etc/bash.bashrc. Из листинга 15 видно, что функция command_not_found_handle пытается найти команду /usr/lib/command-not-found, и в случае успеха эта команда выполняется через сценарий Python. Если же эта команда отсутствует в системе (например, если был удален пакет command-not-found, отвечающий за ее работу), имитируется стандартное поведение системы, т. е. возвращается код завершения 127.

    Комплект PackageKit

    Рассмотрение инструментов управления пакетами было бы неполным без упоминания о PackageKit – комплекте инструментов, призванном упростить инсталляцию и обновление программного обеспечения. Основной целью его создания является объединение всех графических инструментов, используемых в различных дистрибутивах Linux. Для работы PackageKit используется системно активируемый демон (это означает, что демон активируется только тогда, когда он необходим). Существуют версии PackageKit для Gnome (gnome-packagekit) и KDE (KPackageKit).

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

    Ресурсы для скачивания

    Похожие темы

    • Оригинал статьи: Learn Linux, 101: Debian package management (EN).

    • Используйте перечень материалов для подготовки к экзаменам LPIC-1 (EN) для поиска статей developerWorks, которые помогут вам подготовиться к сдаче экзаменов программы сертификации LPIC-1, основанной на целях по состоянию на апрель 2009 года.
    • Просмотрите всю серию статей для подготовки к экзаменам института LPI на сайте developerWorks, основанных на предыдущих целях, определенных до апреля 2009 года, чтобы изучить основы администрирования Linux и подготовиться к экзаменам для получения сертификата администратора Linux.
    • Посетите домашнюю страницу Debian (EN), чтобы узнать больше об этом дистрибутиве ОС Linux.
    • Обратитесь к руководству по установке Debian (EN), чтобы получить дополнительную информацию по установке этой ОС.
    • Просматривайте и ищите нужные вам пакеты в списке пакетов Debian (EN).
    • Обратитесь к справочнику APT HOWTO (EN), чтобы узнать больше об APT – системе управления пакетами Debian.
    • Загрузите конвертер пакетов Alien (EN).
    • Ознакомьтесь с руководством начинающего администратора Debian (EN).
    • Загружайте пакеты Debian (EN) с домашней страницы Debian.
    • Посетите страницу Ubuntu (EN), операционной системы Linux для людей.
    • Посетите домашнюю страницу PackageKit (EN), чтобы узнать больше об этом комплекте инструментов.
    • Web-сайт Linux Documentation Project (EN) содержит большое количество полезной документации, в особенности, HOWTO-руководств.

    Комментарии

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

    Управление пакетами с помощью aptitude в Debian

    После того, как подключены репозитории и настроено обновление системы, самое время заняться установкой необходимого программного обеспечения. Программное обеспечение для Debian распространяется в виде пакетов и исходного кода. Причём используется собственный формат пакетов — т. н. deb — пакеты. Устанавливать пакеты можно из сетевых хранилищ, с установочных дисков, из локальных директорий. Ниже приведён список ресурсов, который будет полезен для поиска и установки Debian пакетов:

    Изначально для управления пакетами использовалась программа dpkg. Dpkg аналогична по функционалу другой подобной программе — rpm. При помощи dpkg можно производить действие в основном с отдельным пакетом, а так же базовую настройку некоторых пакетов. Затем были созданы apt-tools — система управления пакетами apt. Apt, являясь надстройкой над dpkg, может работать как с отдельными пакетами, так и с базой пакетов. Работа с этой программой проста и логически понятна. Популярность её давно вышла за пределы дистрибутивов, основанных на Debian. Следующим шагом к управлению пакетами стала программа aptitude. Она в свою очередь является надстройкой над apt. Естественно, что aptitude может делать всё тоже, что и apt, но при этом лучше работает с базой пакетов и может работать как в командной строке, так и в интерактивном режиме. Всё это плюс дополнительные функции, которых нет в apt привело к тому, что aptitude стало рекомендованным средством по работе с базой пакетов в стабильной ветке Debian. Конечно же, ни dpkg, ни apt никуда не исчезли из дистрибутива и можно управлять пакетами и с помощью первой из них, и с помощью второй, на всё же я рекомендую работать с aptitude.

    Управление пакетами, используя aptitude в режиме командной строки.

    Приступим к работе с программой aptitude. Данная программа рекомендована сообществом Debian в качестве менеджера пакетов. Она является более новым инструментом, чем apt, полностью заменяет функционал программ apt-get и apt-cache, а так же «умнее» работает с удовлетворением зависимостей. Поэтому лучше, чтобы вся работа с пакетами выполнялась с помощью aptitude. Если запустить эту программу без параметров,

    # aptitude

    то она запустится в интерактивном режиме, но сейчас не об этом.

    Перед установкой пакетов или после подключения репозиториев следует запросить обновления:

    # aptitude update

    Если есть обновления, то имеет смысл установить их:

    # aptitude safe-upgrade

    # aptitude full-upgrade

    О разнице между этими командами читайте ниже.

    Краткая справочная информация о программе вызывается так:

    $ aptitude help

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

    $ aptitude search mc

    В ответ на это мы увидим список пакетов, которые содержат в своём имени mc. Нас интересует следующая строка:

    p mc — Midnight Commander a powerful file manager .

    В первой позиции мы видим символ (ы). Одиночные символы и символы расположенные левее, если их несколько, назовём основными. Они обозначают состояние пакета. Если символ:

    p – Значит пакет не установлен или удалён полностью, вместе с файлом конфигурации. Символ p это сокращение от purge.

    i – Значит пакет уже установлен. Символ i это сокращение от installed.

    c – Значит пакет удалён, но конфигурационный файл сохранён. Символ c это сокращение от clean.

    v — Значит данный пакет виртуальный, т. е. он не содержит какой либо программы, он содержит описания зависимостей. Соответственно, символ v это сокращение от virtual.

    Рядом с основными символами, могут располагаться дополнительные:

    A – комбинация iA. Означает, что пакет установлен автоматически для удовлетворения зависимостей. Символ A это сокращение от Automatic.

    B – комбинация iB. Означает, что пакет содержит ошибки или утратил зависимости. Символ B это сокращение от Broken.

    C – комбинация iC. Означает, что пакет не настроен, его установка была прервана на стадии настройки. Символ C это сокращение от half-Configured.

    h – комбинация ih. Означает, что для пакета зафиксирована текущая версия. Символ h это сокращение от hold.

    H – комбинация iH. Означает, что пакет установлен только частично. Например, в момент установки произошёл сбой. Символ H это сокращение от Half-installed.

    u – комбинация pu. Означает, что пакет был получен, распакован, но не был установлен. Символ u это сокращение от unpacked.

    Вообще же символов статуса может быть не два, а три. Но описывать все их комбинации не входит в рамки этой статьи.

    После символов состояния следует имя пакета, а затем его краткое описание.

    После search не обязательно писать полное имя искомого пакета – это поисковый шаблон, можно написать часть имени. В выводе команды мы получим список пакетов, содержащих в имени искомые символы. Например, если набрать aptitude search ssh, то в выводе команды получим список пакетов, содержащих в своём имени ssh. Но это всё по-умолчанию. Вообще же search поддерживает различные поисковые запросы. Можно искать в имени пакета

    n, в его описании

    d, в разделе репозитория (см. ниже)

    s. Можно делать отбор только в установленных пакетах

    i или в тех пакетах, которые можно обновить

    U. Можно манипулировать запросами с помощью скобок, запрашивать альтернативы «|» или отрицания «!». Вообще же это тема для отдельной статьи, но некоторые возможности запросов я продемонстрирую на предыдущем примере. Выполним:

    $ aptitude search

    В выдаче получаем одну-единственную строку о пакете mc. Расшифруем поисковый запрос. Мы хотим найти пакет, который содержит в своём имени mc, в описании пакета должна присутствовать часть строки Midn, а искать нужно в разделе utils. Запрос заключается в прямые одинарные кавычки, всё пишется слитно, без пробелов.

    Если необходима более полная информация о пакете mc, то вводим следующую команду:

    $ aptitude show mc

    В выводе команды show видим следующую информацию:

    Состояние пакета. Если пакет виртуальный, то в этой строке можно увидеть надпись «не реальный пакет».

    Приоритет пакета. Может быть:

    • Необходимый – без таких пакетов система не будет функционировать;
    • Важный – без таких пакетов система не будет нормально работать или не будет удобной;
    • Стандартный — эти пакеты обычно устанавливаются по-умолчанию;
    • Дополнительный – в основном, все те пакеты, которые устанавливает пользователь;
    • Особые – редко используемые или конфликтующие с пакетами других приоритетных групп.

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

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

    Размер пакета в распакованном виде.

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

    Более подробное описание пакета. Возможна ссылка на сайт программы.

    Можно получить информацию о нескольких пакетах. Для этого имена пакетов в командной строке отделяют пробелами.

    $ aptitude show openssh-server openssh-client openssh-blacklist

    Следующая команда покажет пакеты, для которых необходим данный пакет:

    $ aptitude why mc

    Если нужно узнать с какими пакетами конфликтует данный пакет, то выполняем:

    $ aptitude why-not имя_пакета

    Теперь мы знаем, как получить информацию о пакетах. Пора бы начинать их устанавливать. В качестве примера установим Midnight Commander:

    # aptitude install mc

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

    • Указано неверное имя пакета
    • Не подключен репозиторий, содержащий данный пакет или с репозиторием нет связи.

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

    Далее, в сообщении будет указано количество пакетов, которые будут обновлены, количество новых пакетов, которые будут установлены – в нашем случае 4, количество пакетов отмеченных для удаления, количество пакетов, которые не будут обновлены. Так же мы будем проинформированы о размере пакета и о количестве занимаемого им места после установки. Теперь нужно сделать выбор: или подтвердить установку и нажать «y», или отказаться от установки и нажать «n», или произвести дополнительные действия. Чтобы посмотреть, что можно сделать ещё, нажимаем «?» и получаем краткую справку по дополнительным действиям. В данный момент нам не требуется никаких дополнительных действий, поэтому подтверждаем установку. Вот собственно и всё. Пакеты, указанные в списке устанавливаемых сначала будут скопированы в кэш, который находится в /var/cache/apt/archives/, а затем установлены. Теперь вводим:

    Установка нескольких пакетов. Имена пакетов отделяются друг от друга пробелами:

    # aptitude install sudo gcc vim

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

    # aptitude reinstall mc

    Удаление пакета – операция обратная установке.

    # aptitude remove mc

    Aptitude проверит, будут ли нарушены зависимости при удалении пакета и сообщит об этом. Так же будет выведена информация о том, сколько пакетов будет обновлено, сколько пакетов будет установлено, сколько пакетов отмечено для удаления – в нашем случае 4, сколько пакетов не будет обновлено. Заметим, что программа удаляет и пакеты, которые были установлены автоматически для удовлетворения зависимостей. Будет выведена информация об освобождающемся месте после удаления. Подтверждаем удаление. Пакет удаляется, но его конфигурационные файлы остаются.

    Для удаления нескольких пакетов перечисляем их через пробел:

    # aptitude remove sudo gcc vim

    Для полного удаления пакета вместе с файлами конфигурации выполняем:

    # aptitude purge mc

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

    В некоторых случаях может понадобиться зафиксировать версию пакета. Т. е. сделать так, чтобы он не обновлялся. Это например, бывает нужно тогда, когда какое- то программное обеспечение не может работать корректно с обновлённым пакетом. Например, чтобы зафиксировать версию пакета gzip выполним:

    # aptitude hold gzip

    Теперь этот пакет не будет обновляться при выполнении safe-upgrade и full-upgrade. Выполним команду aptitude search gzip и обратим внимание на статус пакета. Статус пакета ih. Это означает, что пакет установлен и его текущая версия зафиксирована.

    Если нужно снять фиксацию версии для пакета gzip, то выполним команду:

    # aptitude unhold gzip

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

    # aptitude keep gzip

    В этом случае он будет обновляться при выполнении safe-upgrade и full-upgrade и его статус не изменится.

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

    # aptitude keep-all

    Если для удовлетворения зависимостей пришлось устанавливать пакет вручную или нужно пометить пакет, как установленный для удовлетворения зависимостей, то выплняем (gzip взят для примера):

    # aptitude markauto gzip

    Смотрим его статус. Он изменился на iA. Этот пакет будет удалён, когда будут удалены пакеты, для которых он был установлен, в качестве удовлетворителя зависимостей.

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

    # aptitude unmarkauto gzip

    Чтобы загрузить пакет mc, но не устанавливать его, следует выполнить:

    # aptitude download mc

    Пакет будет загружен в текущую директорию.

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

    # aptitude clean

    Если из кэша нужно удалить загруженные пакеты, которые уже не используются в системе, выполним:

    # aptitude autoclean

    Теперь немного коснёмся команд обновления. Команда:

    # aptitude update

    обновит список пакетов. Поэтому она обязательна для выполнения после изменений в /etc/apt/sources.list.

    # aptitude safe-upgrade

    обновит, установленные версии пакетов, не изменив при этом их состав. Т. е. будут обновлены те пакеты системы, для обновления которых не требуется удалять другие пакеты. Aptitude сообщит об этой ситуации, но эти пакеты не обновит.

    # aptitude full-upgrade

    # aptitude dist-upgrade

    обновит все пакеты, для которых есть новые версии. Если потребуется удаление пакетов, оно будет выполнено.

    Вот вкратце и всё! Так же полезно почитать:

    $ man 8 aptitude

    Теперь ознакомимся с работой aptitude в интерактивном режиме и перейдём к настройке SSH.

    Помните, что у нас вы можете не только купить готовый сайт или заказать его разработку, но и подобрать подходящий тариф поддержки сайта, заказать продвижение сайта в поисковых системах, а так же зарегистрировать домен в одной из двухсот доменных зон и выбрать недорогой тариф хостинга! Айтишник РУ

    Debian и Ubuntu: пакеты и репозитории

    Алексей Федорчук и Владимир Попов
    март 2006 — январь 2007

    В этой заметке описано внутреннее устройство пакетов deb-формата, а также организация их репозиториев в дистрибутивах Debian и Ubuntu.

    Пакеты и их зависимости

    Формат пакетов (deb) дистрибутива Debian, как и основанные на нём средства пакетного менеджмента — в числе выдающихся достижений его разработчиков, унаследованное всеми Debian-клонами. Пакет Debian — архивный файл (собранный утилитой ar ), содержащий два обычных архива *.tar.gz , один из которых включает скомпилированные исполняемые бинарники (и необходимые им для работы компоненты — библиотеки, конфиги, документацию и так далее), второй же — так называемые управляющие файлы: контрольные суммы, описания зависимостей, пред- и постинсталляционные сценарии.

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

    Понятие зависимостей в Debian и его производных отличается от принятого в большинстве других дистрибутивов (и вообще ОС Unix-семейства). Обычно различаются только

    • обязательные (или «жесткие») зависимости, без удовлетворения которых установка и работа программы невозможна (например, зависимость от системных библиотек), и
    • зависимости необязательные («мягкие»), без разрешения которых программа сохраняет работоспособность, но удовлетворение их добавляет ей функциональности (например, зависимость links или mc от сервиса консольной мыши gpm).

    В Debian зависимости имеют несколько градаций: обязательные (depends), настоятельно рекомендуемые (recommends), рекомендуемые умеренно настойчиво (suggests), конфликтующие (conflicts). Первая градация — это обычные «жесткие» зависимости. С последними тоже понятно — это, так сказать, анти-зависимости. Ну а настоятельно рекомендуемые и рекомендуемые просто — это две разновидности «мягких» зависимостей. То есть первая категория как бы более нужная, нежели вторая. Впрочем, таково субъективное мнение майнтайнера данного пакета — вполне возможно, что у пользователя будут иные потребности. И это мы учтем при выборе средства управления пакетами.

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

    Кроме зависимостей, в системах пакетного менеджмента Debian важно также понятие приоритета пакета. отражающее степень необходимости его для функционирования системы, например: обязательный (required), без которого функционирование системы невозможно, основной (base) и важный (important), также оказывающиеся практически необходимыми, стандартный ( — то есть имеющийся практически в любой полнофункциональной Linux-системе, дополнительный (optional) — тут уж степень важности каждый должен решать для себя.

    Как это принято в мире Open Source, все бинарные пакеты Debian (а также, конечно, Ubuntu и других клонов) сопровождаются исходными текстами, доступными из репозиториев дистрибутива. И здесь Debian проявляет свою специфику: каждый пакет в исходниках обычно включает три файла — packagename.orig.tar.gz , packagename.dsc и packagename.diff.gz .

    Первый — самый обычный тарбалл исходных текстов авторского пакета, что подчеркивается словом orig в его имени: имя и система нумерации версий также совпадают с таковыми авторского пакета. Файл packagename.dsc содержит в себе всю метаинформацию, необходимую для правильного построения из него бинарного deb-пакета (как — будет рассказано в следующих разделах). А packagename.diff.gz — это те изменения исходного кода, которые вносятся для адаптации пакета непосредственно к данному дистрибутиву. Если таких изменений не потребовалось (или если пакет писался именно для Debian), он может и отсутствовать.

    Средства управления пакетами Debian: обзор

    В отношении средств управления пакетами в Debian и его клонах имеется богатый выбор:

    • команда dpkg , предназначенная для установки, конфигурирования и удаления единичных пакетов, но не имеющая собственных средств разрешения зависимостей между ними;
    • dselect — front-end (оболочка) для dpkg , работающая в текстовом режиме; обеспечивает не только установку/удаление программ, но и групповой выбор пакетов по целевому назначению, а также разрешение зависимостей между ними;
    • механизм apt — универсальный набор инструментов для управления deb-пакетами, включая разрешение зависимостей между ними и даже построение из исходников отдельных пакетов и тотальную пересборку установленной системы с заданными параметрами компиляции;
    • aptitude — оболочка для apt , как по интерфейсу, так и функционально схожая с dselect ;
    • sinaptic — также оболочка для утилит семейства apt .

    Все эти средства унаследованы от прародителя — Debian’а его клонами. Которые, однако, могут включать в себя и собственный инструментарий пакетного менеджмента. Так, в Kubuntu имеется собственный менеджер пакетов — Adept, предназначенный для работы в графической среде KDE. Это очень интересная программа (также, насколько я понимаю, front-end над apt) , но ее еще нельзя считать достаточно отлаженной. Будем надеяться на совершенствование ее в грядущих версиях Kubuntu.

    Устройство репозитория Ubuntu

    Дистрибутив Debian GNU/Linux давно и по праву славится своей системой управления пакетами. Успех которой слагается из трех компонентов:

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

    Потомки Debian, такие, как MEPIS, Xandros, Linspire, вместе с форматом пакетов унаследовали от прародителя и все остальные составляющие удачливого пакетного менеджмента. B, конечно же, все они характерны и для самого популярного деривата Debian — семейства дистрибутивов Ubuntu, каковое и будет предметом дальнейшего рассмотрения.

    Ниже будет рассмотрено устройство репозиториев Ubuntu, что преследует две цели. Первой является чисто удовлетворение собственного любопытства — дабы поглядеть, как оно устроено «внутре». Но есть и цель практическая: каким образом можно получать информацию о пакетах с машины, не имеющей подключения к Сети — согласитесь, в нашей умеренно интернетизированной СНГовии задача достаточно актуальная.

    Сразу следует оговориться, что без физического доступа к Сети вообще использование средств пакетного менеджмента Debian может носить предельно ограниченный характер, распространяясь только на реопзитории с «твердых» носителей, типа дистрибутивных компактов. Нет, речь идет все-таки о случае, когда какой-никакой доступ к Сети все-таки имеется, только не с той машины и, возможно, не с той платформы, на которой Ubuntu используется (например, со служебной машины под управлением Windows).

    Сначала — пара слов о репозиториях Ubuntu вообще. Официальные репозитории Ubuntu — общие для всех дистрибутивов семейства, и располагаются они по адресу: archive.ubuntu.com/ubuntu. Это — «головное» хранилище пакетов, имеющее многочисленные региональные зеркала, принадлежность которых к стране указывается стандартным двухсимвольным префиксом, например:

    * http://no.archive.ubuntu.com/ubuntu/ — норвежское зеркало,
    * http://ru.archive.ubuntu.com/ubuntu/ — российское зеркало,

    и так далее. Кроме официального репозитория, имеются также репозитории, так сказать, полуофициальные. Для пользователей Kubuntu, например, важнейшим из них будет kubuntu.org/packages/. Последние версии KDE, KOffice, Amarok в нем появляются существенно раньше, чем в официальном репозитории. Кроме того, только в нем можно найти тестовые версии указанных пакетов. В частности, в настоящее время это единственный репозиторий, из которого можно получить в бинарном виде тестовую версию KDE 4.

    Чтобы получить представление о внутреннем устройстве репозитория Ubuntu, посетим одно из его зекрал, например, ru.archive.ubuntu.com/ubuntu/. Внутре него видим файл ls-lR.gz (представляющих собой полный список всего файлового дерева репозитория, с атрибутами принадлежности, доступа, и так далее), а также следующие каталоги:

    dists/
    indices/
    pool/
    project/

    Назначение каталога project/ показалось мне не вполне понятным, каталог indices/ содержит нечто вроде списков файлов, в каталоге dists/ описываются всякого рода сведения о пакетах, а сами они имеют место быть в каталоге pool/. Собственно, два последних каталога нас и будут интересовать.

    Начнем с описания пакетов, то есть содержимого каталога dists/. Надо сказать, что классификация пакетов в Ubuntu выглядит еще более запутанной, чем в Debian’е, где она тоже не являет собой эталон прозрачности.

    В первом приближении пакеты классифицируются по именам релизов — на текущий момент актуальны релизы Dapper (6.06, точнее, ее bugfix-редакция 6.06.1), которому обещана пятилетняя поддержка, Edgy (6.10) — последний по времени стабильный релиз, и Feisty (будущий 7.04) — то, что станет релизом весной 2007 года (если полугодовой цикл разработки не будет нарушен). Но описания всех предыдущих релизов Ubuntu также имеются в каталоге dists/, образуя самостоятельные подкаталоги. В качестве исторической справки напомню, что это были Breezy (5.10) и Hoary (5.04). Лишь следов самой первой версии, Warty (4.10) не удается найти в репозитории.

    Далее, в каждом релизе, помимо основного массива пакетов, выделяются еще и так называемые категории — каждой из них соответствует подкаталог того же уровня, что и подкаталог релиза, а именуются они так (на примере релиза edgy):

    edgy-backports/
    edgy-proposed/
    edgy-security/
    edgy-updates/

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

    Категория security, как можно догадаться из названия, содержит обновления, направленные на повышение безопасности.

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

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

    main/
    restricted/
    universe/
    multiverse/

    А уже внутри них — каталоги для описания бинарных пакетов, собранных под каждую из поддерживаемых архитектур:

    binary-amd64/
    binary-i386/
    binary-powerpc/
    binary-sparc/

    каталог писания пакетов исходников

    каталог с переводами описаний

    Каждый каталог содержит три файла: Release — файл с общей информацией о ветке репозитория, Packages.gz и Packages.bz2, которые на самом деле представляют собой один и тот же файл Packages, сжатый утилитами gzip и bzip2, соответственно. Файл Release, как явствует из его названия, представляет собой общее описание компонента данного релиза, и выглядит примерно так:

    Archive: edgy
    Version: 6.10
    Component: main
    Origin: Ubuntu
    Label: Ubuntu
    Architecture: amd64

    Содержание же файл Packages — полный список пакетов данного компонента и архитектуры. Для каждого пакета из этого списка приводятся:

    • Package: название пакета (например, adduser);
    • Priority: приоритет (required, important, optional и так далее);
    • Section: принадлежность к целевой группе (base, admin, gnome, kde и т.д.);
    • Installed-Size: объем, занимаемый пакетом и его составляющими в установленном виде (Кбайт);
    • Maintainer: сборщик дистрибутивного пакета (например, Ubuntu Core Developers) и его e-mail;
    • Original-Maintainer: разработчик авторского пакета и его e-mail;
    • Architecture: целевая платформа (например, i386, amd64 или ppc);
    • Version: номер версии оригинального пакета и сборки пакета дистрибутивного (примерно так — 2.4.6-1.1ubuntu1);
    • Replaces: пакеты, заменяемые данным (если таковые имелись ранее);
    • Depends: жесткие, то есть обязательные, зависимости, с указанием минимальной версии, например: debianutils (>= 1.6);
    • Recommends: рекомендуемые, то есть мягкие, зависимости;
    • Suggests: предлагаемые (еще более «мягкие») зависимости;
    • Conflicts: пакеты, конфликтующие с данным;
    • Filename: полный путь к deb-файлу пакета, отсчитываемый от каталога pool (см. далее);
    • Size: размер файла deb-пакета (в байтах);
    • MD5sum: контрольная md5-сумма;
    • SHA1: идентификатор подлинности;
    • SHA256: он же, 256-битный;
    • Description: краткое описание пакета;
    • Bugs: адрес для высылки сообщений об ошибках в программе;
    • Origin: происхождение (Ubuntu);
    • Task: категория, в составе которой пакет устанавливается (например, minimal, standard, ubuntu-desktop, kubuntu-desktop, и так далее).

    То есть здесь мы видим нечто вроде аккумулятивной суммы файлов control для всех пакетов репозитория, с единственным добавлением строки Filename, описывающей путь к данному пакету именно в данном репозитории.

    Картина получается достаточно запутанная. Но в ней важны два момента. Первый — не смотря на иерархический вид подкаталогов внутри dists/, классификация эта на самом деле не иерархическая, а проведена по трем независимым признакам — категории, компоненту и архитектуре. И второй момент — это в сущности классификация не пакетов, а только их описаний, то есть метаинформации о пакетах. И пользователю с ней общаться практически не приходится — она используется утилитами семейства apt или программой aptitude для извлечения (установки, вывода информации и так далее) о требуемых в данной ситуации пакетах — нужного компонента и нужной архитектуры.

    Классификация же собственно пакетов, с которой только и сталкивается пользователь (да и то не совсем вплотную), гораздо проще, в чем можно убедиться при рассмотрении подкаталога pool/ (то есть «пула» пакетов). Здесь мы видим всего четыре подкаталога, соответствующие указанным выше компонетам дистрибутива:

    main/
    restricted/
    universe/
    multiverse/

    Компоненты группируются следующим образом:

    • main — полностью свободные пакеты, официально поддерживаемые разработчиками Ubuntu;
    • restricted — пакеты, также официально поддерживаемые дистрибутивом, но не вполне свободные;
    • universe — полностью свободные программы, официально дистрибутивом не поддерживаемые и развивающиеся силами независимых разработчиков;
    • multiverse — пакеты, аналогично universe официально не поддерживаемые и не вполне свободно распространяемые.

    Понимание свободно распространяемых программ с точки зрения лицензии Ubuntu примерно соответствует принципам свободного программного обеспечения Debian, которое, в свою очередь, весьма сходно с пониманием свободного софта FSF. Пакеты из компонентов restricted и multiverse имеют разного рода ограничения на распространение в некоторых странах или могут содержать закрытые части. Примерами являются фирменные драйверы для видеокарт Nvidia (restricted) или мультимедиа-кодеки, использующие патентованные в отдельных странах алгоритмы.

    Каждый из компонентных каталогов разбит на «алфавитные» подкаталоги — от a до z. Исключение — библиотечные пакеты, сгруппированные в подкаталоги вида liba — libz. Внутри «алфавитных» подкаталогов имеются подкаталоги пакетные, а в них уже лежат отдельные deb-пакеты, представляющие собой конкретные сборки под определенные архитектуры.

    Итак, состав предлагаемых репозиторием определённому дистрибутиву пакетов можно получить из файла url/dists/release_name/component/type/Packages, где url — url репозитория (в нашем случае — ru.archive.ubuntu.com/ubuntu/) release_name — имя релиза (в данном случае edgy), component — наименование компонента (main | restricted | universe | multiverse), type — тип пакета (binary | source), отражающий для бинарников ещё и архитектуру (binary-amd64, binary-powerpc).

    Сколько компонентов и их типов предполагается использовать — столько потребуется и файлов Packages. Файлы эти, как было показано выше, легко читаемы, размер их сравнительно невелик. Так, для Ubuntu Edgy он составляет по 1,2 Мбайт (*.gz) или по 900 Кбайт (*.bz2) на каждый тип компонента main. Packages-файлы компонентов restricted и multiverse вообще не чувствительны (примерно по 5 и 100 килобайт). Наибольший «вес» дают типы компонента universe (3-4 Мбайт, в зависимости от компрессора), но и это не смертельно даже при модемном соединении.

    Так вот, скачав где-либо нужные файлы Packages, перенеся их на целевую машину и поместив в каталог /var/lib/apt/lists, можно в даже при отсутствии Сети на ней, получить полную информацию о пакетах, предлагаемых репозиторием. Причем они будут доступны для любых программ управления deb-пакетами — утилит системы apt, aptitude, synaptic (Ubuntu и Xubuntu) или adept (Kubuntu).

    Если скачать ещё и url/dists/your_distr/Release* — apt-утилиты перестанут «ругаться» по поводу «непроверенности» предлагаемых пакетов.

    Названия файлов формируются просто, как «правда»: url_dists_yourdistr_component_type_Packages То есть, например: au.archive.ubuntu.com_ubuntu_dists_dapper_main_binary-i386_Packages.

    Так, в отсутствие Сети, можно познакомиться с тем, чтобы мы могли получить от того или иного репозитория, если бы Сеть была.

    Все сказанное выше относилось к официальным репозиториям Ubuntu. Устройство репозиториев полу-официальных и совсем неофициальных может несколько отличаться в деталях. Причем «единство стиля» не всегда выдерживается даже внутри одного и того же репозитория. Например, в репозитории kubuntu.org/packages/ можно видеть дерево каталогов, где причудливо перемешаны подкаталоги отдельных пакетов различных версий (например, amarok), пакетных комплексов типа kde и koffice, их же для определенного релиза (например, hoary-kde341/ и так далее, hoary-koffice14/). Впрочем, это относится к ранним стадиям формирования репозитория. Ныне его структура устоялась, и каталоги последних версий marok, kde и koffice включат, как правило, подкаталог dists и отдельные подкаталоги для сборок под определенный релиз. Например, в состав каталога kde355 входят пулы сборок для Dapper и Edgy:

    и так далее. Как сконструировать из них имена Packages-файлов — предоставляется читателю в качестве самостоятельного упражнения.

    Все предыдущее изложение исходило из молчаливого допущения отсутствия подключения к Сети на целевой машине. Однако по настоящему эффективное использование средств пакетного менеджмента Debian (и, соответственно, Ubuntu) достигается в онлайновом режиме.

    Настройка доступа к репозиториям пакетов

    Программный комплекс apt — мощнейшее средство управления пакетами, охватывающее все аспекты этого захватывающего занятия. Однако первое, чего он требует — это настройки доступа репозиториям пакетов. Ниже этот вопрос рассмотрен на примере дистрибутивов Ubuntu и Kubuntu — пакетные репозитории едины для всего семейства. Однако практически все сказанное применимо и к исходному Debian, и к любому из его клонов — они сохраняют совместимость, и deb-пакеты из, скажем, Xandros (включая такие спецфичные, как драйверы устройств), могут использоваться в Kubuntu, и наоборот.

    После обычной пользовательской установки Ubuntu и Kubuntu мы имеем доступ только к одному такому репозиторию — установочному CD или DVD. Причем первый нам практически не нужен — почти все его содержимое и так устанавливается по умолчанию в ходе первичной инсталляции. На DVD, конечно, есть большое количество дополнительных пакетов — но и ими не обойтись, кое-какие компоненты (те же аудио- и видеокодеки) можно получить только из репозиториев сетевых.Источники пакетов, получаемых через apt , описываются в специальном конфигурационном файле — /etc/apt/sources.list . После пользовательской установки по умолчанию он содержит строку вида

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

    Формат каждой строки таков:

    • тип пакета — deb для бинарников и deb-src для исходников;
    • URL архива — в наших условиях это будет http://ru.archive.ubuntu.com/ubuntu;
    • имя собственное дистрибутива — для текущей версии breezy (собственно дистрибутив), breezy-updates, breezy-backports, breezy-security (дополнительные компоненты;
    • тип репозитория — main и restricted (основная часть дистрибутива, поддерживаемая командой обновления безопасности), universe и multiverse (дополнительная часть, лишенная соответствующей поддержки).

    О различиях между типами репозиториев было сказано в прошлом разделе — здесь же достаточно запомнить, что нам они понадобятся все, включая и те, что являются как бы не совсем официальными (universe и multiverse). Так что достаточно просто снять комментарии со всех строк, начинающихся с deb и deb-src — как станет ясным в дальнейшем, некоторые пакеты, возможно, придется строить из исходников:

    и так далее. Обращаю внимание — в этих (и аналогичных) строках фигурируют только репозиторий Ubuntu и имя дистрибутива, ни слова о Kubuntu мы тут не найдем. То есть, если мы снесем KDE с нашей инсталляции Kubuntu и поставим из репозитория GNOME — то получим чистый Ubuntu, и наоборот. Это я и имел ввиду, когда говорил о легкой трансформации одного дистрибутива этого семейства в другой.

    А можно поступить еще интересней: отказаться и от KDE, и от GNOME, установив, например, XFce — и таким образом преобразить свой дистрибутив в Xubuntu. Что, впрочем, уже реализовано официально.

    Можно также заменить XFce на любой из полусотни имеющихся в репозитории менеджеров окон (например, Window Maker), после чего стать счастливым обладателем собственного уникального WMubuntu. В общем, перспективы индивидуализации системы открываются безграничные.

    Кстати, не менее легко сменить релизную версию на тестируемую: для этого достаточно во всех строках файла /etc/apt/sources.list заменить breezy на dapper . А при необходимости воспользоваться репозиториями родительского Debian или какого-либо из его клонов — дописать соответствующие строки (руководствуясь документацией к требуемому дистрибутиву).

    В случае, если коннект с репозиторием ru.archive.ubuntu.com/ubuntu оказывается неудовлетворительным (а подчас так и бывает), никто не запрещает добавить какие-либо иные зеркала официального репозитория. По моим наблюдениям, самыми быстрыми оказываются норвежское, бельгийское и нидерландское. Так что каждую строку с описанием отдельных репозиториев можно продублировать, заменив в URL ru на no , be или nl , соотвественно.

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

    После этого необходимо скачать gpg-ключ (нечто вроде гарантии идентичности):

    и выполнить собственно процедуру идентификации:

    Аналогично следует поступать и с другими «не вполне штатными» обновлениями, например, аудиоплейера amaroK. Следить за такими вещами проще всего по сайту проекта www.kubuntu.org. А по приводимым там ссылкам обычно содержится исчерпывающая информация о том, как подключать такие дополнительные репозитории.

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

    Только, ради Бога, не подумайте, что это какой-то Linux’овый warez, ни в коем случае. Просто там помещаются пакеты, использующие алгоритмы, которые в некоторых осталых странах (типа США) защищаются всякого рода патентами. Семейство же дистрибутивов Ubuntu создавалось в расчете на международное распространение, и потому его разработчики вынуждены учитывать любые лицензионные ограничения всех стран мира.

    Илон Маск рекомендует:  Что такое код jdtounix
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL