Ubuntu logo

Packaging Guide

6. Створення пакунків для нових проґрам

Хоч у архіві Ubuntu є тисячі пакунків, вистачає проґрам, якими ніхто не займається. Якщо Ви знаєте про якусь чудову проґраму, про яку, на Вашу думку, варто взнати ширшому колу користувачів, Ви можете спробувати докласти свою руку до створення пакунку для Ubuntu або PPA. Цей посібник проведе Вас через етапи створення пакунку для нової проґрами.

Спочатку Вам слід прочитати статтю Підготовка, щоб підготувати своє середовище розробки.

6.1. Перевірка проґрами

Першим етапом створення пакунку є отримання tar-файлу з апстріму («апстрімом» ми звемо авторів застосунків) й перевірка того, що він нормально компілюється та запускається.

Цей посібник проведе Вас через процес створення пакунку для невеликого застосунку GNU Hello, доступного на GNU.org.

Якщо в Вас ще немає інструментів збірки, встановіть їх. Також встановіть усі необхідні залежності.

Встановимо інструменти збірки:

$ sudo apt-get install build-essential

Стягнемо основний пакунок:

$ wget -O hello-2.7.tar.gz "http://ftp.gnu.org/gnu/hello/hello-2.7.tar.gz"

Тепер розпакуємо основний пакунок:

$ tar xf hello-2.7.tar.gz
$ cd hello-2.7

Цей застосунок використовує систему збірки autoconf, тож нам потібно запустити ./configure для підготовки до компілювання.

При цьому буде перевірено наявність необхідних для збірки залежностей. Оскільки hello — простий приклад, build-essential забезпечить нас усім, що потрібно. Для складніших проґрам, команда завершиться помилкою, якщо в нас немає необхідних бібліотек і файлів для розробки. Встановіть потрібні пакунки й повторіть процес, поки команда не завершиться з успіхом.:

$ ./configure

Тепер потрібно скомпілювати джерельний код:

$ make

Якщо компілювання завершилося успішно, можна встановити та запустити проґраму:

$ sudo make install
$ hello

6.2. Створення пакунку

bzr-builddeb містить модуль для створення нового пакунку з шаблону. Цей модуль є обгорткою навколо команди dh_make . Він вже повинен бути в Вас, якщо Ви встановили packaging-dev. Запустіть команду, вказавши ім’я пакунку, номер версії та шлях до tar-архіву з апстріму:

$ sudo apt-get install dh-make bzr-builddeb
$ cd ..
$ bzr dh-make hello 2.7 hello-2.7.tar.gz

Коли він спитає тип пакунку, оберіть s: одинарний бінарник. Це імпортує код у гілку й створить теку debian/. Погляньте на її вміст: більшість автоматично створених файлів потрібні лише для спеціялізованих пакунків (наприклад модулі Emacs), тож можна почати з вилучення зайвих файлів:

$ cd hello/debian
$ rm *ex *EX

Тепер потрібно внести зміни у кожен з файлів.

В debian/changelog змініть номер версії на версію Ubuntu: 2.7-0ubuntu1 (апстрім-версія 2.7, версія в Debian 0, версія в Ubuntu 1). Також змініть unstable на поточний розроблюваний випуск Ubuntu, наприклад, trusty.

Велика частина процесу компілювання пакунку здійснюється скриптами з debhelper. Оскільки поведінка debhelper змінюється при виході старшої версії, файл compat повідомляє debhelper яку саме версію використовувати. Має сенс використовувати найсвіжішу версію: 9.

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

Build-Depends: debhelper (>= 9)

Також потрібно заповнити опис проґрами у полі Description:.

copyright потрібно заповнити у відповідності з ліцензією на джерело з апстріму. Згідно файлу hello/COPYING, це ліцензія GNU GPL 3 або пізніша її версія.

docs повинен містити будь-які файли документації з апстріму, які, на Вашу думку, мають бути включені у готовий пакунок.

README.source і README.Debian необхідні, лише якщо Ваш пакунок має якісь нестандартні функції. В нас таких немає, тож можна вилучити ці файли.

source/format можна залишити як є, він дає опис формату версії пакунку джерельного коду, який повинен бути 3.0 (quilt).

rules — найскладніший файл. Це Makefile, який компілює код й перетворює його у двійковий пакунок. На щастя, основну частину роботи на сьогодні автоматично виконує debhelper 7, тож універсальна мета % просто запускає сценарій dh, який робить усе, що потрібно.

Детальніший опис усіх цих фалів у статті огляд каталогу debian.

Нарешті, закоммте код у гілку для пакунків:

$ bzr add debian/source/format
$ bzr commit -m "Initial commit of Debian packaging."

6.3. Збірка пакунку

Тепер нам потрібно перевірити, що наші джерельні файли для пакунку успішно компілюються й збираються у двійковий .deb-пакунок:

$ bzr builddeb -- -us -uc
$ cd ../../

