divius 22.04.2010 10:48
How-to`s — PPA своими руками с нуля. Часть 1. Введение в пакеты Debian. Сборка бинарного пакета
PPA своими руками с нуля. Часть I. Введение в пакеты Debian. Сборка бинарного пакетаДобрый день. В данной серии статей я расскажу вам, как создать собственный ppa на сервисе launchpad. Для тех, кто не в курсе: ppa (personal package archive) - киллер-фича сервиса launchpad.net, позволяющая каждому пользователю создавать личные репозиториями с пакетами для любой поддерживаемой версии Ubuntu. Всё, что нужно, это подготовить исходные коды и загрузить их на сервер, он сам соберёт из них пакеты для поддерживаемых архитектур (на данный момент это i386 и amd64). Рассказывать постараюсь буквально с нуля, чтобы было понятно даже тем, кто никогда не собирал пакеты для Debian. Я разобью статью на несколько частей, иначе размер статьи превысит всякие пределы.
Часть I.
Данную часть могут смело пропустить те, кто со сборкой пакетов Debian уже знаком.
1. Устройство пакета
Итак, что представляет пакет Debian. Давайте загрузим и разберёмся. Специально для тренировки новичков в Ubuntu есть пакет hello-debhelper. Да, да, это та самая программа helloworld, которую знают все начинающие программисты. Загружаем и копируем в рабочую директорию:
1 |
$ sudo apt-get install -d hello-debhelper
|
Распаковываем и смотрим, что получилось:
Файл debian-binary содержит версию формата пакета, на данный момент это "2.0". Файл data.tar.gz содержит сами файлы, которые требуется установить в систему, как-то так:
Обратите внимание на файлы, лежащие в директории /usr/share/doc/hello-debhelper. Эти файлы требуются стандартом пакетов Debian и часто не имеют прямого отношения к авторам самого проекта, а создаются теми, кто этот пакет поддерживает. Ваш пакет соберётся и без этих файлов, но ни в один приличный дистрибутив такой пакет не примут.
Самое интересное - файл control.tar.gz. Он содержит файлы, превращающие обычный архив в пакет Debian. Рассмотрим их поподробнее, с ними нам ещё придётся работать.
1 |
|
Второй файл, как следует из его названия, содержит md5-хэши всех файлов в пакете. Он создаётся автоматически, поэтому о нём можно не задумываться. А вот первый файл содержит всю важную информацию о пакете.:
1 |
$ cat control/control
|
С этим файлом мы будем иметь дело, поэтому я разберу его построчно, но только те поля, которые нам действительно пригодятся:
Package - имя пакета
Version - (вы не поверите!) версия пакета
Maintainer - тот, кто отвечает за пакет. В Debian здесь будет некое имя, а в Ubuntu, как видите, название группы.
Original-Maintainer - это поле присутствует только в пакетах для Ubuntu, в нём значится тот, кто отвечает за данный пакет в Debian.
Depends: зависимости пакета. Наш пакет требует libc6 версии не меньше, чем 2.3.4, dpkg версии не меньше, чем 1.15.4 или пакет install-info любой версии. На заметку: если вы хотите написать зависимость строго меньше какой-либо версии, надо писать так: hello (<< 2.5).
Description: описание.
Поля Conflicts, Replaces, Provides, Recommends и Suggests тоже полезны, но на первых порах без них можно обойтись.
Section: секция, которой будет отнесён ваш пакет. Секции можно посмотреть, например, здесь: http://packages.debian.org/squeeze/.hello-debhelper_2.4.orig.tar.gz - оригинальный tarball с исходным кодом программы
hello-debhelper_2.4-3.diff.gz - патч, представляющий собой изменения, сделанные авторами пакета
hello-debhelper_2.4-3.dsc - описание пакета и контрольные суммы его составляющих, подписанные автором пакета:
1 |
$ cat hello-debhelper_2.4-3.dsc
|
Обратите внимание на поле Build-Depends. В нём представлены пакеты, требуемые для сборки нашего пакета (не путать в Depends, в котором указаны зависимости времени выполнения).
После загрузки этих трёх файлов apt-get распаковывает оригинальные исходники и накладывает патч Debian, то есть в директории hello-debhelper-2.4 у нас лежит уже готовое к работе дерево исходных кодов.
2. Сборка при помощи Debhelper
Debhelper - это набор утилит для облегчения жизни создателей пакета. Для начала соберём бинарный пакет из готового пакета с исходным кодом. Тут есть 2 варианта: собирать в своей рабочей среде и собирать в виртуальной среде.
2.1. Сборка бинарного пакета при помощи debuild
Для сборки при помощи утилиты со смешным для русского человека названием "debuild" нам потребуется установить пакеты, указанные в секции Build-Depends. Далее:
1 |
|
Сборка пакета происходит, но... в конец прерывается с ошибкой:
1 |
Now signing changes and any dsc files...
|
Нам не удалось подписать пакет подписью того, кто в последний раз его изменял (что и не удивительно). В будущем мы будем подписывать пакеты своей подписью, а пока проинструктируем debuild не подписывать пакет.
1 |
|
Обратите внимание на эти строки в конец вывода:
1 |
Now running lintian...
|
Здесь была вызвана утилита lintian, которая проверяет пакет на наличие ошибок. Помните, что пакет с серьёзными ошибками у вас нигде не примут. Как, кстати, и пакет без вашей цифровой подписи.
2.2. Сборка бинарного пакета при помощи pbuilder
Преимущество pbuilder в том, что он не требует изменения вашей основной системы: pbuilder собирает пакет в специально созданном виртуальном окружении. Такой способ сборки занимает немало времени, поэтому, возможно, имеет смысл сначала делать пробную сборку при помощи debuild. Итак, создайте заново директорию ubuntu с пакетом исходного кода.
Сначала надо создать базовую систему для сборки:
1 |
|
Эта команда создаёт среду для сборки пакетов из секции main. Для нас это подходит, а вот если вы захотите собирать пакет, чьи зависимости находятся, например, в universe, вы можете обновить среду так:
1 |
|
Обновить список пакетов в базовой системе можно командой:
1 |
|
Вот теперь можно заняться сборкой пакета:
1 |
|
Увы, но сборка накроется по той же причине: нет подписи. Не унывайте, подпись мы скоро создадим, а пока ограничимся сборкой при помощи "debuild".
2.3 Сборка пакета с исходным кодом из готового дерева
Если у вас есть дерево с исходным кодом, сделать из него пакет исходного кода проще простого:
1 |
|
3. Упражнения
Пока всё, ждите вторую часть ближе к вечеру. А чтобы вм не скучать, дам небольшое упражнение: в дереве исходных кодов есть директория debian, в ней - тот самый (почти) файл control. В нём хранятся описания одновременно для бинарного пакета и пакета с исходным кодом. Поменяйте описание и соберите новый пакет=)
А ещё изучите пакет gthumb: бинарный и пакет с исходным кодом, с ним мы будем работать, когда будем говорить о создании ppa.
P.S.
Пост получился несколько сумбурным, уж извините. Замечания и исправления очень приветствуются, на вопросы готов ответить.
P.P.S.
Продолжение
divius 22.04.2010 10:51 #
+ 0 -
Упс, а как здесь что-нибудь под кат убрать?
тег есть, смотри внимательнее. Не найдешь - модеры уберут под кат сами, не беда.
Если у вас есть дерево с исходным кодом, сделать из него пакет исходного кода проще простого:
Черт, я уже литр йаду выпил и все стены головой продырявил, никак не вкурю, что имеется ввиду под "дерево исходных кодов", и где мне его достать! Бинарный пакет с подошью checkinstall собирается, а пакет с сорцами debuild-ом не хочет, ругается на отсутствующий файл debian/changelog.