# 11. Традиционные методы создания пакетов

The majority of this guide deals with Ubuntu Distributed Development (UDD) which utilizes the distributed version control system (DVCS) Bazaar for retrieving package sources and submitting fixes with merge proposals. This article will discuss what we will call traditional packaging methods for lack of a better word. Before Bazaar was adopted for Ubuntu development, these were the typical methods for contributing to Ubuntu.

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

## 11.1. Получение исходного кода

Чтобы получить пакет исходного кода, можно просто набрать:

    $ apt-get source <package_name>

Но у этого метода есть некоторые недостатки. Он скачивает версию исходного кода, которая доступна в вашей системе. Скорее всего, у вас установлен текущий стабильный выпуск, а вы собираетесь внести изменения в пакет в разрабатываемом выпуске. К счастью, пакет `ubuntu-dev-tools` предоставляет вспомогательный сценарий:

    $ pull-lp-source <package_name>

По умолчанию будет загружена самая свежая версия из разрабатываемого выпуска. Можно также указать версию выпуска Ubuntu следующим образом:

    $ pull-lp-source <package_name> trusty

to pull the source from the `trusty` release, or:

    $ pull-lp-source <package_name> 1.0-1ubuntu1

чтобы скачать версию пакета `1.0-1ubuntu1`. Для получения дополнительной информации о команде воспользуйтесь `man pull-lp-source`.

Для примера, давайте представим, что мы получили отчёт об ошибке, в котором говорится, что вместо “colour” в описании `xicc` должно быть “color,” и мы хотим это исправить. (Примечание: это просто пример чего-то, что можно изменить, а не реальная ошибка.) Чтобы получить исходный код, введите:

    $ pull-lp-source xicc 0.2-3

## 11.2. Создание Debdiff

Файл `debdiff` показывает различия между двумя пакетами Debian. Имя команды, используемой для его создания, тоже `debdiff`. Она является частью пакета `devscripts`. Смотрите `man debdiff` для подробной информации о ней. Чтобы сравнить два пакета исходного кода, передайте команде в качестве аргумента два файла `dsc`:

    $ debdiff <package_name>_1.0-1.dsc <package_name>_1.0-1ubuntu1.dsc

Чтобы продолжить наш пример, давайте отредактируем `debian/control` и «исправим» нашу «ошибку»:

    $ cd xicc-0.2
    $ sed -i 's/colour/color/g' debian/control

Мы также должны придерживаться Debian Maintainer Field Spec и отредактировать `debian/control`, заменив:

    Maintainer: Ross Burton <ross@debian.org>

на:

    Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
    XSBC-Original-Maintainer: Ross Burton <ross@debian.org>

Для этого можно воспользоваться инструментом `update-maintainer` (из пакета `ubuntu-dev-tools`).

Не забудьте задокументировать ваши изменения в `debian/changelog` с помощью `dch -i`, после чего мы можем сгенерировать новый пакет исходного кода:

    $ debuild -S

Теперь можно проверить наши изменения с помощью `debdiff`:

    $ cd ..
    $ debdiff xicc_0.2-3.dsc xicc_0.2-3ubuntu1.dsc | less

Чтобы создать файл патча, который можно отправить другим или приложить к отчёту об ошибке для одобрения, выполните:

    $ debdiff xicc_0.2-3.dsc xicc_0.2-3ubuntu1.dsc > xicc_0.2-3ubuntu1.debdiff

## 11.3. Применение Debdiff

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

    $ pull-lp-source xicc 0.2-3

Then in a terminal, change to the directory where the source was uncompressed:

    $ cd xicc-0.2

Фактически, debdiff похож на обычный файл патча. Примените его, как обычно, с помощью:

    $ patch -p1 < ../xicc_0.2.2ubuntu1.debdiff