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

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

Исправления бага в Ubuntu

Введение

Если вы следовали инструкциям из второй части нашей статьи, то у вас уже всё готово для исправления.

Как вы можете видеть в изображении выше, никаких сюрпризов в процессе исправления бага в Ubuntu нет: вы находите проблему, вы скачиваете код, работаете над исправлением, отправляете ваши изменения на Launchpad и просите проверить и подтвердить их. В это руководстве мы будем делать всё шаг за шагом.

Нахождение проблемы

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

Harvest — место, где мы храним различные TODO-списки для разработки Ubuntu. Там перечисленны баги, уже исправленные в или Debian, перечислены небольшие баги (мы называем их ‘bitesize’) и так далее. Посетите его и найдите первый баг, над которым будете работать.

Находим что исправлять

Если вы не знаете пакет, содержащий код с проблемой, но вы знаете путь к проблемной программе, вы можете найти этот пакет, над которым вам нужно будет поработать.

Представим, что вы нашли баг в Tomboy, приложении для заметок. Приложение Tomboy может быть запущено через командую строку: выполните /usr/bin/tomboy. Чтобы найти бинарный пакет, содержащий это приложение, используйте эту команду:

$ apt-file find /usr/bin/tomboy

Выйдет что-то такое:

tomboy: /usr/bin/tomboy

Запомните, что часть перед двоеточием — имя бинарного пакета. Часто получается так, что пакет с исходниками и бинарный пакет имеют разные названия. Часто это бывает, когда одиночный исходный пакет используется для сборки различных бинарных пакетов. Чтобы найти исходный пакет для определённого бинарного пакета, наберите:

$ apt-cache showsrc tomboy | grep ^Package:

Package: tomboy

$ apt-cache showsrc python-vigra | grep ^Package:

Package: libvigraimpex

Скачиваем код

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

После того, как у вас появился локальный бренч исходного пакета, вы можете изучить баг, создать решение и загрузить предлагаемое исправление на Launchpad, в виде Bazaar-бренча. Когда ваш фикс будет полностью готов, вы можете отправить предложение по слиянию, в котором вы попросите других разработчиков Ubuntu просмотреть и подтвердить ваше изменение. Если они согласны с вашими изменения, имеющий право разработчик загрузит новую версию пакета в Ubuntu, так что каждый останется в плюсе от вашего отличного исправления. Теперь вы на вашем пути становления как разработчика Ubuntu!

Мы опишем как скачать код, помешать ваше исправление и запросить проверку — в следующих разделах.

Работаем над исправлением

Написано множество книг о нахождении багов, их исправлений, тестировании и так далее. Если вы полный новичок в программировании, попробуйте для начала исправлять простые баги, например очевидные опечатки. Старайтесь вносить как можно меньше изменений в код и документировать ваши изменения так подробно, как это возможно.

Перед тем, как самому начать работать над исправлением, убедитесь что никто его ещё не исправил или не работает над исправлением. Хорошими местами для проверок являются:

Багтрекеры Upstream (и Debian) (открытые и закрытые баги),

История ревизий Upstream (или нового релиза) может содержать исправленную проблему

баги или загрузки пакето в Debian или других дистрибутивов.

Теперь вам следует создать патч, включающий исправление. Команда edit-patch является простым будем добавления патча в пакет. Выполните:

$ edit-patch 99-new-patch

Это скопирует упаковочные файлы во временную папку. Теперь вы может отредактировать файлы с помощью текстового редактора или принять изменения из upstream, например:

$ patch -p1 < ../bugfix.patch

После редактирования файла напечатайте exit или нажмите control-d, чтобы выйти из временной оболочки. Новый патч будет добавлен в debian/патчи.

Тестируем исправление

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

$ bzr bd — -S -us -uc

$ pbuilder-distbuild ../_.dsc

Это создаст исходный пакет из содержания бренча (-us -uc всего лишь опустит шаг подписывания пакета), и pbuilder-dist соберёт пакет из исходников или другого релиза, который вы выбрали.

После успешной сборки, установите пакет из ~/pbuilder/_result/ (используйте sudo dpkg -i_.deb). Затем тестируйте, чтобы увидеть, что баг исправлен.

Документируем изменение

Очень важно документировать изменения, для того, чтобы разработчики, просматривая ваш код в будущем, не гадали что это такое, и что вы тут сделали. Каждый исходный пакет Debian и Ubuntu включает debian/changelog, где собираются изменения каждого загруженного пакета.

Простой путь обновить это — выполните:

$ dch -i

Это добавит шаблон записи в логе изменений для вас и откроет редактор, где вы сможете заполнить пробелы. Например, это может быть так:

specialpackage (1.2-3ubuntu4) natty; urgency=low

 * debian/control: updated description to include frobnicator (LP: #123456)

— Emma Adams < Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. >;  Sat, 17 Jul 2010 02:53:39 +0200

dch должен заполнить первую и последнюю линии для вас. Линия 1 состоит из имени исходного пакета, номера версии, релиз Ubuntu, в который он загружен, срочность (которая обычно всегда на ‘low’ — низкая). Последняя линия всегда содержит имя, email-адрес и timestamp (в формате RFC 5322) of изменения.

Давайте сфокусируемся конкретно на актуальной записи в логе изменений: очень важно пояснить:

когда было сделано изменение

что изменилось

когда происходило обсуждение изменения

В нашем примере, последний пункт представлен (LP: #123456), который направляет на 123456-ой баг в Launchpad. Багрепорты и списки рассылки обычно содержат хорошую информацию, куда отправить изменение. В качестве бонуса, если вы используете нотацию LP: #<номер> для Launchpad-багов, баг автоматически закроется, когда пакет будет загружен в Ubuntu.

Коммитим исправление

Когда запись в логе изменений будет написана и сохранена, просто выполните:

bzr commit

и произойдёт коммит изменения (локально), а коммит-сообщением будет являться ваша запись в логе изменений (changelog).

Чтобы поместить его на Launchpad, как имя удалённого бренча, вам нужно следовать следующему образцу:

lp:~/ubuntu///

Например, это может быть

lp:~emmaadams/ubuntu/natty/specialpackage/fix-for-123456

Поэтому, если вы выполните:

bzr push lp:~emmaadams/ubuntu/natty/specialpackage/fix-for-123456

bzr lp-open

всё должно быть в порядке. Команда push должна быть отправить его на Launchpad, а вторая команда — открыть страницу Launchpad или удалённый бренч в вашем браузере. Там найдите ссылку «(+) Propose for merging» и нажмите на неё, чтобы дать просмотреть кому-то ваше изменение для включения в Ubuntu.

Купить прицеп лав 81013 можно на komandor-marine.ru.