Citkit, 23 марта 2006 г
На фоне своих блистательных сородичей - семейства apt-get
и программы aptitude
, - утилиты dpkg
, предназначенные для работы с единичными deb-пакетами, выглядят весьма скромно. Однако они
- были исторически первым средством автоматического развертывания пакетов, учитывающим их зависимости,
- лежат в фундаменте все надстраивающих их систем (
apt
,aptitude
,synaptic
,adept
), - в ряде случаев являются наиболее простым средством для установки или удаления пакета, а
- также получения информации о нем, и, наконец, оказываются незаменимыми при реконфигурировании пакетов установленных.
Вообще, возможности утилит семейства (см. man (1) dpkg
) очень широки, и потому заслуживают рассмотрения, хотя бы в минимально необходимом для пользователя объеме.
Наиболее употребимые утилиты семейства
- собственно
dpkg
- средство для установки и удаления программ; dpkg-query
- инструмент создания запросов к базе данных deb-пакетов;dpkg-reconfigure
- программа для настройки установленных пакетов.
А вообще это семейство включает в себя множество команд - полный их список можно получить с помощью командной конструкции
$ а /а/linux/dpkg* && а /а/sbin/dpkg*
и выглядит он следующим образом:
/usr/bin/dpkg /usr/bin/dpkg-gencontrol
/usr/bin/dpkg-architecture /usr/bin/dpkg-name
/usr/bin/dpkg-buildpackage /usr/bin/dpkg-parsechangelog
/usr/bin/dpkg-checkbuilddeps /usr/bin/dpkg-query
/usr/bin/dpkg-deb /usr/bin/dpkg-scanpackages
/usr/bin/dpkg-depcheck /usr/bin/dpkg-scansources
/usr/bin/dpkg-distaddfile /usr/bin/dpkg-shlibdeps
/usr/bin/dpkg-genbuilddeps /usr/bin/dpkg-source
/usr/bin/dpkg-genchanges /usr/bin/dpkg-split
/usr/sbin/dpkg-divert /usr/sbin/dpkg-reconfigure
/usr/sbin/dpkg-preconfigure /usr/sbin/dpkg-statoverride
Они входят в состав пакетов dpkg
и dpkg-dev
; первый, предназначенный для основных действий с бинарными пакетами, устанавливается по умолчанию в ходе первичной инсталляции и присутствует в любой (насколько мне известно) Debian-based системе; второй же, включающий утилиты для манипуляции с пакетами исходников, должен быть установлен дополнительно (или устанавливается как зависимость, например, при инсталляции пакета apt-build
, о котором речь пойдет в одной из грядущих заметок).
Для начала рассмотрим установку пакетов. Итак, если нам необходимо установить единичный пакет, поступаем так:
$ dpkg -i path2/packagename.deb
и дело в шляпе - через считанные мгновения пакет packagename.deb
будет установлен: это обеспечивает опция -i
(от install) вслед за командой dpkg
. Дабы в дальнейшем не повторяться, замечу, что все действия по установке и удалению пакетов требуют полномочий суперпользователя, приобретаемых временно командой su
или, как это принято в Ubuntu и его дериватах, sudo
.
Разумеется, успешной установка пакета будет только при соблюдении следующих условий:
- физическом наличии его в пределах досягаемости с локальной машины (на подключенной файловой системе, смонтированном компакт-диске или ином носителе);
- знании точного пути (
path2
) к нужному файлу пакета (имя его, кстати, также указывается полностью, в отличие от того, что мы увидим при использованииapt
) илиaptitude
; - отсутствии неудовлетворенных зависимостей.
Из первого условия следует, что dpkg
удобно использовать при доустановке компонентов с инсталляционного CD/DVD (или установке заблаговременно скачанных пакетов). Второе условие самоочевидно. Ну а третье также выполнимо без особого труда: в случае нарушения зависимостей dpkg
выдаст сообщение об ошибке с полным перечнем того, что нужно установить для ее устранения, причем в списке будут перечислены только обязательные зависимости. И достаточно все необходимые пакеты поместить в командную строку:
$ sudo dpkg -i path2/packagename1.deb ... path2/packagename#.deb
для того, чтобы они были установлены единой операцией (если, конечно, все эти пакеты имеются в наличии).
Другое часто требующееся применение команды dpkg
- удаление ненужных пакетов. Это делается двояко: команда
$ sudo dpkg -r packagename
удалит пакет, но сохранит настроечные его файлы, а команда
$ sudo dpkg -P packagename
произведет полную очистку системы от всех компонентов пакета (кроме конфигурационных файлов в домашнем каталоге пользователя - от них в любом случае придется избавляться вручную). Правда, только если он не связан зависимостями с другими пакетами - в этом случае последует сообщение о невозможности удаления пакета и выведен список его зависимостей, этому препятствующих.
Обратим внимание - в аргументах обеих команд фигурирует уже не полное имя пакета, а только его значимая часть. Это распространяется на все случаи использования dpkg
(и других команд ее семейства), когда речь идет об уже установленных пакетах.
Следующая сфера деятельности команд семейства dpkg
- получение информации о пакетах. Для уже установленных пакетов это проще всего сделать с помощью команды dpkg-query
, требующей указания какого-либо из операторов действия и имени пакета в качестве аргумента. Операторы действия команды dpkg-query
можно вывести так (поскольку получение информации о пакетах никак не влияет на систему в целом, необходимости в правах суперпользователя тут не возникает):
$ dpkg-query --help
Они следующие:
-s
или--status
- вывод детального статуса пакета, включающий:- имя пакета, собственно статус (установлен ли он) и приоритет;
- секция репозитория, к которой пакета относится (например, editors - для текстовых редакторов, kde - для аудиоплейера amarok, и так далее);
- размер пакета в установленном виде;
- имя майнтайнера, архитектура, для которой пакет собран, и номер версии;
- описание зависимостей и конфликтов;
- краткое (в один абзац) описание пакета.
-p
или--print-avail
- практически то же самое, но в форме, приспособленной для печати;-l
или--list
- тоже своего рода описание статуса, включающее сведения о том, установлен ли пакет, нуждается ли он в обновлении, нет ли ошибок в его настройке, и так далее;-W
или--show
- просто вывод номера версии в форме:$ dpkg-query -W nano
nano 1.3.8-2-L
или--listfiles
- полный список файлов, относящихся к данному пакету, в форме:/.
и так далее (пример для текстового редактора nano);
/etc
/etc/nanorc
/usr
/usr/share
/usr/share/doc
/usr/share/doc/nano
...-S
или--search
- поиск пакета, к которому относится некий файл, указанный в качестве аргумента; может выполнить и обратную задачу - поиск всех файлов, принадлежащих данному пакету, вывод в этом случае оказывается аналогичнымdpkg-query -L
.
Повторю, что все сказанное о информации по пакетам, относится к пакетам уже установленным. Для получения же сведений о неустановленных пакетах удобнее использовать соответствующие инструменты из комплекта apt
или aptitude
.
Еще одна важная задача утилит dpkg
- выполнение настройки отдельных, уже установленных, пакетов. Предназначенная для этого команда так и называется - dpkg-reconfigure
, и запускается (от лица суперпользователя или посредством команды sudo
) таким образом:
$ dpkg-reconfigure packagename
После этого вызывается диалоговая программа конфигурации - debconf
, и ответы на серию более или менее тривиальных вопросов позволяют добиться желаемого результата. Каковы эти вопросы - зависит от настраиваемой программы. Чтобы получить представление о процессе, рассмотрим пример с реконфигурированием кириллического окружения в консоли, за которое отвечает пакет console-cyrillic
(разумеется, перед настройкой он должен быть установлен). Правда, и без него консоль и в Debian, и во всех представителях семейства Ubuntu русифицирована вполне справно, но использование console-cyrillic
позволяет использовать многие дополнительные возможности по сравнению с базовой кириллизацией.
Итак, в ответ на команду
$ dpkg-reconfigure console-cyrillic
последовательно вызывается серия диалоговых окон. Первое из них (рис. 1) предлагает ввести список используемых (и нуждающихся в русификации) виртуальных терминалов, каковых по умолчанию шесть (и с умолчаниями вполне можно согласиться).
Далее идет выбор раскладки: и здесь можно придерживаться умолчального выбора - Русская с Win клавишами (рис. 2), других на просторах Руси, наверное, и не осталось.
Затем предлагается определить переключатель латиница/кириллица. Я - приверженец традиционного CapsLock (рис. 3), но - не тюрьма же народов! - выбор достаточно обширен, включая не только традиционный "подоконный" Alt+Shift, но даже и Win-клавиши (действительно, надо же прикрутить к ним хоть что-нибудь).
Следующая панель выбора - назначение временного переключателя между кириллической и латинской раскладками клавиатуры, действующего только на набор следующего символа (типичное его применение - ввести столь любимый соотечественниками символа бакса в русскоязычный текст). Тут я как раз и пользую одну из win-клавиш, остальные возможности приведены на рис. 4).
После этого предлагается выбрать экранный шрифт. Их немало, но при локали UTF-8 всерьез следует рассматривать только Terminus Unicode жирный или Terminus Unicode Framebuffer (рис. 5) - в зависимости от того, используется ли графическая консоль через линейный кадровый буфер, или нет.
С размером матрицы шрифта также вопросов не возникает - в современных условиях приемлема только матрица 8x16 (то, что отмечено по умолчанию на рис. 6).
"И, наконец, - как говорит очередная информационная панель, - вам нужно выбрать используемую кодировку". Поскольку мы не живем ни в Сербии, ни в Македонии, и веяниям прогресса также не чужды, останавливаемся на UNICODE (рис. 7).
Последний вопрос - установить настройку кириллицы в консоли при старте системы (рис. 8). С чем, очевидно, следует согласиться - иначе за каким таким зеленым все проделывалось? В любом случае - на этом реконфигурирование заканчивается, и возвращается приглашение командной строки.
Примерно так же выглядят диалоги при настройке любого пакета, в принципе предусматривающего реконфигурирование. Останавливаться на других примерах я не буду - мы итак очень удалились от основной темы настоящей заметки, рассмотрения возможностей утилит dpkg
.
Хотя разговор о dpkg
практически закончен. Конечно, я не затронул тут команд из пакета dpkg-dev
, предназначенных для работы с пакетами исходников. Но, по моему скромному мнению, это не самый удобный набор инструментов для решения этой задачи.