Как собрать LibreOffice в Linux из исходного кода: Приёмы и Хитрости

From The Document Foundation Wiki
Jump to: navigation, search


Мы стараемся как можно быстрее перевести эту страницу!
Но, возможно, нам не хватает вашей помощи. ЧаВо по использованию wiki

Эта статья о сборки в Linux. Для других платформ смотри Как собрать LibreOffice в Mac OS X из исходного кода или Как собрать LibreOffice в Windows из исходного кода

Сборка LibreOffice в Linux из исходного кода

Зависимости для сборки

В общем, это самый простой способ, чтобы собрать LibreOffice в Linux.

Прежде всего, необходимо установить зависимости для сборки:

В Debian/Ubuntu:

sudo apt-get build-dep libreoffice

В современных версиях используйте autogen.sh для выбора новой версии gstreamer, или установите старый пакет:

sudo apt-get install libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev

В OpenSUSE 11.4+:

sudo zypper si -d libreoffice

В Fedora 15+ & derivatives:

sudo yum-builddep libreoffice

Обратите внимание, что эти команды не могут установить все что нужно, потому что они используют пакет дистрибутива операционной системы в качестве источника зависимостей. Это означает, что они отражают официальную версию и настройки LibreOffice находящуюся в репозиториях дистрибутива, которые используются для его сборки.

Для получения дополнительной информации по другим дистрибутивам таких как Arch, смотри страницу Построение зависимостей на Linux.

Клонирование репозитория и сборка

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

$ git clone git://anongit.freedesktop.org/libreoffice/core libreoffice
$ cd libreoffice
$ ./autogen.sh
$ make

Это создаст нам локальную инсталляцию программы.

Для дополнительных настроек autogen (например, дополнительной поддержки отладки) смотри написанное ниже .

Запуск собранной программы

Вы можете запускать программы следующим способом (например, Writer):

$ instdir/program/soffice --writer

Непосредственно под отладчиком вы можете запустить Writer командой:

(gdb) run -writer

Обратите внимание, что в первый раз soffice.bin завершит свою работу если он запускается непосредственно (или через создание debugrun) - это нормально. Что бы использовать его, вам нужно запустить его снова.

Если вы будете пересобирать пакет всегда прост перезапускайте программу из instdir/program.

Видео уроки

Видео урок Первой Сборки

Хотя эта сборка проводилась на операционной системе Ubuntu, с маленькими модификациями, это должно работать на любой Linux системе (если необходимо, смотри детали ниже). Мы рекомендуем смотреть это видео в месте с выполнением шагов -- оно не только проведёт вас через сборку, но так же имеет отличный саундтрек! ;)

Работа с LibreOffice из IDE

Следующее видио показывает, как вы можете работать с LibreOffice из IDE когда вы делаете make kdevelop-ide-integration:

Так же доступна Более короткая версия этого ролика (для того, чтобы можно было, например, поделиться в соцсетях).

Детали, советы, хитрости и подсказки

Читать до упора, если вы ищите способы оптимизации или устранения неполадок вашей сборки.
Примите к сведению, советы ниже являются "дикой" коллекцией наблюдений, которые могут или не могут применяться для вашего случая.

Подготовка

Зависимости

Существует shell-скрипт с именем pre-install.sh который скачивает все зависимости и исходный код в некоторых Linux дистрибутивах. Его можно найти на github:
https://github.com/marcosps/lo_useful.git

Эта страница описывает как построить текущую экспериментальную версию LibreOffice, основанную на git хранилище называемом 'core'.

Смотри так же: Development/Linux Build Dependencies

Дисковое пространство

Вам понадобиться как минимум 26 гигабайт свободного дискового пространства для git хранилища и собранных и упакованных пакетов. Это также зависит от операционной системы, варианта сборки и используемых специфических настроек autogen, и ещё несколько гигабайт, если вы делаете сборку для отладки.

Если вы работаете над разными компонентами сразу, вы можете использовать прятанье (команду git stash) или установить более одного рабочего каталога (о том как настроить их рассказывается позже). Несколько рабочих каталогов позволяют иметь отдельный среды сборки без необходимости дублировать историю git, но это всё равно будет занимать от 6 до 9 гигабайт за директорию.

Получение исходного кода

В остальной части этого руководства мы будем работать в директории ~/git. Но, конечно, вы можете выбрать любой каталог для отправной точки. Теперь давайте скачаем 'core' с git хранилища:

$ git clone git://anongit.freedesktop.org/libreoffice/core libreoffice
Cloning into libreoffice...
Remote: Counting objects: 76845, done.
remote: Compressing objects: 100% (17328/17328), done.
remote: Total 76845 (delta 60786), reused 74045 (delta 58579)
Receiving objects: 100% (76845/76845), 15.82 MiB | 1.17 MiB/s, done.
Resolving deltas: 100% (60786/60786), done.
$ cd libreoffice

Autogen

Теперь необходимо настроить сборку. Это выполняется запуском скрипта autogen.sh. Есть много параметров, которые могут быть заданы этому скрипту, пожалуйста, обратитесь к странице описывающей параметры для информации.

