Изучаем Linux, 101: Управление пакетами в Debian

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

Из этой статьи вы узнаете о инсталляции, обновлении и управлении пакетами в операционной системе Linux®. В этой статье будет рассмотрена система управления пакетами Advanced Packaging Tool (APT), которая используется в операционной системе Debian Linux и других основанных на ней дистрибутивах (например, в Ubuntu). Вы можете использовать этот материал для подготовки к экзамену LPI 101 программы сертификации на администратора Linux начального уровня или просто, чтобы узнать, как устанавливать новые приложения и поддерживать систему в актуальном состоянии.

Об этой серии

Эта серия статей поможет вам освоить задачи администрирования операционной системы 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
ian@pinguino:~$ gcl --help
-bash: gcl: command not found

ian@pinguino:~$ gcl --help
The program 'gcl' is currently not installed.  You can install it by typing:
sudo apt-get install gcl
gcl: command not found

ian@pinguino:~$ which gcl

ian@pinguino:~$ type gcl
-bash: type: gcl: not found

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

Листинг 2. Установка gcl с помощью apt-get
ian@pinguino:~$ sudo apt-get install gcl
[sudo] password for ian: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  linux-headers-2.6.31-14 linux-headers-2.6.31-14-generic
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  libreadline5
Suggested packages:
  gcl-doc
The following NEW packages will be installed:
  gcl libreadline5
0 upgraded, 2 newly installed, 0 to remove and 30 not upgraded.
Need to get 47.1MB of archives.
After this operation, 157MB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://us.archive.ubuntu.com karmic/main libreadline5 5.2-6 [140kB]
Get:2 http://us.archive.ubuntu.com karmic/universe gcl 2.6.7-45ubuntu1 [47.0MB]
Fetched 47.1MB in 1min 33s (502kB/s)
Preconfiguring packages ...
Selecting previously deselected package libreadline5.
(Reading database ... 142156 files and directories currently installed.)
Unpacking libreadline5 (from .../libreadline5_5.2-6_i386.deb) ...
Selecting previously deselected package gcl.
Unpacking gcl (from .../gcl_2.6.7-45ubuntu1_i386.deb) ...
Processing triggers for man-db ...
Setting up libreadline5 (5.2-6) ...

Setting up gcl (2.6.7-45ubuntu1) ...
install/gcl: Handling install for emacsen flavor emacs22
Loading 00debian-vars...
No /etc/mailname. Reverting to default...
Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...
Loading debian-ispell...
Loading /var/cache/dictionaries-common/emacsen-ispell-default.el (source)...
Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)...
Loading /etc/emacs/site-start.d/50gcl.el (source)...
Wrote /usr/share/emacs22/site-lisp/gcl/add-default.elc
Wrote /usr/share/emacs22/site-lisp/gcl/ansi-doc.elc
Wrote /usr/share/emacs22/site-lisp/gcl/dbl.elc
Wrote /usr/share/emacs22/site-lisp/gcl/doc-to-texi.elc
Wrote /usr/share/emacs22/site-lisp/gcl/gcl.elc
Wrote /usr/share/emacs22/site-lisp/gcl/man1-to-texi.elc
Wrote /usr/share/emacs22/site-lisp/gcl/smart-complete.elc
Wrote /usr/share/emacs22/site-lisp/gcl/sshell.elc
install/gcl: Handling install for emacsen flavor emacs23
Loading 00debian-vars...
No /etc/mailname. Reverting to default...
Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...
Loading debian-ispell...
Loading /var/cache/dictionaries-common/emacsen-ispell-default.el (source)...
Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)...
Loading /etc/emacs/site-start.d/50gcl.el (source)...
Wrote /usr/share/emacs23/site-lisp/gcl/add-default.elc
Wrote /usr/share/emacs23/site-lisp/gcl/ansi-doc.elc
Wrote /usr/share/emacs23/site-lisp/gcl/dbl.elc
Wrote /usr/share/emacs23/site-lisp/gcl/doc-to-texi.elc
Wrote /usr/share/emacs23/site-lisp/gcl/gcl.elc
Wrote /usr/share/emacs23/site-lisp/gcl/man1-to-texi.elc
Wrote /usr/share/emacs23/site-lisp/gcl/smart-complete.elc
Wrote /usr/share/emacs23/site-lisp/gcl/sshell.elc

Processing triggers for libc-bin ...
ldconfig deferred processing now taking place

Из листинга 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
ian@pinguino:~$ sudo apt-get install -s gcl-doc
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  linux-headers-2.6.31-14 linux-headers-2.6.31-14-generic
Use 'apt-get autoremove' to remove them.
The following NEW packages will be installed:
  gcl-doc
0 upgraded, 1 newly installed, 0 to remove and 30 not upgraded.
Inst gcl-doc (2.6.7-45ubuntu1 Ubuntu:9.10/karmic)
Conf gcl-doc (2.6.7-45ubuntu1 Ubuntu:9.10/karmic)

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


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

