Введение в разработку Ubuntu: часть 4

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

Базовый обзор директории debian/

Эта статья объяснит значение различных файлов, важных при упаковке пакетов для Ubuntu и находящихся в директории debian/. Самые важные из них — лог изменений, контроль-файл, копирайт и правила. Они требуются для всех пакетов. Несколько дополнительных файлов в debian/ могуть быть использованы для кастомизации пакета. О некоторых из них мы с вами поговорим в этой статье, но здесь не будет рассказано обо всех их.

Лог изменений (changelog)

Как говорит имя этого файла, в нём содержится список изменений, произведённых в каждой версии. У него есть специальный формат, требующий наличия имени пакета, версии, дистрибутива, изменений и кто сделал изменения, в какое время. Если у вас есть GPG-ключ (смотрите вторую часть серии), убедитесь, что вы используете то же имя и email-адрес в changelog’е. Вот шаблон этого файла:

пакет (версия) дистрибутив срочность=срочность

* детали изменения

— больше деталей об изменениях

* и ещё больше

— имя мейнтейнера[два пробела] дата

Формат (особенно для даты) важен. Дата должна быть в формате RFC 5322, который может быть получен с помощью команды date -R. Для удобства, команда dch может быть использоваться для редактирования changelog’ов. Она обновит дату автоматически.

Маленькие изменения выделяются тире «-«, важные изменения выделяют звёздочкой «*».

dch —create (dch находится в пакете devscriptspackage) создаст стандартный debian/changelog для вас.

Вот пример файла changelog для hello:

hello (2.6-0ubuntu1) natty; urgency=low

 Учтите, что «-0ubuntu1» — здесь указывается ревизия дистрибутива.

У Ubuntu и Debian немного разные схемы версий пакетов, для избегаения кофликтов пакетов с одинаковыми версиями. Если пакет Debian сменился в Ubuntu, у него есть ubuntuX (где X — номер ревизии Ubuntu), находящийся в конце Debian-версии. Поэтому если пакет Debian hello 2.6-1 сменился благодаря Ubuntu, строка версии может быть 2.6-1ubuntu1. Если пакет для приложения не существует в Debian, Debian-ревизия равна 0 (например 2.6-0ubuntu1).

Для дальнейшей информации посмотрите секцию лога изменений (Секция 4.4) в Debian Policy Manual.

control-файл

Control-файл содержит информацию, используемую менеджером пакетов (таким как apt-get, synaptic, и adept), зависимости, информацию о мейнтейнере и многое другое.

Для пакета Ubuntu hello control-файл может выглядеть примерно так:

Source: hello

Section: devel

Priority: optional

Maintainer: Ubuntu Developers;

XSBC-Original-Maintainer: Jane Doe;

Standards-Version: 3.9.1

Build-Depends: debhelper (>= 7)

Bzr-Vcs: lp:ubuntu/hello

Package: hello

Architecture: any

Depends: ${shlibs:Depends}

Description: The classic greeting, and a good example

The GNU hello program produces a familiar, friendly greeting. It

allows non-programmers to use a classic computer science tool which

would otherwise be unavailable to them. Seriously, though: this is

an example of how to do a Debian package. It is the Debian version of

the GNU Project’s ‘hello world’ program (which is itself an example

for the GNU Project).

 Первый абзац описывает список пакетов, требуемых для сборки пакета из исходников, в поле Build-Depends. Он также содержит некоторую мета-информацию, такую как имя мейнтейнера, версию Debian Policy, которой компилируется приложение, местонахождение репозитория контроля версий, и домашнюю страницу upstream-а.

