Это старая версия документа.


Шаг 0. Регистрация на Launchpad

Если вы уже зарегистрированы на Launchpad можете пропустить этот шаг.

Перейдите по ссылке https://login.launchpad.net/+new_account и пройдите регистрацию. Это позволит вам создавать PPA, участвовать в обсуждении багов, править переводы и многое другое.

Шаг 1. Создание цифрового ключа

Цифровым ключем в дальнейшем будут подписываться все ваши пакеты. Именно при помощи него будет подтверждаться то, что пакет был выложен именно вами, а не кем-то другим. Более подробная информация о ключах содержится в этой статье.

Сгенерируйте ключ, выполнив в терминале следующую команду:

gpg --gen-key

Укажите тип ключа DSA and Elgamal, размер ключа оставьте по умолчанию - 2048, срок - без ограничения срока действительности. Подтвердите что вы правильно ввели всю информацию. Теперь укажите свои имя и фамилию, маленький коментарий и адрес электронной почты. Подтвердите, что вся информация введена правильно. После этого программа начнет генерацию ключа. В процессе может появится надпись вроде этой:

Недостаточно случайных чисел.  Выполняйте какие-либо действия для того,
чтобы ОС могла получить больше случайных данных! (Необходимо ещё 145 байт)

Попробуйте что-то понабирать на клавиатуре и процесс пойдет дальше.

В итоге должно получится примерно следующее:

gpg: ключ B0CF7C64 помечен как абсолютно доверяемый.
открытый и закрытый ключи созданы и подписаны.

gpg: проверка таблицы доверий
gpg: 3 ограниченных необходимо, 1 выполненных необходимо, PGP модель доверия
gpg: глубина: 0  корректных:   2  подписанных:   1  доверия: 0-, 0q, 0n, 0m, 0f, 2u
gpg: глубина: 1  корректных:   1  подписанных:   0  доверия: 0-, 0q, 0n, 0m, 1f, 0u
pub   2048D/B0CF7C64 2012-05-08
      Отпечаток ключа = BF0A D1A0 94EC 9396 803B  E256 F636 0EA4 B0CF 7C64
uid                  Baba Yaga (pensioner) <yaga@deepforest.ru>
sub   2048g/BED82F5A 2012-05-08

Нас интересует первая строчка, в ней указан ID ключа. В примере ID равен B0CF7C64.

Теперь отправим публичный ключ на сервер ключей:

gpg --send-keys --keyserver keyserver.ubuntu.com B0CF7C64
На этом этапе генирируются публичный и личный ключи. Личный ключ должен находится только у вас, иначе это поставит под угрозу безопасность PPA.

Шаг 2. Принятие Code of Conduct

Code of Conduct это документ, описывающий правила поведения в сообществе Ubuntu. Без подписания этого документа у вас не будет возможности использовать некоторые функции Launchpad, в том числе и создание PPA.

  • Перейдите по ссылке https://launchpad.net/codeofconduct
  • Нажмите Register an OpenPGP key
  • В поле Fingerprint введите отпечаток ключа, полученый в результате предыдущего щага и нажмите Import Key
  • На почту придет зашифрованное письмо. Почтовые клиенты (такие как Evolution) обычно предлагают расшифровать письмо. В противном случае можно скопировать текст письма в текстовый файл и выполнить команду

    gpg --decrypt /tmp/mail.txt

    где /tmp/mail.txt - файл с письмом.

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

  • Вновь перейдите на страницу https://launchpad.net/codeofconduct и скачайте Code of Conduct по ссылке Download the current Code of Conduct.
  • Подпишите скачанный файл коммандой:

    gpg --clearsign UbuntuCodeofConduct-1.1.txt

    Это создаст подписанный вашим ключом файл UbuntuCodeofConduct-1.1.txt.asc .

  • Перейдите на страницу https://launchpad.net/codeofconduct и нажмите на ссылку Sign it!. в появившееся поле Signed Code ввода вставьте все содержимое файла UbuntuCodeofConduct-1.1.txt.asc и нажмите Continue.

Шаг 3. Создание PPA

