Chromium

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

Статус

Собираются версии из транка SVN (Dev channel, Continuous build), майнтейнер старается вычитывать лог коммитов и при заметных улучшениях делать новую сборку. Спек написан на основе спека для Fedora, некоторые идеи взяты из пакета для Ubuntu.

Специфичные изменения

Патчи

  • chromium-20090929-no-sqlite-debug.patch: взят из Fedora, согласно комментарию в спеке исправляет некое падение.
  • chromium-20091111-alt-kde4-path.patch: совместимость с ALT-сборкой KDE4, использующей ~/.kde4 вместо ~/.kde.
  • chromium-20100122-ubuntu-html5-video-mimetypes.patch: взят из Ubuntu, обходит проблему с проигрыванием HTML5 видео.
  • chromium-20100128-alt-fedora-gyp-system-libevent.patch: взят из Fedora, сборка с системным libevent.

Библиотеки

Дерево исходников содержит (в основном в каталоге third_party) копии многих внешних проектов, в большинстве случаев изменённые локально. У нас chromium собирается со всеми системными библиотеками, которые поддерживаются апстримом (через параметры use_system_*), кроме libxml2/libxslt. Библиотеки ffmpeg заменены символическими ссылками на системные версии, упакованными в отдельный пакет.

Облегчение дерева исходников

Поскольку дерево содержит сотни мегабайт данных, не требующихся для сборки (либо вообще, либо для Linux/для ALT), их желательно удалять для уменьшения размера репозитория и использования ресурсов сборочной системы. В случае дополнительных репозиториев их можно отключать целиком через файл .gclient, в случае отдельных каталогов можно запрещать их экспорт правкой скрипта export_tarball.py.

Sandbox

Используется SUID helper /usr/lib/chromium-browser/chromium-browser-sandbox, требуется поддержка PID Namespaces в ядре (CONFIG_PID_NS) и (в случае контейнеров) наличие CAP_SYS_ADMIN. Не исключено, что SUID-бит можно заменить выдачей CAP_SYS_ADMIN через setcap(8).

Инструкции по самостоятельной сборке

Получение оригинального дерева

  • Из репозитория depot_tools возьмите файлы gclient*.py и положите их в $PATH, создав ссылку gclient -> gclient.py (возможно, сойдёт и переименование).
  • Создайте каталог, где будет лежать рабочая копия SVN, и положите туда файл .gclient примерно следующего содержания:
solutions = [
  { "name"        : "src",
    "url"         : "http://src.chromium.org/svn/trunk/src",
    "custom_deps" : {
      "src/third_party/WebKit/LayoutTests": None,
      "src/chrome/test/data/layout_tests/LayoutTests/fast/events": None,
      "src/chrome/test/data/layout_tests/LayoutTests/fast/workers": None,
      "src/chrome/test/data/layout_tests/LayoutTests/http/tests/xmlhttprequest": None,
      "src/chrome/test/data/layout_tests/LayoutTests/http/tests/workers": None,
      "src/chrome/test/data/layout_tests/LayoutTests/fast/js/resources": None,
      "src/chrome/test/data/layout_tests/LayoutTests/http/tests/resources": None,
      "src/chrome/test/data/layout_tests/LayoutTests/storage/domstorage": None,
      "src/chrome/tools/test/reference_build": None,
      "src/third_party/ffmpeg/binaries/chromium/linux/ia32": None,
      "src/third_party/ffmpeg/binaries/chromium/linux/x64": None,
      "src/third_party/ffmpeg/binaries/chromium/linux/ia32_dbg": None,
      "src/third_party/ffmpeg/binaries/chromium/linux/x64_dbg": None,
    },
    "safesync_url": "http://build.chromium.org/buildbot/continuous/LATEST/REVISION"
  }
]

Этот файл был создан согласно инструкции Get the Code командой gclient config http://src.chromium.org/svn/trunk/src и затем отредактирован.

  • Выполните команду gclient sync --nohooks и дождитесь окончания скачивания всех репозиториев. После этого в каталоге src/ будет лежать дерево исходников. В дальнейшем эта же команда будет обновлять это дерево.

Обновление репозитория gear

git rm -r chromium-browser
rm -rf chromium-browser
  • Экспортируйте новое дерево (из каталога с .gclient):
/path/to/chromium-browser.git/export_tarball.py --remove-nonessential-files /path/to/chromium-browser
mv /path/to/chromium-browser.git/{src,chromium-browser}
  • Закоммитьте новую версию дерева:
git add -f chromium-browser
git commit -s chromium-browser -m "r77777"

Используйте ревизию из svn info src (у различных дополнительных репозиториев будут другие номера ревизий).

  • Обновите в спек-файле номер ревизии (см.выше) и версии (из chromium-browser/chrome/VERSION).