Учтите, что в Ubuntu мы ставим основной адрес в поле Maintainer, потому что каждый может изменять любые пакеты (это зависит от Debian, где изменение пакета обычно разрешено одному человеку или команде. Пакеты в Ubuntu должны обычно иметь поле Maintainer, направленное на Ubuntu Developers ( Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. ). Если поле Maintainer изменено, старое значение должно быть сохранено в поле XSBC-Original-Maintainer. Это может быть сделано автоматически с помощью скрипта update-maintainer, доступном в пакете ubuntu-dev-tools. Для дальнейшей информации, посмотрите спецификации поля Debian Maintainer в Ubuntu wiki.

Каждый дополнительный абзац описывает собираемый бинарный пакет.

Для дальнейшей информации, посмотрите секцию control-файла (Chapter 5) в Debian Policy Manual.

Копирайт-файл

В этом файле содержится копирайт-информация как об источнике upstream, так и для упаковки. Ubuntu и Debian Policy (Section 12.5) требуют, чтобы каждый пакет устанавливал копию своего копирайта и информацию о лицензировании в/usr/share/doc/$(имя_пакета)/copyright.

Обычно информация о правах находится в директории с исходниками программы, в файле COPYING. Этот файл должен включать информацию, такую как имена автора и упаковщика, URL, линия Copyright, включающая код, и собственно текст копирайте. Например, вот пример этого файла:

Format: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&;rev=166

Upstream-Name: Hello

Source: ftp://ftp.example.com/pub/games

Files: *

Copyright: Copyright 1998 John Doe < Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. >;

 License: GPL-2+

This program is free software; you can redistribute it

and/or modify it under the terms of the GNU General Public

License as published by the Free Software Foundation; either

version 2 of the License, or (at your option) any later

version.

.

This program is distributed in the hope that it will be

useful, but WITHOUT ANY WARRANTY; without even the implied

warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR

PURPOSE. See the GNU General Public License for more

details.

.

You should have received a copy of the GNU General Public

License along with this package; if not, write to the Free

Software Foundation, Inc., 51 Franklin St, Fifth Floor,

Boston, MA 02110-1301 USA

.

On Debian systems, the full text of the GNU General Public

License version 2 can be found in the file

‘/usr/share/common-licenses/GPL-2’.

Files: debian/*

Copyright: Copyright 1998 Jane Doe < Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. >;

License: GPL-2+

Этот пример следует правилу DEP-5: машинно-распарсиваемый debian/copyright. Вам нужно использовать этот файл.

 Файл правил

Последний файл — это правила. Они делают всю работу по созданию нашего пакета. Это Makefile, сообщающий, как скомпилировать и установить приложение, затем создающий .deb-файл из установленных файлов. Он также очищает все build-файлы.

Вот простая версия rules-файла, созданного dh_make (который может быть найден в пакете dh-make):

#!/usr/bin/make -f

# -*- makefile -*-

# Uncomment this to turn on verbose mode.

#export DH_VERBOSE=1

%:

dh $@

Давайте пройдёмся по этому файлу поподробнее.

dh выполняет debhelper-команды в последовательности. Поддерживаемые последовательности зависят от файла debian/rules: «build», «clean», «install», «binary-arch», «binary-indep», и «binary». Чтобы посмотреть выполняемые файлы в каждом пути, выполните:

 $ dh binary-arch —no-act

Команды в последовательности binary-indep проходят с опцией «-i», чтобы удостовериться, что они работают только на бинарно-независимых пакетах, и команды в последовательностях binary-arch проходят с опцией «-a», чтобы удостовериться, что они работают только на архитектурно-зависимых пакетах.

Каждая debhelper-команда запишет, когда она выполнится успешно, в debian/package.debhelper.log. (который dh_clean удаляет). Так что dh может сказать, какие команды уже были выполнены, для каких пакетов, и пропустить повторное выполение этих команд.

Каждый раз, когда dh выполняется, он проверяет лог, и находит последнюю записанную команду, которая в определённой последовательности. Затем он продолжает, со следующей командой в последовательности. Опции. The—until, —before, —after, и —remaining могут убрать задержку.

Посмотрите на /usr/share/doc/debhelper/examples/ и man dh для больше примеров. Также посмотрите секцию о rules (Секция 4.9) в Debian Policy Manual.

 Дополнительные файлы

Установочный файл

Установочный файл, который использует dh_install для установки файлов в бинарный пакет. У него обычно два стандартных случая использования:

Установка файлов в ваш пакет, которые не обрабатываются системой сборки upstream-ов

Расщепление единого большого исходного пакета в несколько бинарных пакетов.

В первом случае, установочный файл должен иметь одну линию на установленный файл, уточняя файл и директорию установки. Например, следующая линия должна установить скрипт foo из корневой папки исходников директории debian в usr/share/applications:

foo usr/bin

debian/bar.desktop usr/share/applications

Когда исходный пакет производит несколько бинарных пакетов, dh установит файлы вw debian/tmp, вместо напрямую в debian/. Файлы установленные в intodebian/tmp могут быть перемещены в отдельные бинарные пакеты, используя файлы multiple$package_name.install. Это часто делается для разъединения большого количества независимых данных. В этом случае, только имена файлов (или директорий) для установки должны присутствовать, без установочной папки. Например foo.install содержит только зависимые от архитектуры файлы, это может выглядеть как-то вот так:

usr/bin/

usr/lib/foo/*.so

В то время как foo-common.install содержит независимые от архитектуры файлы:

/usr/share/doc/

/usr/share/icons/

/usr/share/foo/

/usr/share/locale/

Это должно создать два бинарных пакета, foo и foo-common. Оба требуют собственный абзац в debian/control.

Посмотрите man dh_install и секцию про установочный файл (Секция 5.11) руководства для новых мейнтейнеров Debian для дополнительных деталей.

watch-файл

Файл debian/watch позволяет нам автоматически проверять новые версии upstream’ов, используя инструмент uscan, который мы можем найти в пакете devscripts. Первая линия watch-файла должна быть версией формата (3, на момент написания статьи), а следующие линии содержат любые URL для парсинга. Например:

version=3

http://ftp.gnu.org/gnu/hello/hello-(.*).tar.gz

Выполнение uscan в корневой исходной папке сравнит версию upstream в файле debian/changelog с последней доступной версией upstream. Если найдена новая версия upstream’а, она будет автоматически загружена. Например:

$ uscan

hello: Newer version (2.7) available on remote site:

http://ftp.gnu.org/gnu/hello/hello-2.7.tar.gz

(local version is 2.6)

hello: Successfully downloaded updated package hello-2.7.tar.gz

and symlinked hello_2.7.orig.tar.gz to it

Для дальшейшей информации, посмотрите man uscan и секцию watch-файла (Секция 4.11) в Debian Policy Manual.

Для списка пакетов, в которых watch-файл сообщает, что они не синхронизируются с upstream, посмотрите Ubuntu External Health Status.

Файл source/format

Этот файл отображает формат исходного пакета. Сейчас, формат автоматически устанавливается на 1.0, если этот файл не существуют. Но поощеряется использование нового формата 3.0. Этот файл должен содержать единственную линию с нужным форматом:

3.0 (native) для нативных пакетов Debian (нет upstream-версии) или

3.0 (quilt) для пакетов с upstream-тарболлом

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

http://wiki.debian.org/Projects/DebSrc3.0 содержит информацию и причины переключения на версию формата исходных пакетов 3.0.

Посмотрите man dpkg-source и секцию source/format (Секция 5.21) руководства новым мейнтейнерам Debian для дополнительных деталей.

Дополнительные ресурсы

В дополнение к ссылкам на Debian Policy Manual в каждом разделе выше, руководство Debian New Maintainers’ содержит более подробное описание каждого файла. Раздел 4, «Required files under the debian directory» рассказывает о файлах control, changelog, copyright и rules. Раздел 5, «Other files under the debian directory» рассказывает о дополнительных файлах, которые можно использовать.

Хотим Вам представить портал по компьюетрной игре Дота — dota-warcraft.ru.