Перейдите на страницу своего профиля на Launchpad и найдите ссылку Create a new PPA. Заполните поля Display name и URL . Поле Description не обязательно для заполнения. При заполнении помните, что пользователи будут прописывать часть строки URL при добавлении PPA, поэтому его нужно делать максимально коротким, но при этом отражающем суть PPA. Описание Descriprion, будет выводится пользователям в терминал, при добавлении PPA, поэтому тоже не усердствуйте с объемом.

Шаг 4. Сборка пакетов для загрузки в PPA

Для загрузки в PPA используется специально подготовленные архивы source.changes, не пытайтесь загрузить в репозиторий .deb, пакеты. Для формирования подходящего пакета из исходников вашей программы необходимо сделать следующее:

"Дебианизация" исходников

Цель данной процедуры- создать в папке с исходниками папку debian, в которой будут лежать управляющие файлы для сборки пакета deb. Перед этой процедурой исходники должны быть собраны (но не установлены!), для чего, в зависимости от содержимого исходников необходимо выполнить команды:

./bootstrap
./configure --prefix=/usr
make

«Дебианизируем» исходники при помощи команды dh_make, для чего находясь в корне с исходниками необходимо выполнить

dh_make --createorig

При запросе скрипта нужно указать тип пакета «single binary» [s], вывод команды будет подобный:

dolce@casa:~/build/bakefile-0.2.9$ dh_make --createorig

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch?
 [s/i/m/l/k/n] s

Maintainer name  : dolce
Email-Address    : dolce@speran.info 
Date             : Thu, 31 Jan 2013 11:41:29 +0400
Package Name     : bakefile
Version          : 0.2.9
License          : blank
Type of Package  : Single
Hit <enter> to confirm: 
Done. Please edit the files in the debian/ subdirectory now. bakefile
uses a configure script, so you probably don't have to edit the Makefiles.

после этого в папке с исходниками появится папка debian, в которой будет много файлов .ex и .EX, их можно удалить

rm -f *.ex *.EX

Правка конфигурационных файлов

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

  1. Пакет привязался к релизу Ubuntu;
  2. Правильно отслеживалось обновление пакетов в PPA при неизменении версии пакета;
  3. Правильно отслеживалось обновление пакетов в PPA при изменении версии пакета.

Версионность

Требования описанные ниже являются обязательными для загрузки на Launchpad, в противном случае вы будете получать ошибки на почту, а пакеты не будут приниматься. (Rejected) Для соблюдения требований версионности Launchpad необходимо изменить данные о версии в файле debian/changelog, содержимое файла должно быть следующее:

mmex (0.9.9.0~ppa5) precise; urgency=low
 
  * Initial Release.
 
 -- dolce <vomikan@mail.ru>  Wed, 30 Jan 2013 17:24:49 +0400

, здесь в скобках к версии пакета нужно также приписать к её имени ~ppaX, где X номер загрузки пакета одной версии, это будет необходимо в случае, если перед этим вы залили неправильный архив и вам нужно что то поменять в нём. При загрузке такого архива в PPA будет отображаться только он, а различия от предыдущей версии будет доступны к просмотру в описании пакета., а после скобок- указать кодовое название релиза Ubuntu, для которого этот пакет будет загружаться. В описании указываем внесенные изменения. Для автоматизации внесения подписи добавляем в .bashrc контактные данные:

echo 'export DEBFULLNAME="Yuri Ivanov"' >>~/.bashrc
echo 'export DEBEMAIL="myusername@yandex.ru"' >>~/.bashrc
source ~/.bashrc

Теперь добавить изменения с помощью командной строки, например:

dch -i "Ready for game World Of Tanks (WOT). Patched with disable-dynamic-vertex-buffers2.patch ."

Зависимости

Ещё один важный описательный файл debian/control, в нём нужно указать:

  1. К какой «секции» пакетов относится этот пакет;
  2. Зависимости для сборки (пакет же будет собирать launchpad);
  3. Зависимости для установки (какие пакеты будут устанавливаться у пользователей вместе с нашим);
  4. Описание пакета (будет отображаться в synaptic).

