Андрей Черепанов

локализация, свободное учётное ПО

Previous Entry Share Next Entry
Сборка новой версии Chromium 35.0.1916.116 (часть 1)
altlinux
sibskull
Так уж сложилось, что я сопровождаю пакет chromium в ALT Linux. Итак, сегодня утром приходит письмо из рассылки Chrome Releases с информацией о выпуске версии 35.0.1916.114.
Изначально держал его в Git, но частая смена версий привела к тому, что репозиторий распух до неприличных 6 ГБ. Поэтому сейчас его собираю через src.rpm. Для сборки потребуется отдельное дерево исходного кода Chromium, обновляемое через gclient (несколько устаревшие подробности на http://www.altlinux.org/Chromium). Оно, правда, распухло уже до почти 7 ГБ, но исходный код без всяких тестов ужимается до 470 МБ tar.gz.

1. Переходим в репозиторий и обновляем версию:

$ cd ~/git/SVN/chromium/
$ l
34.0.1847.137  build  chrome-update  commit-queue  depot_tools  src
$ subst 's/34.0.1847.137/35.0.1916.114/g' .gclient
$ gclient sync


Ждём довольно долго, пока gclient обновит кучу (110 штук) вложенных репозиториев и запускаем gclient sync ещё раз (потому что при первой синхронизации вылезает строка «OSError: [Errno 2] Нет такого файла или каталога»). Получаем информацию об успешном окончании перехода на новую версию:

WARNING: '34.0.1847.137' is no longer part of this client.  It is recommended that you manually remove it.


Удаляем ставший уже ненужным каталог с правилами сборки старой версии и собираем архив с исходным кодом для сборки:

$ rm -rf  34.0.1847.137
$ cd ..
$ ./chromium-pack &


Скрипт chromium-pack имеет следующее содержимое:
#!/bin/sh
tar cfz \
  ~/git/RPM/SOURCES/chromium-$(grep '"name"' chromium/.gclient|cut -d\" -f4).tar.gz \
  --exclude \*/.svn \
  --exclude \*/.git\* \
  --exclude LayoutTests \
  --exclude ManualTests \
  --exclude PerformanceTests \
  --exclude toolchain \
  chromium/src


2. Обновляем v8. У альтового Chromium есть ещё одна особенность: библиотека v8 для него собирается отдельным пакетом. Так уж исторически сложилось. Сборка осуществляется через git из репозитория git+svn.

Смотрим, какая версия и какая ревизия используется для этой версии chromium:
$ grep v8.*branches 35.0.1916.114/DEPS
      Var("v8") + '/branches/3.25@21123',


Так, версия 3.25 и ревизия 21123. Предыдущая версия требовала v8-3.24. Так как пакеты с v8 идёт с мажорной и минорной версией, нам надо собрать совершенно новый пакет, а v8-3.24 удалить.

Переходим в репозиторий v8 (это я делаю уже не на локальной машине, а на нашем сервере рабочей группы :) под названием altair  и скачиваем изменения в репозитории svn:

$ cd ~/git/v8
$ git svn fetch


Дальше определяем коммит, с которого нужно начать бранч, делаем на его основе бранч, переключаемся на него и переносим туда правила Gear и спек. А также смотрим точную версию:
$ git log 3.25 | egrep '^commit|git-svn-id' | grep -B1 @21123 | head -n1 | cut -f2 -d ' '
16a5046ab9aba028a432555ac7dc28cb08d10af6
$ git branch v8-3.25 16a5046ab9aba028a432555ac7dc28cb08d10af6
$ git checkout v8-3.25
$ git checkout v8-3.24 -- .gear/
$ grep '#define' src/version.cc | head -n4
#define MAJOR_VERSION     3
#define MINOR_VERSION     25
#define BUILD_NUMBER      28
#define PATCH_LEVEL       16


Затем смотрим точную версию и заполняем спек в любимом текстовом редакторе. Я делаю это в vim .gear/v8.spec. Правим версии, добавляем запись в %changelog. Затем коммитим, пушим и создаём задание на git.alt (используются мои скрипты и я пока их содержимое не привожу, оставив на будущие записи в ЖЖ):
$ gear-commit -a
$ gtp
$ gt new
$ gt add repo `cdir` `ctag`


gt — алиас на 'ssh -n git.alt task'

3. Возвращаемся к chromium. Меняем требуемую версию v8, версию пакета, добавляем запись в %changelog, не забыв про закрытые CVE.
Кстати, я их копирую из блога релиза и обрабатываю скриптом для вставки в changelog:
egrep -v '(Windows|Mac only)' | sed -e 's/^.*] \(.*\) Credit.*$/  - \1/' | grep -vw 'v8' | grep -v '^$' | sed "s/’/'/g"


Создаём src.rpm (без зависимостей):
$ rpm -bs --nodeps chromium.spec
Записан: /home/cas/git/RPM/SRPMS/chromium-35.0.1916.114-alt1.src.rpm


Подписываем:
$ rpmsign --resign /home/cas/git/RPM/SRPMS/chromium-35.0.1916.114-alt1.src.rpm


Отправляем на git.alt:
$ rsync -vaP /home/cas/git/RPM/SRPMS/chromium-35.0.1916.114-alt1.src.rpm git.alt:


(кстати, недавно я для себя открыл комбинацию Esc+., повторяющую последний аргумент предыдущей команды в bash). Вот в этой команде полученный файл был именно так вставлен.

Добавляем в задание:
$ ssh git.alt task add srpm chromium-35.0.1916.114-alt1.src.rpm


Не забываем, что там надо удалить старый v8-3.24
$ ssh git.alt task add del v8-3.24


4. Запускаем задание:
$ ssh git.alt task run --test-only


На момент написания это было задние http://git.altlinux.org/tasks/120100/
Потом оно уедет в архив и ссылка будет другая.

Скорее всего, не приложатся патчи. Но это уже другая история...

P.S. Я пробую показать чем занимаемся на работе, какие тонкости и секреты в работе с Linux и над Linux есть. Может быть, получилось сумбурно, но советы и пожелания приветствуются. Постараюсь выкладывать подобные записи регулярно.


Вторая часть: Сборка новой версии Chromium 35.0.1916.116 (часть 2): обновляем патчи

  • 1
Мне понравилось. Даже искал поначалу для cut -d\" закрывающую кавычку:)

  • 1
?

Log in

No account? Create an account