В предыдущем разделе вы научились инсталлировать пакеты 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
ian@pinguino:~$ cat /etc/apt/sources.list
#deb cdrom:[Ubuntu 9.10 _Karmic Koala_ - Release i386 (20091028.5)]/ karmic main restrict
ed
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.

deb http://us.archive.ubuntu.com/ubuntu/ karmic main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ karmic main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://us.archive.ubuntu.com/ubuntu/ karmic-updates main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ karmic-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://us.archive.ubuntu.com/ubuntu/ karmic universe
deb-src http://us.archive.ubuntu.com/ubuntu/ karmic universe
deb http://us.archive.ubuntu.com/ubuntu/ karmic-updates universe
deb-src http://us.archive.ubuntu.com/ubuntu/ karmic-updates universe

Чтобы определить, какие пакеты установлены в системе, программа 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
ian@pinguino:~$ sudo apt-get remove -s gcl
[[sudo] password for ian: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  linux-headers-2.6.31-14 linux-headers-2.6.31-14-generic libreadline5
Use 'apt-get autoremove' to remove them.
The following packages will be REMOVED:
  gcl
0 upgraded, 0 newly installed, 1 to remove and 30 not upgraded.
Remv gcl [2.6.7-45ubuntu1]

Обратите внимание на то, что пакет 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 и всех зависимостей
ian@pinguino:~$ sudo apt-get autoremove gcl
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  gcl libreadline5 linux-headers-2.6.31-14 linux-headers-2.6.31-14-generic
0 upgraded, 0 newly installed, 4 to remove and 30 not upgraded.
After this operation, 239MB disk space will be freed.
Do you want to continue [Y/n]? y
(Reading database ... 142327 files and directories currently installed.)
Removing gcl ...
remove/gcl: purging byte-compiled files for emacs22
remove/gcl: purging byte-compiled files for emacs23
Removing libreadline5 ...
Removing linux-headers-2.6.31-14-generic ...
Removing linux-headers-2.6.31-14 ...
Processing triggers for man-db ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place

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


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

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

Листинг 7. Обновление отдельного пакета
ian@pinguino:~$ sudo apt-get install  tzdata
[sudo] password for ian: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  tzdata
1 upgraded, 0 newly installed, 0 to remove and 29 not upgraded.
Need to get 679kB of archives.
After this operation, 0B of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com karmic-updates/main tzdata 2010i-0ubuntu0.9.10 [679kB]
Fetched 679kB in 1s (569kB/s) 
Preconfiguring packages ...
(Reading database ... 124394 files and directories currently installed.)
Preparing to replace tzdata 2010h-0ubuntu0.9.10 (using .../tzdata_2010i-0ubuntu0.9.10_all
.deb) ...
Unpacking replacement tzdata ...
Setting up tzdata (2010i-0ubuntu0.9.10) ...

Current default time zone: 'America/New_York'
Local time is now:      Mon May  3 16:11:57 EDT 2010.
Universal Time is now:  Mon May  3 20:11:57 UTC 2010.
Run 'dpkg-reconfigure tzdata' if you wish to change it.

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

Вместо того чтобы обновлять пакеты по отдельности, можно обновить сразу все пакеты, установленные в системе, с помощью команды 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
Рисунок 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
ian@pinguino:~$ dpkg -s gcl tzdata
Package: gcl
Status: deinstall ok config-files
Priority: optional
Section: interpreters
Installed-Size: 152848
Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
Architecture: i386
Version: 2.6.7-45ubuntu1
Config-Version: 2.6.7-45ubuntu1
Depends: libc6 (>= 2.7), libgmp3c2, libice6 (>= 1:1.0.0), libncurses5 (>= 5.6+20071006-3
), libreadline5 (>= 5.2), libsm6, libx11-6, libxaw7, libxext6, libxmu6, libxt6, tcl8.4 (
>= 8.4.16), tk8.4 (>= 8.4.16), debconf (>= 1.2.0), gcc, emacs22 | emacsen
Suggests: gcl-doc
Conffiles:
 /etc/default/gcl 9301be50652f86b8d3f8b835f6dce03e
 /etc/emacs/site-start.d/50gcl.el 12116c8c8988326764799973a0a7d5ab
Description: GNU Common Lisp compiler
 GNU Common Lisp (GCL) is a Common Lisp compiler and interpreter
 implemented in C, and complying mostly with the standard set
 forth in the book "Common Lisp, the Language I".  It attempts
 to strike a useful middle ground in performance and portability
 from its design around C.
 .
 This package contains the Lisp system itself.  Documentation
 is provided in the gcl-doc package.
Original-Maintainer: Camm Maguire <camm@enhanced.com>

Package: tzdata
Status: install ok installed
Priority: required
Section: libs
Installed-Size: 6276
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: all
Version: 2010i-0ubuntu0.9.10
Replaces: libc0.1, libc0.3, libc6, libc6.1
Provides: tzdata-squeeze
Depends: debconf (>= 0.5) | debconf-2.0
Description: time zone and daylight-saving time data
 This package contains data required for the implementation of
 standard local time for many representative locations around the
 globe. It is updated periodically to reflect changes made by
 political bodies to time zone boundaries, UTC offsets, and
 daylight-saving rules.
Original-Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>

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

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

Листинг 9. Что находится в пакете libparted?
ian@pinguino:~$ dpkg -L libparted
Package `libparted' is not installed.
Use dpkg --info (= dpkg-deb --info) to examine archive files,
and dpkg --contents (= dpkg-deb --contents) to list their contents.
ian@pinguino:~$ dpkg -L libparted1.8-12
/.
/lib
/lib/libparted-1.8.so.12.0.0
/usr
/usr/share
/usr/share/doc
/usr/share/doc/libparted1.8-12
/usr/share/doc/libparted1.8-12/copyright
/usr/share/doc/libparted1.8-12/changelog.Debian.gz
/lib/libparted-1.8.so.12

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

Листинг 10. В каком пакете содержится файл?
ian@pinguino:~$ dpkg -S /lib/libparted-1.8.so.12
libparted1.8-12: /lib/libparted-1.8.so.12

Иногда система может показать, что файл не принадлежит какому-либо пакету. В этом случае для выяснения имени пакета может потребоваться выполнить дополнительный поиск. Например, программа инсталляции может создать символические ссылки, которые не будут распознаваться частью какого-либо пакета. Сравнительно недавно в 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
ian@pinguino:~$ which java
/usr/bin/java
ian@pinguino:~$ ls -l $(which java)
lrwxrwxrwx 1 root root 22 2010-05-03 17:51 /usr/bin/java -> /etc/alternatives/java
ian@pinguino:~$ update-alternatives --display java
java - auto mode
 link currently points to /usr/lib/jvm/java-6-openjdk/jre/bin/java
/usr/lib/jvm/java-6-openjdk/jre/bin/java - priority 1061
 slave java.1.gz: /usr/lib/jvm/java-6-openjdk/jre/man/man1/java.1.gz
Current `best' version is /usr/lib/jvm/java-6-openjdk/jre/bin/java.
ian@pinguino:~$ dpkg -S /usr/lib/jvm/java-6-openjdk/jre/bin/java
openjdk-6-jre-headless: /usr/lib/jvm/java-6-openjdk/jre/bin/java

Команда aptitude

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

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

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

Рисунок 3. Проверка флагов пакета с помощью команды aptitude
Рисунок 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
Рисунок 4. Установка gcl с помощью synaptic

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

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

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

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

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

Листинг 12. Поиск загрузчика Linux (linux loader) с помощью apt-cache
ian@pinguino:~$ apt-cache search "linux loader"
lilo - LInux LOader - The Classic OS loader can load Linux and others
lilo-doc - Documentation for LILO (LInux LOader)

Вы уже знаете, что в 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 только для загрузки пакета
ian@pinguino:~$ sudo apt-get install -d gclReading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libreadline5
Suggested packages:
  gcl-doc
The following NEW packages will be installed:
  gcl libreadline5
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 47.1MB of archives.
After this operation, 157MB of additional disk space will be used.
Do you want to continue [Y/n]? 
Get:1 http://us.archive.ubuntu.com karmic/main libreadline5 5.2-6 [140kB]
Get:2 http://us.archive.ubuntu.com karmic/universe gcl 2.6.7-45ubuntu1 [47.0MB]
Fetched 47.1MB in 7s (6,475kB/s)                                               
Download complete and in download only mode

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

Листинг 14. Просмотр содержимого файла deb-файла с помощью dpkg
ian@pinguino:~$ sudo find /var/cache -name "*.deb"
/var/cache/apt/archives/gcl_2.6.7-45ubuntu1_i386.deb
/var/cache/apt/archives/libreadline5_5.2-6_i386.deb
ian@pinguino:~$ sudo dpkg --contents /var/cache/apt/archives/gcl*.deb| grep "/bin/"
drwxr-xr-x root/root         0 2008-12-06 07:42 ./usr/bin/
-rwxr-xr-x root/root       617 2008-12-06 07:42 ./usr/bin/gcl

Если вы нашли и загрузили нужный вам файл .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
ian@pinguino:~$ type command_not_found_handle
command_not_found_handle is a function
command_not_found_handle ()
{
    if [ -x /usr/lib/command-not-found ]; then
        /usr/bin/python /usr/lib/command-not-found -- $1;
        return $?;
    else
        return 127;
    fi
}

Если функция 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 умеет гораздо больше, чем просто управлять пакетами. Для получения дополнительной информации, а также ссылок на другие статьи этой серии обратитесь к разделу Ресурсы.

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



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

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=756527
ArticleTitle=Изучаем Linux, 101: Управление пакетами в Debian
publish-date=09082011