Секция (Section)

Идем сюда, выбираем релиз, для которого формируем пакет, выбираем подходящую секцию, в заголовке будет указан название секции на английском языке, которое необходимо ввести в поле Section файла debian/control. Например так:

Section: misc

Зависимости для сборки (Build-Depends:)

Здесь необходимо указать пакеты, требуемые для сборки нашего пакета. Например так:

Build-Depends: debhelper (>= 8.0.0), autotools-dev, libwxgtk2.8-dev (>= 2.8.0), libboost-dev (>= 1.48.0), python-dev (>= 2.7.3)

Зависимости для устаноуи (Depends:)

Здесь необходимо указать пакеты, которые требуются для работы нашего пакета. Например так:

Depends: ${shlibs:Depends}, ${misc:Depends}, libc6 (>= 2.3.5-1), libwxgtk2.8-0 (>= 2.8.0)

Описание (Description:)

Вместо <insert up to 60 chars description> нужно ввести короткое описание (до 60 символов, без угловых кавычек), а вместо <insert long description, indented with spaces> нужно вписать длинное описание (без угловых кавычек).

Сборка исходников в архив

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

debuild -S -sd -k<key_ID>

Где <key_ID>- ID вашего ключа, полученного ранее. Писать нужно не отделяя пробелом от «-k».
Для того, что бы посмотреть ID необходимо выполнить следующую команду:

gpg --list-keys

Номер указывается в строке pub, после слэша во втором столбце.
При сборке пакета необходимо будет дважды ввести пароль, указанный при создании цифровой подписи.

В результате данного процесса рядом с папкой с исходниками, в числе прочих, появится архив my_app-0.0.0.1~ppa1_source.changes, который необходимо загружать на PPA.

Шаг 5. Загрузка пакетов в PPA

Загрузка пакетов осуществляется утилитой dput.

sudo apt-get install dput

Настройка dput

Для удобства стоит настроить dput, для этого необходимо отредактировать файл ~/.dput.cf и привести его к следующему виду:

[ppa-stable]
fqdn = ppa.launchpad.net
method = ftp
incoming = ~<ваш_id>/<имя_ppa-stable>/ubuntu/
login = anonymous
allow_unsigned_uploads = 0

[ppa-unstable]
fqdn = ppa.launchpad.net
method = ftp
incoming = ~<ваш_id>/<имя_ppa-unstable>/ubuntu/
login = anonymous
allow_unsigned_uploads = 0

<ваш_id>- ID вашей учетной записи или команды, отображается в строке URL браузера
<имя_ppa-unstable>- название выбранного PPA. Так как PPA у вас может быть несколько, то и конфигураций может быть сколько угодно.

Загрузка пакета

Пакет загружается командой

dput ppa-stable <source.changes>

где <source.changes> – файл полученный во время подготовки исходного кода.

После успешной загрузки на почтовый ящик вашей учетной записи, а так же почтовый ящик, указанный в файле debian/changelog придет уведомление об успешной или неуспешной загрузке архива. Что значат ошибки в письмах можно посмотреть здесь. В случае успешной загрузки, через некоторое время начнется сборка пакета для доступных архитектур, лог файл сборки будет доступен к просмотру онлайн, в просмотре подробностей к пакету на странице PPA, а так же, в случае ошибки, будет прислана ссылка на просмотр лога на почту.

Копирование пакета на другие версии релизов Ubuntu

Для того, чтобы пользователи различных версий дистрибутивов могли скачивать пакет с нашего репозитория, необходимо сделать следующее: нажать «View package details», далее нажать «Copy packages», отметить пакет, который хотите «размножить» и указать «Destination series» выбрав целевую версию дистрибутива. При этом (важно!!!), нужно поставить точку в пункте «Сopy existing binares», что запретит пересборку пакета, пересборка пакета с идентичными названием и версией в одном PPA невозможна, поэтому если вам, всё таки, нужно пересобрать бинарный файл, то придется загружать этот же пакет с увеличением ~ppaX в версии.

Ссылки