В примере с Dr Geo предыдущего раздела, наши конфигурационные шаги сначала привели к ошибке, потому что у нас не была установлена требуемая программа. Инструменты управления пакетами формализуют указание требований и версий, стандартизируют их размещение в системе, а также обеспечивают механиз отслеживания, помогающий определить установленные пакеты. В результате получаем облегчение установки программного обеспечения, его поддержки и удаления.
Хотя вы все еще можете иметь желание устанавливать программы из исходных текстов по перечисленными в предыдущем разделе причинам, но вы, вероятно, большую часть поддержки системы и установки программ выполняете с использованием менеджера пакетов, который имеется в вашем дистрибутиве.
С точки зрения пользователя, основные функции управления пакетами обеспечиваются на уровне команд. Поскольку Linux-разработчики стараются сделать использование Linux легче, то основные инструменты снабжаются другими надстройками, включая графический интерфейс, скрывающий сложность базовых средств от конечного пользователя. В этих двух разделах мы сосредоточимся на базовых средствах, хотя и упомянем некоторые другие инструменты, чтобы вы имели стартовую платформу для их изучения.
Установка пакетов Debian
Давайте вернемся к проблемам, с которыми мы столкнулись при работе с исходными текстами Dr Geo. Так получилось, что эти проблемы возникли в системе Fedora Core 4, использующей управление пакетами RPM. К счастью в этом разделе учебника, я также не досчитался нескольких компонентов guile в системе Ubuntu, основанной на Debian, в которой я пытался установить Dr Geo. Возникшие ошибки для этого случая приведены в Листинге 25.
Листинг 25. Отсутствие функции guile.
ian@attic4:~$ cd drgeo-1.1.0
ian@attic4:~/drgeo-1.1.0$ ./configure
checking for perl... /usr/bin/perl
checking for XML::Parser... ok
checking for iconv... /usr/bin/iconv
checking for msgfmt... /usr/bin/msgfmt
...
checking for guile... no
configure: error: guile required but not found
i
Пакет, который необходим нам — это пакет guile. Мы можем установить его используя команду apt-get, как показано в Листинге 26. Отметим, что использование команды sudo является обычным для Ubuntu способом работать с правами суперпользователя (root).
Листинг 26. Установка guile с использованием apt-get.
ian@attic4:~$ sudo apt-get install guile
Reading package lists... Done
Building dependency tree... Done
Note, selecting guile-1.6 instead of guile
Suggested packages:
guile-1.6-doc
The following NEW packages will be installed:
guile-1.6
0 upgraded, 1 newly installed, 0 to remove and 24 not upgraded.
Need to get 31.5kB of archives.
After unpacking 209kB of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com hoary/main guile-1.6 1.6.7-1ubuntu1 [31.5kB]
Fetched 31.5kB in 0s (37.4kB/s)
Preconfiguring packages ...
Selecting previously deselected package guile-1.6.
(Reading database ... 84435 files and directories currently installed.)
Unpacking guile-1.6 (from .../guile-1.6_1.6.7-1ubuntu1_i386.deb) ...
Setting up guile-1.6 (1.6.7-1ubuntu1) ...
i
Из приведенного листинга мы видим, что apt-get откуда-то читает список пакетов (подробнее об этом далее), строит древо зависимостей, определяет, что guile-doc рекомендовано устанавливать вместе с guile, и загружает пакет guile из сети Интернет. Затем пакет guile распаковывается, устанавливается и настраивается. Отметим, что расширение, используемое для пакетов Debian, это .deb. Полное имя нашего пакета guile выглядит так guile-1.6_1.6.7-1ubuntu1_i386.deb.
Если apt-get обнаруживает, что пакет, который вы пытаетесь установить зависит от других пакетов, то он автоматически загружает и устанавливает также и их. В нашем примере устанавливается только guile, потому что все зависимости уже удовлетворены. Следуя выведенному совету мы можем установить guile-doc (или guile-1.6.doc).
Предположим, что вместо установки guile-doc, мы хотим узнать зависит ли пакет guile-doc от других пакетов. Мы можем использовать опцию apt-get -s (для симулирования). Имеется и несколько других опций со сходными функциями, такие как –just-print и –dry-run. Обратитесь к man страницам за подробностями. Не удивительно, что документация для пакета, который мы только что установили не имеет каких-либо зависимостей, поэтому в Листинге 27 мы привели несколько больше полезных примеров симулировав установку пакета ssl-cert, которому требуется пакет openssl.
Листинг 27. Симуляция или пробный прогон установки ssl-cert.
ian@attic4:~$ sudo apt-get -s install ssl-cert
Reading package lists... Done
Building dependency tree... Done
The following extra packages will be installed:
openssl
Suggested packages:
ca-certificates
The following NEW packages will be installed:
openssl ssl-cert
0 upgraded, 2 newly installed, 0 to remove and 24 not upgraded.
Inst openssl (0.9.7e-3 Ubuntu:5.04/hoary)
Inst ssl-cert (1.0-11 Ubuntu:5.04/hoary)
Conf openssl (0.9.7e-3 Ubuntu:5.04/hoary)
Conf ssl-cert (1.0-11 Ubuntu:5.04/hoary)
Мы видим, что требуется еще два новых пакета и вследствии этого они были установлены и настроены.
Список пакетных ресурсов: apt-setup
Мы говорили, что apt-get откуда-то читает список пакетов. Читает его он из /etc/apt/sources.list. Это список, который вы можете изменять самостоятельно, но вероятно вы предпочтете настроить его, используя команду apt-setup. Команда apt-setup это интерактивный инструмент, который знает расположение главных APT репозиториев. Вы можете иметь доступ к источникам пакетов на CD-ROM, в вашей локальной файловой системе или в сети с использованием http или ftp.
Если ваш дистрибутив установил для вас файл /etc/apt/sources.list, то он может и не содержать ваш CD-ROM в качестве источника пакетов. Это может быть неудобно особенно на начальной стадии экспериментирования с новой системой, когда вы можете захотеть добавить много пакетов, большинство которых еще не обновились. В этом случае вы можете воспользоваться командой
apt-cdrom add
чтобы добавить ваш CD-ROM к списку источников пакетов.
Apt-get и другие средства о которых мы будем говорить используют локальную базу данных для определения установленных пакетов. Они могут сверять установленные версии с доступными. Для этого информация о доступных версиях загружается с указанного в списке /etc/apt/sources.list источника и сохраняется на компьютере локально. Если вы обновляете ваш файл /etc/apt/sources.list, то вам следует выполнить
apt-get update
Это приведет сохраненные данные о доступных пакетах в актуальное состояние. Вообще же вы должны всегда делать это перед тем как установить новый пакет.
Удаление или обновление пакетов.
Перед тем как покинуть apt-get, мы рассмотрим две другие полезные опции.Если вы установили пакет и позднее хотите удалить его используйте опцию apt-get remove. Листинг 28 показывает как удалить пакет guile, который мы установили ранее.
Листинг 28. Удаление пакета guile.
ian@attic4:~$ sudo apt-get remove guile
Reading package lists... Done
Building dependency tree... Done
Note, selecting guile-1.6 instead of guile
The following packages will be REMOVED:
guile-1.6
0 upgraded, 0 newly installed, 1 to remove and 24 not upgraded.
Need to get 0B of archives.
After unpacking 209kB disk space will be freed.
Do you want to continue [Y/n]? Y
(Reading database ... 84455 files and directories currently installed.)
Removing guile-1.6 ...
Другой опцией, которую мы хотим упомянуть является опция upgrade Эта опция обновляет все установленные пакеты в вашей систем до новейших версий. Не путайте ее с опцией update, которая просто обновляет информацию о доступных пакетах.За более подробной информацией о возможностях и опциях apt-get обратитесь к man странице.
Файл apt.conf
Если вы просмотрите man страницу apt-get, то обнаружите множество опций. Если вы используете команду apt-get постоянно и поняли, что опции по умолчанию вас не устраивают, то вы можете создать новые умолчания в /etc/apt/apt.conf. Программа apt-config доступна в виде скриптов для опроса файла apt.conf. За более подробной информацией обратитесь к man страницам для apt.conf и apt-config.
Информация пакета Debian
Теперь мы обратимся к нескольким инструментам для получения информации о пакете. Некоторые из этих инструментов также выполняют и другие функции, но мы сосредоточимся на информационных аспектах.
Статус пакета с dpkg
Еще один инструмент являющийся частью системы APT это dpkg. Это инструмент среднего уровня для управления пакетами, который может устанавливать и удалять пакеты, а также отображать их информацию. Конфигурирование dpkg может выполняться при помощи /etc/dpkg/dpkg.cfg. Отдельные пользователи могут также найти файл .dpkg.cfg в своем собственном домашнем каталоге, что обеспечивает дополнительное конфигурирование. Если у вас нет ни одного из этих файлов, то проверьте, например, /usr/share/doc/dpkg/dpkg.cfg.
Инструмент dpkg использует многие файлы в ветке /var/lib/dpkg вашей файловой системы. В частности, файл /var/lib/dpkg/status содержит статус информации о пакетах вашей системы. Листинг 29 показывает использование dpkg -s для отображения статуса пакета guile после его установки. Напомним, что мы действительно установили guile-1.6. Из Листинга 29 мы видим, что нам нужно указывать полное имя, а не сокращенное.
Листинг 29. Статус пакета guile.
ian@attic4:~$ dpkg -s guile
Package `guile' is not installed and no info is available.
Use dpkg --info (= dpkg-deb --info) to examine archive files,
and dpkg --contents (= dpkg-deb --contents) to list their contents.
ian@attic4:~$ dpkg -s guile-1.6
Package: guile-1.6
Status: install ok installed
Priority: optional
Section: interpreters
Installed-Size: 204
Maintainer: Rob Browning
Architecture: i386
Version: 1.6.7-1ubuntu1
Provides: guile
Depends: guile-1.6-libs, libc6 (>= 2.3.2.ds1-4), libguile-ltdl-1
Suggests: guile-1.6-doc
Conflicts: libguile-dev (<= 1:1.4-24)
Description: The GNU extension language and Scheme interpreter
Guile is a Scheme implementation designed for real world programming,
providing a rich Unix interface, a module system, an interpreter, and
many extension languages. Guile can be used as a standard #! style
interpreter, via #!/usr/bin/guile, or as an extension language for
other applications via libguile.
Пакеты и файлы в них
Часто мы хотим знать, что находится в пакете или к какому пакету принадлежит тот или иной файл. Обе эти задачи для dpkg. Листинг 30 иллюстрирует использование dpkg -L для вывода списка файлов (включая каталоги) установленных из пакета guile.
Листинг 30. Что находится в пакете guile?
root@attic4:~# dpkg -L guile-1.6
/.
/usr
/usr/bin
/usr/bin/guile-1.6-snarf
/usr/bin/guile-1.6-tools
/usr/bin/guile-1.6
/usr/bin/guile-1.6-config
/usr/share
/usr/share/guile
/usr/share/guile/1.6
/usr/share/guile/1.6/scripts
/usr/share/guile/1.6/scripts/autofrisk
/usr/share/guile/1.6/scripts/display-commentary
/usr/share/guile/1.6/scripts/doc-snarf
/usr/share/guile/1.6/scripts/frisk
/usr/share/guile/1.6/scripts/generate-autoload
/usr/share/guile/1.6/scripts/lint
/usr/share/guile/1.6/scripts/PROGRAM
/usr/share/guile/1.6/scripts/punify
/usr/share/guile/1.6/scripts/read-scheme-source
/usr/share/guile/1.6/scripts/snarf-check-and-output-texi
/usr/share/guile/1.6/scripts/snarf-guile-m4-docs
/usr/share/guile/1.6/scripts/use2dot
/usr/share/doc
/usr/share/doc/guile-1.6
/usr/share/doc/guile-1.6/copyright
/usr/share/doc/guile-1.6/changelog.Debian.gz
/usr/lib
/usr/lib/menu
/usr/lib/menu/guile-1.6
Чтобы найти пакет, содержащий какой-то конкретный файл, используйте опцию dpkg -S как показано в Листинге 31. Имя пакета выводится слева.
Листинг 31. Какой пакет содержит файл?
ian@attic4:~$ dpkg -S /usr/share/guile/1.6/scripts/lint
guile-1.6: /usr/share/guile/1.6/scripts/lint
Вы можете отметить, что список в Листинге 30 не содержит /usr/bin/guile, тогда как команда which guile говорит, что это программа, которая запустится если набрать guile. Когда такое случается вам может понадобиться выполнить некоторую поисковую работу, чтобы найти откуда пришел пакет. Например, на этапе установки могут выполняться такие задачи, как создание символьных ссылок, которые не указываются в качестве составляющих пакета. Последним добавлением в систему Linux является система alternatives которая управляется командой update-alternatives. В Листинге 32, мы показали как использовать команду ls, чтобы увидеть с чем связана команда guile при помощи символьной ссылки. Ссылка на каталог /etc/alternatives подсказывает, что мы используем систему alternatives, и потому мы используем команду update-alternatives, чтобы найти больше информации и в конце концов мы сможем использовать команду dpkg -S для подтверждения, что команда guile получена из пакета guile-1.6. Настройка системы alternatives может быть сделана постустановочным скриптом, являющимся частью пакета guile-1.6.
Листинг 32. Более сложное использование dpkg -S
ian@attic4:~$ ls -l $(which guile)
lrwxrwxrwx 1 root root 23 2005-09-06 23:38 /usr/bin/guile -> /etc/alternatives/guile
ian@attic4:~$ update-alternatives --display guile
guile - status is auto.
link currently points to /usr/bin/guile-1.6
/usr/bin/guile-1.6 - priority 160
slave guile-config: /usr/bin/guile-1.6-config
slave guile-snarf: /usr/bin/guile-1.6-snarf
slave guile-tools: /usr/bin/guile-1.6-tools
Current `best' version is /usr/bin/guile-1.6.
ian@attic4:~$ dpkg -S /usr/bin/guile-1.6
guile-1.6: /usr/bin/guile-1.6
Перенастройка пакетов Debian.
APT содержит функцию с именем debconf, которая используется для настройки пакетов после их установки. Пакеты, использующие эту функцию (а используют не все) могут быть перенастроены после того, как они уже установлены. Самый легкий способ сделать это -- использовать команду dpkg-reconfigure. Например, команда adduser может создать домашние каталоги, которые сможет просматривать любой пользователь системы. Вам это может не понравиться по соображениям безопасности. На Рисунке 2 приведены вопросы по настройке, соответствующие пакету adduser. Выполните dpkg-reconfigure adduser (от имени root) для вывода этого окна.
Рисунок 2. Использование dpkg-reconfigure
Использование dselect
Ранее мы отмечали, что статус пакетов хранится в /var/lib/dpkg/status. Мы также указывали, что dpkg может делать больше, чем просто отображать информацию о пакете. Теперь мы кратко рассмотрим команду dselect, предоставляющую текстовый полноэкранный интерфейс (используя ncurses) к функциям dpkg для управления пакетами. Вы можете использовать dselect для установки или удаления пакетов, а также для управления флагами статуса, показывающими должен ли пакет поддерживаться в актуальном состоянии или оставить его в текущем состоянии. Если вы выполните команду dselect (от имени root), то вы увидите экран, похожий на приведенный на Рисунке 3.
Иcпользование режима Select в dselect
Вы можете просматривать и изменять статус каждого пакета выбрав опцию Select подсвеченную на Рисунке 3. Вы увидите окно справки. Для выхода из справки в любой момент нажмите Пробел. Затем вы увидите список пакетов и групп пакетов.
Вы можете искать пакеты, используя / в конце строки поиска. На Рисунке 4 показан пример результат поиска для "guile".
Рисунок 4. Окно Selection для dselect
Состояния выбора пакета
Состояние выбора для каждого пакета может быть определено по скрытому заголовку EIOM. Эти буквы расшифровываются как Error (ошибка), Installed state (состояние Установлено), Old mark (помечен как старый) и Mark (помечен). Вы можете использовать клавишу "v" для переключения между краткой формой отображения этой информации и отображением этого в виде слов.
Четвертую колонку, или M, мы рассмотрим повнимательнее. Она описывает что случится после того, как мы закончим работу с окном выделения и перенесемся в окно установки. Пометки имеют следующее значение:
*
Установить или обновить до последней версии
=
Оставить пакет с текущим статусом и версией
- (дефис)
Удалить пакет, но оставить его настройки для случая повторной переустановки позднее
_ (подчеркивание)
Удалить пакет вместе с настройками.
Для изменения пометок нажмите соответствующую клавишу, за исключением того, что следует нажимать клавишу "+" чтобы пометить пакет для установки или обновления. По завершении нажмите Enter для подтверждения сделанных изменений или нажмите "X" (заглавную X) для отмены изменений без сохранения. Это вернет вас к окну, изображенному на Рисунке 3, с выбранной опцией Install (Установка). Нажмите Enter для установки или обновления вашей системы.
Если вам понадобится помощь, то в любой момент нажмите "?" (знак вопроса). Нажмите Пробел для выхода из справки.
Обновление Debian другими средствами
Мы увидели, что dselect может помочь установить или удалить отдельные пакеты, а также обновить все пакеты вашей системы до последних версий. Если вы хотите сделать это из командной строки, то можете использовать apt-get dselect-upgrade, что обработает пометки, которые, как мы видели, настраиваются при помощи dselect.
Кроме dselect существует несколько других интерактивных интерфейсов управления пакетами для систем Debian, включая aptitude, synaptic, gnome-apt и wajig. Synaptic это графическое приложение для использования в оконной системе X. На рисунке 5 показан интерфейс пользователя synaptic с нашим старым другом -- пакетом guile, помеченным для установки.
Рисунок 5. Установка guile с использованием synaptic
Кнопка Apply (Применить) установит guile и обновит все остальные пакеты, включенные в список на обновление. Кнопка Reload (Перезагрузить) обновит список пакетов. Если вы используете графический интерфейс, то возможно synaptic будет для вас более удобна в использовании нежели apt-get, dpkg или dselect.
Поиск пакетов Debian
В нашем последнем пункте об управлении пакетами в Debian, мы рассмотрим способы поиска пакетов. Обычно apt-get и другие рассмотренные нами инструменты, уже знают все пакеты, которые могут понадобиться вам из списка доступных пакетов. Команда, которую мы еще не использовали это apt-cache, она полезна для поиска информации о пакете в вашей системе. Apt-cache может искать регулярные выражения (о которых мы поговорим подробно в учебнике по теме 103). Предположим вам нужно найти имя пакета, содержащего загрузчик Linux. Листинг 33 показывает как можно сделать это.
Листинг 33. Поиск загрузчика Linux при помощи apt-cache
ian@attic4:~$ apt-cache search "linux loader"
lilo - LInux LOader - The Classic OS loader can load Linux and others
lilo-doc - Documentation for LILO (LInux LOader)
Ранее мы видели, что dselect и synaptic также предоставляют средства поиска. Если вы используете synaptic, то заметьте, что в меню поиска имеются опции, при помощи которых вы можете указать область поиска: только имена или также описания пакетов.Если вы все еще не можете найти пакет, то поищите в списке пакетов на сайте Debian (смотри Ресурсы), или еще где-то в Интернет.Если вы выполнили поиск и загрузили .deb файл, то вы можете установить его, используя dpkg -i. Например, Dr Geo может быть найден в виде .deb пакета в официальном репозитории пакетов Debian.
Листинг 34. Установка Dr Geo из .deb пакета
ian@attic4:~$ ls drg*.deb
drgeo_1-1.0.0-1_i386.deb
ian@attic4:~$ sudo dpkg -i drgeo_1-1.0.0-1_i386.deb
Password:
Selecting previously deselected package drgeo.
(Reading database ... 84435 files and directories currently installed.)
Unpacking drgeo (from drgeo_1-1.0.0-1_i386.deb) ...
Setting up drgeo (1.0.0-1) ...
Заметьте, что архив с исходными текстами имеет большую версию (1.1.0), нежели deb пакет (1.0.0-1). Если вы установили Dr Geo и по некоторым причинам он не работает, то возможно вам придется установить его из исходных текстов
Если ничего не помогло, то существует еще один возможный источник пакетов. Предположим, что вы нашли программу упакованную в RPM, а не .deb. Вы можете использовать программу alien, которая может осуществлять преобразование из одного формата пакетов в другой. Вам следует тщательно прочитать документацию alien поскольку не все возможности систем управления пакетами alien может преобразовать в другой формат.
Существует намного больше систем управления пакетами в Debian, нежели описано здесь. А также в Debian имеется многое кроме системы управления пакетами.
Взято с ibm developerworks
One Trackback
[...] разделе об управлении пакетами в Debian, мы дали вам краткий обзор управления пакетами. В этом разделе мы сосредоточимся на Red Hat Package Manager [...]