Алексей Федорчук
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
— полный список файлов, относящихся к данному пакету, в форме:/. /etc /etc/nanorc /usr /usr/share /usr/share/doc /usr/share/doc/nano ...
и так далее (пример для текстового редактора 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
последовательно вызывается серия диалоговых окон. Первое из них предлагает ввести список используемых (и нуждающихся в русификации) виртуальных терминалов, каковых по умолчанию шесть (и с умолчаниями вполне можно согласиться).
Далее идет выбор раскладки: и здесь можно придерживаться умолчального выбора — Русская с Win клавишами, других на просторах Руси, наверное, и не осталось.
Затем предлагается определить переключатель латиница/кириллица. Я — приверженец традиционного CapsLock, но — не тюрьма же народов! — выбор достаточно обширен, включая не только традиционный «подоконный» Alt+Shift, но даже и Win-клавиши (действительно, надо же прикрутить к ним хоть что-нибудь).
Следующая панель выбора — назначение временного переключателя между кириллической и латинской раскладками клавиатуры, действующего только на набор следующего символа (типичное его применение — ввести столь любимый соотечественниками символа бакса в русскоязычный текст). Тут я как раз и пользую одну из win-клавиш, остальные возможности приведены ниже:
После этого предлагается выбрать экранный шрифт. Их немало, но при локали UTF-8 всерьез следует рассматривать только Terminus Unicode жирный или Terminus Unicode Framebuffer — в зависимости от того, используется ли графическая консоль через линейный кадровый буфер, или нет.
С размером матрицы шрифта также вопросов не возникает — в современных условиях приемлема только матрица 8×16 — та, что отмечена по умолчанию:
«И, наконец, — как говорит очередная информационная панель, — вам нужно выбрать используемую кодировку». Поскольку мы не живем ни в Сербии, ни в Македонии, и веяниям прогресса также не чужды, останавливаемся на UNICODE:
Последний вопрос — установить настройку кириллицы в консоли при старте системы. С чем, очевидно, следует согласиться — иначе за каким таким зеленым все проделывалось? В любом случае — на этом реконфигурирование заканчивается, и возвращается приглашение командной строки.
Примерно так же выглядят диалоги при настройке любого пакета, в принципе предусматривающего реконфигурирование. Останавливаться на других примерах я не буду — мы итак очень удалились от основной темы настоящей заметки, рассмотрения возможностей утилит dpkg
.
Хотя разговор о dpkg
практически закончен. Конечно, я не затронул тут команд из пакета dpkg-dev
, предназначенных для работы с пакетами исходников. Но, по моему скромному мнению, это не самый удобный набор инструментов для решения этой задачи.