Сборка пакетов Debian

Введение

Зачастую некоторый пакет имеется в ветках unstable и experimental, однако его нет в ветках stable/testing. Программу поставить очень хочется, а обновлять полсистемы страшновато или нежелательно.

Для таких случаев есть замечательный ресурс backports.org, однако его использование во многом похоже на прямое использование веток unstable и иногда доставляет бОльшие проблемы из-за периодически возникающих конфликтов между backports и unstable.

В большинстве случаев установить пакет из unstable и experimental можно, используя пересборку пакета в своем окружении. Делается это довольно несложно, и данное руководство предназначено для того, чтобы помочь начинающему пользователю в этом вопросе. Для примера мы разберем вариант с установкой пакета fluxbox из experimental-ветки.

Здесь намерено будут описываться относительно "низкоуровневый" метод. "Высокоуровневые" утилиты вроде dpkg-buildpackage или debuild будут упомянуты, однако как всегда использование более высокоуровневого инструмента иногда сталкивает нас с более высокоуровневыми проблемами, а главное уводит от понимания внутренних деталей процесса.

Настройка apt-get

Прежде всего, нам необходимо настроить apt-get на работу с src-репозитариями Debian. Для этого добавьте в Ваш файл /etc/apt/sources.list следующие строки:

Зеркало пакетов, разумеется, можете выбрать любое - то, которым наиболее часто пользуетесь. После изменения файла /etc/apt/sources.list сделайте традиционный

и будем считать систему настроенной для наших дальнейших действий.

Немного теории

Что представляет собой src-пакет в системе Debian?

Src-пакет для debian - это исходные тексты программы, которые любезно предоставлены автором под той или иной лицензией, дополненные несколькими скриптами (которые предоставлены сопровождающим пакета), обеспечивающими сборку пакета.

Все скрипты, файлы и т.п., относящиеся к сборке пакета в системе Debian, традиционно располагаются в подкаталоге debian/ вместе с исходными текстами.

Src-пакет Debian обычно состоит из нескольких файлов:

Примечание: Некоторые включают каталог debian/ прямо в архив с исходными кодами. Это в основном касается программ разработанных специально для Debian. В таком случае вместо файлов .orig.tar.gz и .diff.gz будет один файл package-version.tar.gz.

Получение и распаковка пакета с исходными текстами

В системе, настроенной как было рекомендовано выше, данная процедура выливается в одну команду:

для нашего случая с fluxbox это будет выглядеть так:

В результате этого действия, как видно из приведенного выше лога, были скачаны нужные файлы с зеркала (которое мы прописали в /etc/apt/sources.list) и произведена распаковка исходников и наложение патча в .diff.gz.

Данную операцию необязательно было проделывать с помощью apt-get, можно было пойти на страничку пакета, скачать файлы по ссылке Downloads (внизу страницы) и распаковать командой

Немного об устройстве каталога debian/

Все действия по сборке пакетов выполняются из каталога с исходными текстами, который получился при распаковке src-архива. В этом каталоге расположен и каталог debian/.

В данном каталоге нас прежде всего будут интересовать два файла:

Прежде всего в последнем файле нас интересует одна строка, для нашего пакета fluxbox она выглядит так:

как видим это просто список пакетов которые необходимы нам при сборке.

Зависимости для сборки

Это может оказаться как самый простой вопрос, так и самый сложный. Ситуация состоит в следующем. Сопровождающий пакета, как правило, является человеком, хорошо разбирающимся во внутреннем устройстве Debian, поэтому сопровождающие зачастую раньше других переходят на использование testing/unstable веток. Кроме того, аплоад пакетов в Debian происходит прежде всего в unstable, а потому сопровождающий часто оттестировал сборку своего пакета только под testing/unstable. Довольно редко авторы программ указывают версионные зависимости для своих детищ, поэтому не всегда удаётся проставить правильные версии, и они могут быть как завышены, так и занижены. Выяснять, с какой версией той или иной библиотеки перестанет собираться программа занимает много времени и сил, а зачастую и не очень нужно.

Установка зависимостей для сборки

Простой случай: все получилось с первого раза

Если у Вас apt-get настроен так, как было указано выше, то в большинстве случаев установка зависимостей может быть сделана одной командой:

Для рассматриваемого нами пакета fluxbox все необходимое будет установлено без проблем, и можно переходить к разделу (ниже) Сборка пакета.

Требуемые зависимости отсутствуют в моем дистрибутиве

Здесь возможны два варианта.

Для того чтобы узнать, что еще не установлено для сборки пакета, запустите утилиту dpkg-checkbuilddeps в каталоге с исходными текстами. Эта утилита выведет список того что требуется для сборки, но еще не установлено в Вашей системе. Для перехода к следующему шагу Вам необходимо добиться того чтобы утилита dpkg-checkbuilddeps не выдавала сообщений о неудовлетворенных зависимостях. Можете попробовать собрать неудовлетворенную зависимость или понизить требования к номеру версии или покомбинировать эти два варианта.

Сборка пакета

Итак, все что необходимо нам для сборки, установлено. Осталось, собственно, собрать пакет. Для этого нам понадобится утилитка fakeroot, установите ее, если она у Вас еще не установлена.

Переходим в каталог с распакованным src-пакетом и даем команду:

Это приведет к тому что будет вызван редактор changelog-файла пакета. Куда вы должны вписать что-то о ваших действиях. Если, например, Вы понизили версионную зависимость, то напишите об этом. Этот шаг можно, конечно, пропустить, однако лучше все же указать, кем собран пакет и зачем. Это может пригодиться в случае, если Вы, например, захотите с кем-то поделиться результатами своего труда, а так же, если вдруг решите сообщить о каком-то баге: измененный номер версии пакета будет фигурировать в письме, написанном при помощи reportbug.

Отдельно надо рассмотреть вопрос о том, какую версию указывать в changelog.

Исходя из этого, правильным будет добавить к версии -какаятострока1, если вы что-то существенно дорабатывали, или ~какаятострока1, если делали бэкпорт.

В результате будет в родительском каталоге собран двоичный пакет, ради которого затевалась вся катавасия.

Проблемы на этом шаге могли возникнуть только в двух случаях:

Вернитесь на несколько шагов назад и повторите попытку.

Установка пакета

После того, как пакет собран, его осталось установить командой:

Или включить его в состав собственного репозитария. Это уже базовые вещи в системе Debian, поэтому их описание будет опущено.

Сборка пакета в системе pbuilder

Довольно неплохо упрощает данный процесс интерактивная программа pbuilder. Установите пакет pbuilder, затем откройте на редактирование /etc/pbuilderrc и пропишите адрес Вашего любимого репозитория.

Выполните команды:

система готова к употреблению.

Вместо имени sarge подставьте название Вашего дистрибутива.

теперь чтобы собрать пакет для выбранного дистрибутива дайте команду:

Будут автоматически проделаны все описанные выше шаги, при этом все пакеты требуемые для сборки скачиваются и устанавливаются во временный каталог, поэтому система не "замусоривается" лишними пакетами. Правда, проблему с зависимостями для сборки всё равно придется решать, однако последовательно пройти по всем зависимостям с данным инструментом не представляет особого труда. Почитайте документацию на этот замечательный пакет и узнайте об остальных его возможностях.

Ссылки

DebianRussian/DebinstPackages (last edited 2009-06-06 07:57:07 by YuriKozlov)