На фоне своих блистательных сородичей - семейства
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
Они следующие:
Повторю, что все сказанное о информации по пакетам, относится к пакетам уже установленным. Для получения же сведений о неустановленных пакетах удобнее использовать соответствующие инструменты из комплекта 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, предназначенных для работы с пакетами исходников. Но, по моему скромному мнению, это не самый удобный набор инструментов для решения этой задачи. Так что к вопросу исходников мы вернемся в заметке про apt-build, которая, надеюсь, последует в ближайшем будущем.