Введение в разработку Ubuntu: часть 5. Упаковка.

Это пятая статья в серии, объясняющей основы разработки Ubuntu, не требующей огромного количества знаний, инструментов, концептов, процессов и инфраструктуры. Если вам понравилась статья или вы нашли в ней что-то проблемной, пожалуйста, проявляйте активность в комментариях.

Упаковка

Вы нашли отличный кусочек софта или прогамму, и вам нужно поместить её в Ubuntu или в PPA-репозиторий, так что вы решили упаковать его.

Проверяем программу

Первый шаг в упаковке — это получить tar-файл релиза из upstream (мы зовём авторов приложений «upstream»), и проверить, что он компилируется и выполняется.

Это руководство расскажет вам об упаковке, на примере простого приложения под названием KQRCode, которое было опубликовано на KDE-apps.org. Загрузите версию 0.4 с Sourceforge и поместите её в новую директорию.

Теперь распакуйте его:

$ tar xf kqrcode-0.4.tar.gz

$ cd kqrcode-0.4

Это приложение использует систему сборки CMake, так что можно выполнить cmake для подготовки к компиляции:

$ mkdir build

$ cd build

$ cmake ..

CMake проверит наличие требуемых зависимостей, в нашем случае нам говорится, что требуется Qt и KDE-библиотеки. Нам также потребуется GCC, можно установить build-essential, который содержит его в себе. Вы можете установить их (если у вас их нет) и снова выполнить CMake:

$ sudo apt-get install build-essential libqt4-dev kdelibs5-dev

$ cmake ..

Теперь вы можете скомпилировать исходники:

$ make

Выполнив это, вы получите некоторые ошибки об отсутствующих заголовках. Это значит, что есть остальные библиотеки, не проверенные CMake’ом. Сделайте заметку, чтобы не забыть напомнить upstream-у об этой проблеме. packages.ubuntu.com может быть использозован для нахождения пакетов из этого заголовка, установите эти пакеты и продолжите компиляцию:

$ sudo apt-get install libqrencode-dev libzbar-dev libzbarqt-dev

$ make

Если компиляция успешно завершилась, вы можете установить и запустить программу:

$ sudo make install

$ kqrcode

Создаём пакет

bzr-builddeb включает плагин для создания нового пакета из шаблона, шаблон является контейнером к команде dh_make:

$ sudo apt-get install dh-make

$ bzr dh-make kqrcode 0.4 kqrcode-0.4.tar.gz

Когда вас спросят тип пакета, введите s для одиночного бинарного.

Это импортирует код в бренч и создаст директорию упаковки debian/. Посмотите на её содержание. Большинство добавленных файлов требуются только для особых пакетов (например, модули Emacs), так что вы можете начать с удаления опциональных файлов-образцов:

$ cd kqrcode/debian

$ rm *ex *EX

Теперь вы можете кастомизировать каждый из файлов.

В debian/changelog смените номер версии на версию Ubuntu version: 0.4-0ubuntu1 (upstream-версия 0.4, Debian-версия 0, Ubuntu-версия 1). Также смените unstable на текущий разрабатываемый релиз Ubuntu, например на precise.

Большинство работы по упаковке пакетов делает группа скриптов, названная debhelper.

control содержит всю metada пакета. Первый параграф описывает исходники. Второй и дальнейшие абзацы описывают бинарные пакеты для сборки. Нам нужно добавить пакеты, требуемые для компиляции приложения в Build-Depends: так что сделайте так:

Build-Depends: debhelper (>= 7.0.50~), cmake, libqt4-dev, kdelibs5-dev,

libqrencode-dev, libzbar-dev, libzbarqt-dev

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

copyright требует заполнения согласно лицензии из источника upstream. В файле kqrcode/COPYING это GNU GPL 3 или позже.

docs содержат документацию upstream, которая по вашему мнению должна быть включена в финальный пакет.

README.source и README.Debian требются только, если у пакета есть нестандартные возможности, так что м может удалить их.

source/format можно оставить как есть, он описывает версию формата исходного пакета, и это должен быть 3.0 (quilt).

rules — самый сложный файл. Это Makefile, который компилирует код и помещает всё в бинарный пакет. К счастью, большинство этой работы делается debhelper’ом, так что универсальный % Makefile содержит всё, что нам нужно уже в авто режиме.

Наконец, закоммитьте код в ваш упаковочный бренч:

$ bzr commit

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

Теперь нам нужно проверить, что у нас удачно собран пакет, и собрать бинарный .deb-пакет:

$ bzr builddeb

Это должно скомпилировать пакет и поместить его в ../build-area. Вы можете просмотреть содержание пакета с помощью:

$ lesspipe kqrcode_0.4-0ubuntu1_amd64.deb

Установите пакет и проверьте его на работоспособность:

$ sudo dpkg —install kqrcode_0.4-0ubuntu1_amd64.deb

Следующие шаги

Даже если бинарный .deb-пакет собран, могут иметься баги. Множество ошибок можно обнаружить автоматически с помощью утилиты lintian, которую мы можем «натравить» и на исходный метадата-файл .dsc, и на бинарный .deb-пакет:

$ lintian kqrcode_0.4-0ubuntu1.dsc

$ lintian kqrcode_0.4-0ubuntu1_amd64.deb

Описание каждой проблемы, о которой будет сообщено, вы можете найти на сайте lintian.

После исправления в пакете, вы можете пересобрать пакет без необходимости сборки с нуля, используя:

$ debuild -nc

FIXME — здесь эквивалент UDD? Баг https://bugs.launchpad.net/bzr-builddeb/+bug/816376

$ bzr builddeb -S

$ cd ../build-area

$ pbuilder-dist oneiric build kqrcode_0.4-0ubuntu1.dsc

Когда у вас с пакетом будет всё нормально, вы захотите дать просмотреть его другим. Вы можете загрузить бренч на Launchpad для просмотра:

$ bzr push lp:~/+junk/kqrcode-package

Вы можете также загрузить исходный пакет в REVU для просмотора:

$ bzr builddeb -S

$ cd ..

$ dput revu kqrcode_0.4-0ubuntu1.dsc