MozillaBuild

Материал из ALT Linux Wiki


Сборка Mozilla-пакетов

В данном документе будет описываться как собираются пакеты от Mozilla (Firefox, Thunderbird) в ALT Linux. Описание будет идти со слов Legion@, поэтому могут быть выражены не совсем точно.

Философия

Репозиторий mozilla.org.git устроен очень просто. В нём есть два вида бранчей: апстримные и пакетные (бранчи из которых собираются пакеты).

Апстримные бранчи получены путём конвертации апстримных репозиориев (в апстриме не используются бранчи) из mercurial в git. Эти бранчи именуются также как называются репозитории на hg.mozilla.org.

Бранчи для опакечивания строятся на одном или более апстримных бранчах. Например rpms/thunderbird-3.1.x создан из releases/comm-1.9.2 и в него мерджится releases/mozilla-1.9.2 в каталог mozilla/. Эта же последовательность сборки описана в https://developer.mozilla.org/en/Commcentral_source_code_%28Mercurial%29

Остальные пакеты устроены проще т.к. основываются на одном апстримном репозитории.

Информация по бранчам

master - Это информационный бран. Смотрите ниже.<br\>

Upstream-бранчи:<br\>

comm-central - Branch для Thunderbird, Sunbird и Seamonkey [1].<br\> mozilla-central - Branch для Xulrunner и Firefox [2].<br\> releases/comm-1.9.1 - Branch разработки для Thunderbird 3, SeaMonkey 2 и Sunbird 1 with Gecko 1.9.1 [3].<br\> releases/mozilla-1.9.1 - Branch for Gecko-1.9.1 based products [4].<br\> releases/mozilla-1.9.2 - Branch for Gecko-1.9.2 based products [5].<br\>

Бранчи для сборки пакетов:<br\>

rpms/firefox-2.x - firefox-2*-alt* packages. (Не поддерживается)<br\> rpms/firefox-3.0.x - firefox-3.0*-alt* packages. (Не поддерживается)<br\> rpms/firefox-3.1.x - firefox-3.1*-alt* packages. (Поддерживается)<br\> Depends: releases/mozilla-1.9.1<br\> rpms/firefox-3.6.x - firefox-3.6*-alt* packages. (Поддерживается)<br\> Depends: releases/mozilla-1.9.2<br\> rpms/sunbird-0.9 - sunbird-0.9*-alt* packages. (Устарел)<br\> rpms/thunderbird-2.x - thunderbird-2*-alt* packages. (Не поддерживается)<br\> rpms/thunderbird-3.0.x - thunderbird-3.0*-alt* packages. (Поддерживается)<br\> Depends: releases/comm-1.9.1<br\> Depends: releases/mozilla-1.9.1<br\> rpms/xulrunner-1.9.0 - xulrunner-1.9.0*-alt* packages. (Не поддерживается)<br\> rpms/xulrunner-1.9.1 - xulrunner-1.9.1*-alt* packages. (Поддерживается)<br\> Depends: releases/mozilla-1.9.1<br\>

Информация для сборки:<br\>

Чтобы собрать текущую версию проекта используйте утилиту mozilla-build. Эта утилита склонирует локально необходимые репозитории пакетов и собирёт их в нужном порядке.<br\>

Используйте: mozilla-build <firefox|thunderbird|xulrunner|all>

Секреты spec-файла

В спеке есть такой параметр:

 %set_tbird_ciddir noarch B274D460-4DF9-454c-AC69-CA71398D7498

Алексей сказал так:

 Алексей Гладков: это id расширения. оно берётся из install.rdf
 Алексей Гладков: в install.rdf оно только одно
 Алексей Гладков: при установке расширения создаётся каталог с тем же именем
 Алексей Гладков: иногда там uuid, иногда что-то осмысленное

Для того, чтобы правильно определить id можно воспользоваться утилитой installrdf.sh, которая входит в пакет rpm-build-mozilla.org:

 $ installrdf.sh /usr/lib/thunderbird/extensions/\{e2fda1a4-762b-4020-b5ad-a41df1933103\}/install.rdf -i
 id	{e2fda1a4-762b-4020-b5ad-a41df1933103}
 name	Lightning
 version	1.0b3pre
 description	An integrated calendar for Thunderbird
 developer	Build ID: 20110124070537
 creator	Mozilla Calendar Project
 homepageURL	http://www.mozilla.org/projects/calendar/releases/lightning1.0b3pre.html
 $ installrdf.sh /usr/lib/thunderbird/extensions/\{e2fda1a4-762b-4020-b5ad-a41df1933103\}/install.rdf -t thunderbird
 thunderbird >= 3.1
 thunderbird < 3.2