bzr builddeb — це команда для збірки пакунку у його поточному місцезнаходженні. -us -uc повідомляє що підписувати пакунок за допомогою GPG не потрібно. Результат буде поміщений у каталог «..».

Продивитися вміст пакунку можна за допомогою:

$ lesspipe hello_2.7-0ubuntu1_amd64.deb

Встановіть пакунок й перевірте, що він працює (пізніше за бажання Ви зможете вилучити його командою sudo apt-get remove hello):

$ sudo dpkg --install hello_2.7-0ubuntu1_amd64.deb

Можете також встановити усі пакунки одразу за допомогою:

$ sudo debi

6.4. Наступні кроки

Навіть якщо двійковий .deb-пакунок успішно збирається, Ваші джерельні файли для пакунку можуть містити помилки. Багато помилок можуть автоматично виявлятися нашим інструментом lintian, який можна застосувати до файлу метаданих .dsc, двійкових пакунків .deb або файлу .changes:

$ lintian hello_2.7-0ubuntu1.dsc
$ lintian hello_2.7-0ubuntu1_amd64.deb

Щоб побачити детальний опис вад, використовуйте прапорець lintian --info або команду lintian-info.

Результати перевірок архіву Ubuntu можна знайти у Інтернеті на http://lintian.ubuntuwire.org.

Для пакунків Python є також інструмент lintian4python, здійснюючий деякі додаткові перевірки lintian.

Після створення виправлення для файлів пакунку можна перезібрати його з параметром -nc (“no clean”), щоб не починати збірку з самого початку:

$ bzr builddeb -- -nc -us -uc

Переконавшись, що пакунок успішно збирається локально, Ви повинні перевірити, чи правильно його збирання буде відбуватися у чистій системі, за допомогою pbuilder. Оскільки незабаром ми збираємося завантажити його в PPA (персональний архів пакунків), це завантаження потрібно забезпечити цифровим підписом, щоб Launchpad міг переконатися, що завантаження зробили Ви (дізнатися про те, що завантаження буде підписане, можна за відсутністю передаваних bzr builddeb прапорців -us і -uc, які ми використовували раніше). Для підписування своєї роботи Вам знадобиться налаштувати GPG. Якщо Ви ще не налаштували pbuilder-dist або GPG, зробіть це зараз:

$ bzr builddeb -S
$ cd ../build-area
$ pbuilder-dist trusty build hello_2.7-0ubuntu1.dsc

Після того як Ви залишитеся задоволені отриманим пакунком, потрібно, щоб його перевірили інші люди. Ви можете вивантажити гілку на Launchpad для перевірки:

$ bzr push lp:~<lp-username>/+junk/hello-package

Вивантаження в PPA дозволить переконатися, що пакунок збирається нормально, а також дозволить Вам і решті тестувати бінарні пакунки. Вам знадобиться створити PPA на Launchpad, після чого вивантажити пакунок за допомогою dput:

$ dput ppa:<lp-username>/<ppa-name> hello_2.7-0ubuntu1.changes

Дивіться розділ «Завантаження» для додаткової інформації.

Попрохати провести review можна на каналі IRC #ubuntu-motu, або у переліку розсилки MOTU. У деяких випадках може знадобитися участь конкретної команди: у подібних випадках команда GNU допоможе розібратися.

6.5. Відправка на включення

Існує декілька шляхів, якими пакунок може потрапити в Ubuntu. У більшості випадків кращим шляхом може бути проходження спочатку через Debian. Це дозволить Вашому пакунку стати доступним для щонайбільшої кількості користувачів, оскільки він буде доступний не лише в Debian та Ubuntu, але й в усіх дистрибутивах, створених на їх основі. Ось декілька корисних посилань з відправки нових пакунків в Debian:

  • Debian Mentors FAQ - debian-mentors створений для менторства нових і перспективних розробників Debian. Це те місце, де можна знайти спонсора для завантаження Вашого пакунку в архів.

  • Work-Needing and Prospective Packages - інформація про те як відправляти баги “Intent to Package” (Призначення пакунку) і “Request for Package” (Запит пакунку), а також переліки відкритих ITP та RFP.

  • Посібник Розробника Debian, 5.1. Створення пакунків - безцінний документ для творців пакунків як під Ubuntu, так й під Debian. Даний розділ дає опис процесу відправки нових пакунків.

У деяких випадках має сенс відправлятися прямо в Ubuntu. Наприклад, якщо Debian знаходиться у стані “freeze”: тоді Ваш пакунок навряд встигне увійти в Ubuntu до найближчого релізу. Опис цього процесу на сторінці “Нові Пакунки” Ubuntu Wiki.

6.6. Знятки екрану

Завантаживши пакунок в Debian, Вам слід додати знятки екрану, аби майбутні користувачі змогли отримати уяву про те, як виглядає інтерфейс проґрами. Знятки потрібно відправляти на http://screenshots.debian.net/upload .