?

Log in

No account? Create an account

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

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

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