Собираем Thunderbird

 git checkout rpms/thunderbird-3.1.x;
 git merge releases/comm-1.9.2
 [возможно сделать некоторые действия для subtree]
 git merge -s subtree releases/mozilla-1.9.2

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

gear-hsh -v --commit --target=хххх

Собираем Thunderbird-ru

Основной репозиторий находится тут. Свежую русификацию лучше брать на mozilla-russia.org. Ну а дальше все обычно. Обновляем, правим спек и собираем пакет.

Собираем Seamonkey

Клонируем репозиторий comm-release:

hg clone -r SEAMONKEY_2_2_RELEASE http://hg.mozilla.org/releases/comm-release/

Клонируем репозиторий mozilla-release:

hg clone -r SEAMONKEY_2_2_RELEASE http://hg.mozilla.org/releases/mozilla-release/

Клонируем репозиторий ldap-sdks:

hg clone -r SEAMONKEY_2_2_RELEASE http://hg.mozilla.org/projects/ldap-sdks/

Клонируем репозиторий chatzilla:

hg clone -r SEAMONKEY_2_2_RELEASE http://hg.mozilla.org/chatzilla/

Клонируем репозиторий dom-inspector:

hg clone -r SEAMONKEY_2_2_RELEASE http://hg.mozilla.org/dom-inspector/

Клонируем репозиторий venkman:

hg clone -r SEAMONKEY_2_2_RELEASE http://hg.mozilla.org/venkman/

Рядом создаём mozilla-release.git, comm-release.git, ldap-sdks.git, chatzilla.git, dom-inspector.git, venkman.git.

$ cd  mozilla-release.git
$git init

Когда сделаете 'git init' делаете

hg-fast-export -M master -f -r "../mozilla-release"

И долго ждём :) То же самое с comm-release.git, ldap-sdks.git, chatzilla.git, dom-inspector.git, venkman.git Теперь создаем каталог для сборки seamonkey.

$ mkdir seamonkey2
$ cd seamonkey2
$ git init seamonkey2
$ git fetch ../comm-release.git master:releases/comm-release
$ git fetch ../mozilla-release.git master:releases/mozilla-release
$ git checkout releases/comm-release
$ git checkout -b rpms/seamonkey-2.x
$ git merge -s ours --no-commit releases/mozilla-release
$ git read-tree --prefix=mozilla/ -u releases/mozilla-release
$ git commit -m "Merge 'releases/mozilla-release' branch as our subdirectory"

И далее:

$ git fetch ../ldap-sdks.git master:projects/ldap-sdks
$ git merge -s ours --no-commit projects/ldap-sdks
$ git read-tree --prefix=ldap/sdks -u projects/ldap-sdks
$ git commit -m "Merge 'projects/ldap-sdks' branch as our subdirectory"

И далее:

$ git fetch ../chatzilla.git master:projects/chatzilla
$ git merge -s ours --no-commit projects/chatzilla
$ git read-tree --prefix=mozilla/extensions/irc/ -u projects/chatzilla
$ git commit -m "Merge 'projects/chatzilla branch as our subdirectory"

И далее:

$ git fetch ../dom-inspector.git master:projects/dom-inspector
$ git merge -s ours --no-commit projects/dom-inspector
$ git read-tree --prefix=mozilla/extensions/inspector -u projects/dom-inspector
$ git commit -m "Merge 'projects/dom-inspector branch as our subdirectory"

И далее:

$ git fetch ../venkman.git master:projects/venkman
$ git merge -s ours --no-commit projects/venkman
$ git read-tree --prefix=mozilla/extensions/venkman -u projects/venkman
$ git commit -m "Merge 'projects/venkman branch as our subdirectory"

В последствии после обновления бранча releases/mozilla-release из соответствующего ему репо просто делаем:

git pull -s subtree releases/mozilla-release

и аналогично для других репозиториев.