Управление пакетами в 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:

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

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

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

    (Команда

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

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

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

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

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

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

Дополнительную информацию можно найти в справочных страницах 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-getaptitude реализует много других дополнительных возможностей, которых нет ни в одной из этих программ:

  • обеспечивает лёгкий доступ ко всем версиям пакета;
  • позволяет легко отслеживать устаревшее ПО, занося его в «список устаревших пакетов и пакетов, созданных локально»;
  • включает достаточно мощную систему поиска и ограничения отображаемых пакетов. Пользователи, знакомые с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 пунктов, каждый из которых выполняет определённое действие. Пользователь может выбрать одно из действий, перемещая с помощью клавиш со стрелками полосу подсветки, а затем нажав клавишу <enter> для выбора выделенного действия.

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

Метод (Access)или

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

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

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

Пункты меню

Метод (Access)и

Выбрать (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 —install.

Дополнительную информацию можно найти в справочной странице 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?

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

     dpkg --list

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

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

     dpkg --list 'foo*'

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

     dpkg --status имя_пакета

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

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

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

     dpkg --listfiles foo

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


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

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

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

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

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

    .listв каталоге

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

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

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

    foo. Файлы

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

    /debian/dists/wheezy). Файл

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

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

    Contents.

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

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

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

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

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

    apt-file update.


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), то она отслеживает автоматически устанавливаемые пакеты и удаляет их, когда в системе не остаётся пакетов, от них зависящих.

1 thought on “Управление пакетами в Debian”

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *