Требования: build-essential, automake, gnupg, lintian, fakeroot, patchutils, debhelper и pbuilder.
Ubuntu основан на дистрибутиве Debian Linux и использует такую же систему управления пакетами (APT). В начале каждого цикла разработки Ubuntu, пакеты в Ubuntu обновляются пакетами из нестабильной ветки Debian. Однако, так как Ubuntu не то же самое что Debian, некоторые пакеты должны быть модифицированы для работы в Ubuntu. Также разработчиками Ubuntu могут быть внесены исправления ошибок в пакетах. Вы можете проверить, имеют ли такие исправления место, посмотрев версию пакета. Если версия пакета содержит ubuntu (например gimp-2.2.9-3ubuntu2), тогда разработчики Ubuntu внесли изменения и это больше не пакет Debian. В репозитории Universe существует более 1000 таких модифицированных пакетов.
В начале каждого цикла разработки Ubuntu принимается решение относительно таких модифицированных под Ubuntu пакетов. Конечно же, если версия пакета в Debian не изменилась с момента выхода последней версии Ubuntu, тогда не нужно делать никаких изменений. Однако, если в Debian есть более новая версия данного пакета, тогда есть два пути. Если все причины появления модификаций в Ubuntu устранены (исправлены ошибки, нет проблем с зависимостями и т.п.), тогда мы можем просто взять пакет напрямую из Debian. Такое решение называется синхронизация (sync). Однако, если новая версия пакета в Debian имеет такие же проблемы, как и те, что были причиной для появления версии пакета под Ubuntu, тогда необходимо применить такие же изменения к новому пакету. Такое решение называется слияние (merging).
Процесс объединения заключается в просмотре изменений в пакетах с исходными кодами в Debian и Ubuntu и определении того что изменено и какие изменения специфичны для Ubuntu.
Для начала создайте каталог, который будет содержать наш проект, после перейдите в него:
mkdir ~/xcdroast cd ~/xcdroast
Теперь загрузите все задействованные пакеты с исходными кодами в этот каталог:
Архив исходных кодов xcdroast, используемый всеми версиями:
Файлы пакетов с исходными кодами Ubuntu Breezy:
Файлы пакета с исходными кодами Debian, на базе которых сделаны пакеты Breezy:
Файлы нового пакета с исходными кодами Debian, на базе которых будут сделаны пакеты для Dapper:
Для выполнения данных шагов используйте поиск пакетов Debian на packages.debian.org и пакетов Ubuntu на packages.ubuntu.com.
Очень полезным при выполнении слияний (или подготовки пакетов Ubuntu) оказывается пакет devscripts. Если вы еще не установили его, сделайте это перед тем, как продолжить.
Изучая Ubuntu changelog, вам должно быть понятно, каких различий можно ожидать между пакетом Ubuntu и пакетом Debian, от которого он происходит. Для xcdroast, Ubuntu changelog находится по адресу changelogs.ubuntu.com. В нем сказано, что файл .desktop был исправлен и должным образом установлен, чтобы исправить ошибку, указанную в Malone.
Теперь, внимательно изучите изменения внесенные в пакеты исходных кодов:
debdiff xcdroast_0.98+0alpha15-1.1.dsc xcdroast_0.98+0alpha15-1.1ubuntu1.dsc | \ ubuntu.debdiff | less ubuntu.debdiff
Строки, начинающиеся с - (минус), были удалены из пакета Debian, а строки, начинающиеся с + (плюс), были добавлены в пакет Ubuntu.
И вот, что мы видим:
В debian/rules использовался install вместо cp для установки иконки xcdroast. В дополнение, есть новая строка, устанавливающая файл .desktop.
В debian/changelog произведенные модификации добавлены в файл changelog.
В debian/dirs было добавлено usr/share/applications для правильной работы строк инсталляции, находящиеся выше.
добавлен xcdroast.desktop
Теперь мы знаем, какие изменения были внесены в исходный код Ubuntu. Далее нам необходимо просмотреть, какие изменения сделаны в исходном коде Debian.
debdiff xcdroast_0.98+0alpha15-1.1.dsc xcdroast_0.98+0alpha15-3.dsc > debian.debdiff less debian.debdiff
В этом debdiff файле намного больше изменений, чем в рассмотренном выше. Один из способов получить представление о том, что же было изменено, - это проверить в debdiff, какие именно файлы были измененны:
grep diff debian.debdiff
Данная команда показывает, что в новой версии Debian были изменены файлы debian/postinst, debian/rules, debian/changelog, debian/doc-base.manual, debian/control, и debian/menu.
Таким образом, нам нужно проверить файл debian/rules, чтобы увидеть, были ли внесены изменения, входящие в Ubuntu. Мы также можем сразу увидеть, что debian/dirs не претерпел никаких изменений по сравнению со старой версией Debian. Мы можем разархивировать пакет исходных кодов, используя dpkg-source:
dpkg-source -x xcdroast_0.98+0alpha15-3.dsc
Данная команда разархиврует файл xcdroast_0.98+0alpha15.orig.tar.gz, создаст каталог xcdroast-0.98+0alpha15 и применит модификации, найденные в xcdroast_0.98+0alpha15-3.diff.gz.
Перейдите в каталог debian:
cd xcdroast-0.98+0alpha15/debian
Вы можете видеть, что модификации файла rules
, сделанные в Ubuntu, не были внесены в новую версию Debian. Это означает, что:
cp debian/xcdroast.xpm `pwd`/debian/$(PACKAGE)/usr/share/pixmaps
...должно быть изменено на:
#cp debian/xcdroast.xpm `pwd`/debian/$(PACKAGE)/usr/share/pixmaps #install desktop and icon install -D -m 644 $(CURDIR)/debian/xcdroast.desktop \ $(CURDIR)/debian/xcdroast/usr/share/applications/xcdroast.desktop install -D -m 644 $(CURDIR)/debian/xcdroast.xpm \ $(CURDIR)/debian/xcdroast/usr/share/pixmaps/xcdroast.xpm
Теперь необходимо добавить следующие строки в dirs
для того чтобы был установлен файл .desktop:
usr/share/applications
Теперь нам потребуется текущий файл .desktop (сохраненный как debian/xcdroast.desktop). Из ubuntu.debdiff (или пакета с исходными кодами Ubuntu) мы видим то это:
[Desktop Entry] Encoding=UTF-8 Name=X-CD-Roast Comment=Create a CD Exec=xcdroast Icon=xcdroast.xpm Type=Application Categories=Application;AudioVideo;
Последняя модификация, которую необходимо сделать, - в файле changelog
. Нам необходимо не только добавить описание того, что мы только что сделали (слияние с Debian), но нам также нужно добавить записи из предыдущего Ubuntu changelog. Чтобы сделать это, запустите команду dch -i -D dapper и пропишите что-нибудь в effect of:
xcdroast (0.98+0alpha15-3ubuntu1) dapper; urgency=low
* Resynchronise with Debian.
Не забудьте изменить номер версии на правильную Ubuntu версию. Также добавьте
xcdroast (0.98+0alpha15-1.1ubuntu1) breezy; urgency=low * Fix and install existing .desktop file. (Closes Malone #2698) -- Captain Packager <packager@coolness.com> Sat, 1 Oct 2005 19:39:04 -0400
между записями лога 0.98+0alpha15-1.1 и 0.98+0alpha15-2
Теперь вы можете откомпилировать и протестировать новый пакет исходных кодов. Есть разные способы сделать это. Один из примеров:
cd .. debuild -S cd .. sudo pbuilder build xcdroast_0.98+0alpha15-3ubuntu1.dsc
Данные команды вновь создадут пакет исходных кодов, подпишите его с помощью вашего основного ключа GPG, и постройте пакет в окружении pbuilder, чтобы удостовериться, что сборка проходит успешно. Всегда проверяйте ваши пакеты перед отправкой исправлений. Последний шаг - создание debdiff, который может быть присоединен к существующему отчету об ошибке или передан MOTU-вцам на IRC-канале #ubuntu-motu. Чтобы сделать это, мы получаеи разницу между пакетом исходных кодов из нестабильной версии Debian и новой версией для Ubuntu:
debdiff xcdroast_0.98+0alpha15-3.dsc xcdroast_0.98+0alpha15-3ubuntu1.dsc > \ xcdroast_0.98+0alpha15-3ubuntu1.debdiff