После того как вы запустите autogen.sh в первый раз, можно также получить список настроек:

$ ./autogen.sh
[очень длинный вывод]
$ ./autogen.sh --help
'configure' configures LibreOffice 4.0 to adapt to many kinds of systems.

Usage: ./configure [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.

Configuration:
  -h, --help              display this help and exit
      --help=short        display options specific to this package
      --help=recursive    display the short help of all the included packages
[....]

Ваш выбор может варьироваться, в зависимости от платформы и дистрибутива. Несколько примеров:

$ ./autogen.sh --enable-dbgutil --without-java --without-help --without-myspell-dicts # используется на linux
$ ./autogen.sh --enable-dbgutil # используется на MacOS
$ ./autogen.sh --enable-dbgutil --without-help --without-myspell-dicts # без сборки пакетов help и словарей (только ядро)

Ключ --enable-dbgutil используется для сборок разработчика с отключённой оптимизацией и включённой поддержкой отладочных заголовков и дополнительных проверок.

Советы по сборке из исходного кода на Linux

Смотри платформно-независимые подсказки на странице Development/GenericBuildingHints

Скорость выполнения сборки

Сборка LibreOffice забирает время, много времени. Сколько именно, зависит от того, на сколько мощная у вас машина. Однако, есть инструменты, которые можно использовать для ускорения.

ccache

ccache - это инструмент, кэширующий результаты компиляции кода c/c++, чтобы по возможности повторно использовать их в последующем. Он не ускорит вашу первоначальную сборку (наоборот, он несколько её замедлит), но может значительно ускорить последующие ребилды. Если вы намерены массово вносить изменения в заголовочные файлы LibreOffice, этот инструмент принесёт пользу.

По умолчанию, ccache задействуется автоматически, если он найден в вашей системе. Для наилучших результатов стоит попробовать увеличить размер кэша или включить его сжатие; `man ccache` вам в помощь.

Следует отметить, что размер кэша по умолчанию - всего 1 ГБ, что слишком мало при сборке LibreOffice; для сборки без отладочных символов следует иметь по крайней мере 8 ГБ кэша, а для сборки с отладочными символами для всего, вероятно, следует начать с 32 ГБ. Команда для установки размера кэша (обратите внимание, что эта настройка сохраняется в директории кэша, и если вы измените его местоположение установкой переменной окружения $CCACHE_DIR, потребуется выполнить команду заново):

ccache --max-size 32G

Кроме того, ccache поддерживает сжатие, которое обычно весьма жедательно задействовать (есть ли у кого-нибудь конкретные сравнительные данные?), особенно если используется маленькое или медленное хранилище, например, SSD или HDD ноутбука. Включается сжатие добавлением в .bashrc или аналогичный файл:

export CCACHE_COMPRESS=1

distcc / Icecream

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

Поддержка Icecream встроена в LibreOffice: достаточно добавить --enable-icecream в ./autogen.sh, и процесс конфигурации предустановит число используемых задач и попытается найти обёртку icecream для gcc в /opt/icecream/bin. Если она в другом месте, используйте параметр --with-gcc-home=/path/to/your/icecream/bin для переопределения.

--with-parallelism

В процессе сборки можно запускать несколько задач параллельно. При достаточном количестве памяти, параллельное выполнение задач способно ускорить сборку. Оно контролируется параметром конфигуратора --with-parallelism=n, где n - это количество ядер процессора, которое вы хотите отдать под сборку, или 2, если вы имеете только одно ядро.

--with-parallelism - принимает значение по умолчанию равное числу ядер/процессоров в вашей системе. Однако, если использовать параметр --enable-icecream, то он будет равен 10.

--with-system-libs

Сборка с существующими библиотеками может оказаться быстрее, но придётся поэкспериментировать с зависимостями.

Примерное затрачиваемое время

Athlon 435 X3 с ccache без java без epm производит начальную сборку за 1,5 часа под управлением gentoo.

Первоначальная сборка на Intel 2630QM с ccache без java и epm с --with-parallelism, равным 8, и диском, отформатированным под ext4, занимает тоже около 1,5 часов под Kubuntu. Длительность последующих ежедневных сборок колеблется между 2 и 10 минутами (в зависимости от количества изменённых или добавленных файлов и их сложности).

make с детальным выводом

Make скрывает конкретные вызовы команд, если ./configure или ./autogen.sh были вызваны без --enable-verbose. Для того, чтобы увидеть, что именно делает make в одиночнои сборке, его следует вызвать как

$ make GMAKE_OPTIONS='VERBOSE=1'

Несколько рабочих директорий

Если требуется работать одновременно и в ветке master, и в ветках текущих релизов, можно совместно использовать репозитории git и тарболы внешних исходников (экономия может оказаться значительной, особенно если при этом используется огромный репозиторий l10n). Следует заметить, что переключение между разными ветками релизов в одной рабочей директории нежелательно: даже если не возникнет проблем с зависимостями, объём пересобираемого кода практически эквивалентен полной пересборке. Если дисковое пространство позволяет, рекомендуется иметь раздельные деревья.

Есть два метода совместного использования репозиториев git несколькими рабочими директориями: git clone --reference и git-new-workdir. Ссылочное клонирование поможет избежать повторной загрузки репозитория, но новая рабочая директория всё равно будет содержать собственные .git/config и т.д. Этот метод поддерживается разработчиками git. С другой стороны, git-new-workdir не поддерживается и может создать проблемы, например, при попытке перехода в одну и ту же ветку в двух рабочих директориях.

Настройка

Подготовьте первую сборку на вашем диске согласно инструкциям выше. Для второй и последующих сборок склонируйте первоначальный репозиторий core следующим образом:

$ git clone --reference /path/to/master --branch name-of-release-branch ssh://logerrit/core /dir/to/be/created

Операция клонирования будет выполнена гораздо быстрее. После этого настройте новую рабочую директорию двумя следующими дополнительными опциями configure (или autogen.sh):

$ ./autogen.sh ... --with-referenced-git=/path/to/master --with-external-tar=/path/to/master/external/tarballs

И опять клонирование произойдёт значительно быстрее. Необходимо использовать абсолютный путь в опции --with-external-tar. После этого продолжайте сборку так же, как и в случае единственной рабочей директории.

Опция --with-referenced-git требуется только в случае, если используются какие-либо субмодули (локализации, словари или справка) или собирается ветка libreoffice-4-0 (или ещё более старая). В новых ветках субмодули по умолчанию отключены.

Переход в ветку релиза

Выполните autogen.sh для мастера, указав нужные вам параметры, затем выполните

make fetch

чтобы загрузить субмодули, которые могут потребоваться в зависимости от параметров, переданных в autogen.sh.

Затем переключите ветку, используя

$ ./g checkout -b libreoffice-4-0 origin/libreoffice-4-0

rpm not found/ant not found/no package gnome-vfs-2.0

--disable-epm Это решит проблему с "rpm not found", так как autogen ожидает найти либо dpkg, либо rpm в систему.

--without-java Это решит проблему с "ant not found"

Начиная с версий мастера после ответвления LibreOffice 3.5, сборка UNO SDK требует наличия Doxygen для генерации HTML-документации интерфейса C++ для UNO. Можно установить Doxygen с его вебсайта и обеспечить доступность исполняемого файла doxygen через PATH, или указать его точное расположение ключом конфигурации --with-doxygen=pathname. Также можно произвести конфигурацию --without-doxygen, в этом случае собираемый UNO SDK не будет содержать HTML-документацию интерфейса C++ для UNO. Кроме того, можно произвести конфигурацию с использованием --disable-odk, тогда UNO SDK вообще не будет собираться.

Примечание: Установите пакет libgnomevfs2-dev на Ubuntu вручную для устранения ошибки "No package 'gnome-vfs-2.0' found" на старых ветках. Используйте Synaptic или команду для терминала:

$ sudo apt-get install libgnomevfs2-dev

К настоящему моменту, в этом больше нет необходимости для ветки master.

Сборка DEB и/или RPM пакетов

Если вы хотите собрать DEB и/или RPM пакеты, в этом должны помочь следующие хитрости...
RPM и DEB:

$ ./autogen.sh --with-distro=LibreOfficeLinux --with-package-format="deb rpm" --enable-epm
$ make

RPM:

$ ./autogen.sh --with-distro=LibreOfficeLinux --with-package-format=rpm --enable-epm
$ make

DEB:

$ ./autogen.sh --with-distro=LibreOfficeLinux --with-package-format=deb --enable-epm
$ make

Где пакеты?

Смотрите файлы в директории ./workdir/installation/. Существует папка для каждого из различных наборов пакетов, которые включают в себя папку или папки для различных видов пакетов, либо DEB, RPM, или оба сразу. Внутри подпапки есть другая папка, которая имеет название install и включает две подпапки. Одна подпапка содержит архив всех пакетов, сжатых вместе (папка ..._download), и другая содержит DEB/RPM папку с другими индивидуальными пакетами. Остальное должно быть очевидно!

Работа с окончаниями строк и autocrlf Git

Если autogen.sh создаёт вывод вроде следующего:

./autogen.sh: line 1: $':\r': command not found
' '--srcdir=/home/user/libreoffice' '--enable-option-checking=fatal'
configure: WARNING: you should use --build, --host, --target
configure: WARNING: invalid host type: 
********************************************************************
*
*   Running LibreOffice build configuration.
*
********************************************************************

' not recognizedystem type... Invalid configuration `
 failedre: error: /bin/bash ./config.sub 
Error running configure at ./autogen.sh line 241.

... Вероятно проблема в определение конца строки. Это может случиться если вы ошибочно установили core.autocrlf=true Git.

Чтобы решить проблему, выполните следующие команды (Внимание! Неподтвержденные изменения будут потеряны):

git config --unset core.autocrlf
git rm --cached -r .
git reset --hard
git clean -x -f
./autogen.sh