Jump to content

Розробка/Будівництво на Linux

From The Document Foundation Wiki
This page is a translated version of the page Development/BuildingOnLinux and the translation is 76% complete.
Outdated translations are marked like this.

Вступне повідомлення

Оскільки це виявляється типовою проблемою для новачків, зверніть увагу: "не збирайте" від імені користувача root! Це призведе до поломки вашої збірки, і, як наслідок, вам доведеться очистити все (включно з кешем) і почати все спочатку. Кроки, які потребують підвищення прав, явно використовують команду sudo у наведених нижче поясненнях.

Також прочитайте наші загальні поради щодо побудови.

Побудувати залежності

Загалом, найпростіше зібрати LibreOffice на Linux.

Note: Підсистема Windows для Linux не підтримується!

Note:
Зазвичай гілки, які є новішими за ті, які наявні у дистрибутивах (особливо master), мають додаткові вимоги, про які вам допоможе дізнатися autogen.sh; зазвичай ці вимоги є або необов’язковими та мають відповідний аргумент --disable-foo або --without-foo, або вимога може бути задоволена опцією використання пакетної копії через аргумент --without-system-foo (який уже має бути стандартним). Якщо ні те, ні інше не так, то вам потрібно встановити якийсь пакет розробки у вашій системі: подивіться, на що конкретно скаржиться configure, і скористайтеся apt-cache search або yum search, щоб знайти відповідні пакунки, зазвичай із -dev або -devel у назві.

Debian та Ubuntu

Встановіть залежності

sudo apt-get install git build-essential zip ccache junit4 libkrb5-dev nasm graphviz python3 python3-dev python3-setuptools qtbase5-dev libkf5coreaddons-dev libkf5i18n-dev libkf5config-dev libkf5windowsystem-dev libkf5kio-dev libqt5x11extras5-dev autoconf libcups2-dev libfontconfig1-dev gperf openjdk-17-jdk doxygen libxslt1-dev xsltproc libxml2-utils libxrandr-dev libx11-dev bison flex libgtk-3-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev ant ant-optional libnss3-dev libavahi-client-dev libxt-dev meson

Note:
З 22 вересня 2023 р. gcc/g++ має бути принаймні версії 12. sudo apt install gcc-12 g++-12, а потім sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 60 --slave /usr/bin/g++ g++ /usr/bin/g++-12

Можливо, вам доведеться спочатку додати PPA (щоб отримати LO з версії 13) за допомогою sudo add-apt-repository ppa:ubuntu-toolchain-r/test

openSUSE

Залежності можна встановити у Tumbleweed за допомогою цієї команди:

sudo zypper in git autoconf automake bison make gcc gcc-c++ cups-devel fontconfig-devel gperf java-17-openjdk-devel libxslt-devel python3-devel krb5-devel libX11-devel libXext-devel libICE-devel libSM-devel libXt-devel libXrender-devel libXrandr-devel flex gtk3-devel gstreamer-devel gstreamer-plugins-base-devel ant junit nasm ccache binutils-gold mozilla-nss-devel meson

on Leap gcc12 and gcc12-c++ distro packages should be installed and the following lines should be added to autogen.input:

CC=gcc-12
CXX=g++-12

Fedora/Red Hat

sudo dnf builddep libreoffice && sudo dnf install meson

You may need to enable additional YUM/DNF repositories to successfully run the above command.

Arch Linux

Ці залежності скопійовано з офіційного PKGBUILD Arch Build System (з деякими змінами, оскільки він містить непотрібні речі).

sudo pacman -S --needed 'base-devel' 'git' 'ccache' 'ant' 'apr' 'beanshell' 'bluez-libs' 'clucene' \
                        'coin-or-mp' 'cppunit' 'curl' 'dbus-glib' \
                        'desktop-file-utils' 'doxygen' 'flex' 'gcc-libs' \
                        'gdb' 'glm' 'gobject-introspection' 'gperf' 'gpgme' \
                        'graphite' 'gst-plugins-base-libs' 'gtk3' \
                        'harfbuzz-icu' 'hicolor-icon-theme' 'hunspell' \
                        'hyphen' 'icu' 'jdk17-openjdk' 'junit' \
                        'lcms2' 'libabw' 'libatomic_ops' 'libcdr' 'libcmis' \
                        'libe-book' 'libepoxy' 'libepubgen' 'libetonyek' \
                        'libexttextcat' 'libfreehand' 'libgl' 'libjpeg' \
                        'liblangtag' 'libmspub' 'libmwaw' 'libmythes' \
                        'libnumbertext' 'libodfgen' 'liborcus' 'libpagemaker' \
                        'libqxp' 'libstaroffice' 'libtommath' 'libvisio' \
                        'libwpd' 'libwpg' 'libwps' 'libxinerama' 'libxrandr' \
                        'libxslt' 'libzmf' 'lpsolve' 'mariadb-libs' \
                        'mdds' 'nasm' 'neon' 'nspr' 'nss' 'pango' \
                        'plasma-framework5' 'poppler' 'postgresql-libs' \
                        'python' 'qt5-base' 'redland' 'sane' 'serf' 'sh' \
                        'shared-mime-info' 'ttf-liberation' 'unixodbc' \
                        'unzip' 'xmlsec' 'zip' 'gtk4' 'qt6-base' 'zxing-cpp' \
                        'abseil-cpp' 'meson'

Якщо ви не плануєте працювати на Java, ви можете вилучити зі списку ant, beanshell, java-environment та junit, оскільки LibreOffice здебільшого працює без них.

Якщо встановлено 'gcc-libs-multilib', вам доведеться видалити залежність 'gcc-libs'.

Slackware

./autogen.sh --without-java --disable-postgresql-sdbc --disable-gstreamer-1-0

BSDs

  • DragonFlyBSD cd /usr/dports/editors/libreoffice && make patch
  • FreeBSD cd /usr/ports/editors/libreoffice && make patch
  • NetBSD cd /usr/pkgsrc/misc/libreoffice && make depends

Клонування та збирання

Далі ми clone репозиторій. Зауважте, що створення наразі не працює належним чином у шляхах, які містять символи Unicode, і що git clone може зайняти деякий час залежно від швидкості вашого з’єднання та трафіку сервера:

$ git clone https://gerrit.libreoffice.org/core libreoffice
$ cd libreoffice


На цьому етапі ви можете відобразити можливі варіанти переходу до autogen:

$ ./autogen.sh --help

Наприклад, можна додати параметр налагодження. Зміна деяких із цих параметрів вимагатиме виконання повної перебудови: наприклад, додавання --enable-dbgutil. Оскільки наступна команда make займає багато часу для першого запуску, ви, ймовірно, захочете заощадити час, вказавши параметри, які вам знадобляться залежно від кінцевої мети вашої збірки. У разі сумнівів, можливо, доцільно звернутися за порадою до #libreoffice-dev IRC://.

Ви повинні мати відповідну конфігурацію для збірки, яку ви помістили у файл autogen.input. Але ви можете почати з мінімального набору опцій і налаштувати їх пізніше. Приклад autogen.input для компіляції LibreOffice в Linux може бути таким, щоб увімкнути компіляцію для налагодження, а також вимкнути doxygen для економії часу. Оскільки команда make може зайняти багато часу при першому запуску, ці опції є корисними.

--enable-dbgutil
--without-doxygen

Потім ви можете підготувати файли збірки за допомогою:

$ ./autogen.sh


Тепер ви готові до створення за допомогою make. Майте на увазі, що повне збирання (всіх компонентів, без інкрементів) може зайняти до 24 годин і займає близько 20 ГБ дискового простору. Вам також, швидше за все, знадобиться принаймні 8 ГБ оперативної пам’яті, інакше машина може потрапити в режим обміну і, здається, зависне.

Спочатку варто запустити make, щоб мати робочу збірку на випадок, якщо пізніше make check не вдасться.

$ make
$ make check

Запуск збірки

Попередній крок створює хорошу локальну інсталяцію, з якої ви можете почати:

$ instdir/program/soffice --writer
$ instdir/program/soffice --calc


Відеоуроки

Початок роботи з розробки LibreOffice

Please accept this video. By accepting you will be accessing content from YouTube, a service provided by an external third party.

YouTube privacy policy

Відео ілюструє процес налаштування середовища розробки та побудови. Однак, будь ласка, використовуйте документацію вікі для налаштування, замість того, щоб намагатися записувати все, що ви бачите у відео.

Поради

Запуск під керуванням налагоджувача

Для запуску збірки безпосередньо під налагоджувачем:

$ make debugrun

Потім ви можете відкрити Writer за допомогою команди:

   (gdb) run --writer

Зверніть увагу, що soffice.bin буде закрито при першому запуску безпосередньо (або через make debugrun), це нормально, вам просто потрібно запустити його знову, щоб ним скористатися. Запуск soffice вирішить цю проблему за вас.

Увімкнення попереджень

Різні версії GCC відомі тим, що видають більше/непотрібних/помилкових попереджень на вищих рівнях оптимізації. Навіть не намагайтеся поєднувати --disable-debug --enable-werror з GCC.

Продуктивність

Створення LibreOffice займає час, багато часу. Скільки саме — залежить від потужності вашого комп'ютера. Але є інструменти, які можна використовувати для прискорення процесу.

ccache

ccache — це інструмент, який кешує результати компіляції C/C++, щоб спробувати повторно використати їх пізніше. Він не пришвидшить початкову збірку (навпаки, трохи її уповільнить), але може значно пришвидшити подальшу перекомпіляцію. Якщо ви плануєте змінювати багато файлів заголовків у LibreOffice, цей інструмент буде вам у нагоді.

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

Зверніть увагу, що розмір кешу за замовчуванням становить лише 5 ГБ, що занадто мало для компіляції LibreOffice; для компіляції без символів налагодження вам потрібно мати щонайменше 8 ГБ кешу, а для компіляції з символами налагодження для всього, ймовірно, 32 ГБ буде корисним початковим розміром. Ви можете встановити розмір таким чином (зверніть увагу, що це налаштування зберігається в каталозі кешу, якщо ви зміните розташування, встановивши $CCACHE_DIR, вам доведеться зробити це знову):

ccache --max-size 32G

ccache також підтримує стиснення, яке, швидше за все, варто ввімкнути (хтось має точні цифри?), особливо якщо ви використовуєте невеликий або повільний носій інформації, наприклад SSD або жорсткий диск ноутбука. Ви можете ввімкнути стиснення, додавши це до вашого .bashrc або еквівалентного файлу:

export CCACHE_COMPRESS=1

Icecream / distcc

Якщо ви перебуваєте в середовищі, де маєте доступ до декількох машин із вільними циклами ЦП, ви можете ознайомитися з інструментами icecream або distcc для розподіленої збірки. Рекомендується використовувати Icecream, оскільки він простіший у налаштуванні.

Підтримка Icecream вбудована в LibreOffice, достатньо додати --enable-icecream до ./autogen.sh, і процес конфігурації попередньо встановить кількість завдань для використання та спробує знайти обгортки icecream gcc у /usr/lib/icecc/bin або у /opt/icecream/bin. Якщо вони знаходяться десь інде, будь ласка, використовуйте --with-gcc-home=/path/to/your/icecream/bin для заміни цього параметра.

Щоб скористатися distcc, спочатку встановіть і запустіть distccd на всіх машинах для компіляції та переконайтеся, що всі версії компілятора сумісні (це важливо для коду C++). Тепер на керуючій машині встановіть і налаштуйте distcc для використання інших хостів збірки. Потім передайте --with-parallelism=N до autogen.sh, де N — загальна кількість процесорів, доступних у вашому кластері, і запустіть distcc-pump make CC=distcc CXX=distcc, щоб розпочати розподілену збірку.

Попередньо скомпільовані заголовки

Передача --enable-pch до autogen.sh уможливлює використання попередньо скомпільованих заголовків (PCH), що скорочує час компіляції за рахунок збільшення дискового простору та кількості вихідних файлів, які можуть бути перекомпільовані при зміні заголовка. Ця опція має кілька рівнів (системний, базовий, нормальний, повний), чим вищий рівень, тим більший можливий виграш, але також збільшується використання дискового простору та ймовірність більших перекомпіляцій при змінах.

--with-parallelism

Процес побудови можна налаштувати на паралельне виконання декількох завдань. Паралельність контролюється параметром autogen.sh --with-parallelism. Якщо у вас достатньо пам'яті, я виявив, що використання --with-parallelism=n, де n — кількість ядер, або 2 для --with-parallelism, якщо у вас тільки 1 ядро, забезпечує найшвидший час побудови.

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

--with-system-libs

Створення за допомогою існуючих бібліотек може прискорити процес, але вам доведеться повозитися з залежностями.

Приблизний час побудови

Перша збірка або чиста збірка займає приблизно 8/number_cores годин на сучасному процесорі. З ccache час наступних щоденних збірок варіюється від 2 до 10 хвилин (залежно від кількості змінених або доданих файлів та їхньої складності).

Детальна збірка

Make приховає точні виклики команд. Щоб побачити, що саме робить make за один запуск, можна викликати його як

$ make verbose=1

Using verbose=1, in turn sets this option for the child make invocations, and also deals with externals. In the verbose mode, every single command used to build LibreOffice is shown, which can be used for troubleshooting build problems.

Кілька робочих каталогів

Якщо ви хочете працювати одночасно як з головною гілкою, так і з поточною гілкою (гілками) випуску, ви можете поділитися репозиторіями git та зовнішніми архівними файлами (зауважте, що економія може бути значною, особливо якщо ви також використовуєте досить великий репозиторій l10n). Зверніть увагу, що перемикання між різними гілками випуску в межах одного робочого каталогу не рекомендується; навіть якщо немає проблем із залежностями, обсяг того, що вам доведеться перекомпілювати, практично дорівнює повній перекомпіляції. Якщо ви можете собі дозволити дисковий простір, рекомендується підтримувати окремі дерева.

Існує два методи для спільного використання репозиторіїв git у робочих каталогах: git clone --reference та git worktree. Референційний клон дозволяє уникнути повторного завантаження репозиторію.

Налаштування

Підготуйте першу збірку на своєму диску, як описано вище. Для другої та всіх інших збірок виконайте наступні дії, щоб клонувати початкове основне сховище:

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

Ви помітите, що операція клонування відбувається набагато швидше. Після цього налаштуйте новий робочий каталог за допомогою цих двох додаткових опцій конфігурації (або autogen.sh):

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

Again, cloning will be much faster. You have to use an absolute path for the --with-external-tar option. After that, you proceed with building just like for the single-workdir case.

The --with-referenced-git option is only needed if you enabled some submodules (translations, dictionaries or help) or you're building the libreoffice-4-0 branch (or one that is even older). On newer branches submodules are disabled by default.

If you want to cherry-pick between the working directories, you can setup your local copy of git to act like a remote, like this:

$ cd /path/to/stable-workingcopy
$ git remote add unstable /path/to/master/.git
$ cd /path/to/master
$ git remote add stable /path/to/stable-workingcopy/.git

You then just cherry-pick commits like you would to a "true" remote on another server.

Checking out a release branch

run autogen.sh on master with the specific parameters you need, then run make fetch to fetch the submodules that may be needed depending on the parameters you passed to autogen.sh

then switch branch with

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


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

--disable-epm This will fix "rpm not found", as autogen.sh expects to find either dpkg or rpm on the system.

--without-java This will fix "ant not found"

As of the master towards LibreOffice 3.6, to build the UNO SDK you need to have Doxygen installed so that HTML documentation for the C++ UNO interface can be generated. One option is to install Doxygen from its website and make sure the doxygen executable is found on the PATH, or specify its exact location via --with-doxygen=pathname configure switch. Another option is to configure --without-doxygen, in which case the HTML documentation for the C++ UNO interface will be missing from the UNO SDK being built. A third option is to configure --disable-odk, in which case the UNO SDK is not built at all.

Note: Installing 'libgnomevfs2-dev' package on Ubuntu manually will fix "No package 'gnome-vfs-2.0' found" on older release branches. It should not be needed anymore on master by now. Use synaptic package manager or run in terminal

$ sudo apt-get install libgnomevfs2-dev

Створення DEB та/або RPM пакетів

Якщо ви хочете створити пакети DEB або RPM, додайте відповідні опції до файлу autogen.input:

RPM

--with-package-format=rpm
--enable-epm

DEB

--with-package-format=deb
--enable-epm

Основні конфігурації дистрибутива TDF можна знайти в модулі distro-configs. Для Linux дивіться distro-configs/LibreOfficeLinux.conf.

Де пакунки?

Шукайте файли в каталозі ./workdir/installation/. Для кожного набору пакетів є окрема папка, яка містить підпапки для типу або типів пакетів: DEB, RPM або обох. Усередині підпапок знаходиться інша папка під назвою install, яка містить дві підпапки. Одна підпапка містить архів усіх пакетів, зжатих разом (папка ..._download), а інша містить папку DEBS/RPMS з кожним окремим пакетом. Решта повинна бути зрозумілою без пояснень!

Робота з кінцями рядків і автокрил 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 recognized system type... Invalid configuration `
 failedre: error: /bin/bash ./config.sub 
Error running configure at ./autogen.sh line 241.

... то, ймовірно, у вас проблеми з кінцем рядка. Це може статися, якщо ви помилково встановили в Git core.autocrlf=true.

Щоб вирішити цю проблему, виконайте такі команди (УВАГА: незбережені зміни будуть втрачені!):

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

Створення перекладеного інтерфейсу користувача за допомогою файлів .po TDF Weblate

Інтерфейс користувача LibreOffice перекладається за допомогою файлів .po, розміщених на сервері TDF Weblate, а переклади оновлюються та пакуються у вигляді мовних пакетів з кожним новим випуском для кожної гілки відповідно. Це часто означає, що мовний пакет не відображає всіх поліпшень, внесених між випусками, а нічні збірки існують лише для декількох мов. Перекладачі можуть отримати користь від тестування своєї роботи перед публікацією нового випуску, а перші користувачі можуть протестувати переклади до офіційного випуску.

Спочатку переконайтеся, що ви впоралися з залежностями збірки, а потім спробуйте клонувати та запустити свою збірку.

Створення перекладеного інтерфейсу користувача

  1. Спочатку потрібно завантажити файли .po з TDF Weblate. Ви можете увійти в TDF Weblate, щоб завантажити файли .po.
  2. перекомпілюйте вихідний код з опцією мовного пакету за допомогою команди ./autogen.sh --with-lang="<langCode>" і не забудьте замінити <langCode> на фактичний код мови. Якщо ви використовуєте файл autogen.input, лапки не використовуються, тому це буде виглядати так: --with-lang=uk ja ar
  3. витягніть завантажені файли .po та скопіюйте вміст до відповідних каталогів у дереві джерел за допомогою команди (у GNU/Linux) cp -R <langCode>/libo_ui/* libreoffice/translations/source/<langCode>/ і не забудьте замінити <langCode> (два рази) на фактичний код мови
  4. цей крок може бути складним. Здається, що деякі витягнуті файли .po мають назву «messages.po», а деякі мають інші назви. Вам потрібно перетворити всі файли .po у файли .mo та
    1. для файлів, які **не мають назви** 'messages.po', перетворення виконується за допомогою команди make build-l10n-only
    2. for files that **are** named 'messages.po' you need to convert to .mo files manually running msgfmt -o instdir/program/resource/<langCode>/LC_MESSAGES/<moFile><dir>/messages.po for every such file. Here three things must be changed: <langCode> to actual language code, <moFile> with data from the left column of the table below and <dir> with data from right side of table below. Just make sure you prefix path '<dir>/messages.po' with full path from current working to destination.

As mentioned in step 4, some .po files are named 'messages.po' and some are named differently. The table below lists directories that might hold 'messages.po' files and on which step 4.2 should be applied.

<mofile> <dir>
acc.mo accessibility
avmedia.mo avmedia
basctl.mo basctl
chart.mo chart2
cnr.mo connectivity
cui.mo cui
dba.mo dbaccess
dkt.mo desktop
editeng.mo editeng
filter filter
for.mo formula
fps.mo fpciker
frm.mo forms
fwk.mo framework
pcr.mo extensions
rpt.mo reportdesign
sb.mo basic
sc.mo sc
sca.mo scaddins
scc.mo sccomp
sd.mo sd
sfx.mo sfx2
sm.mo starmath
svl.mo svl
svt.mo svtools
svx.mo svx
sw.mo sw
uui.mo uui
vcl.mo vcl
wiz.mo wizards
wpt.mo writerperfect
xsc.mo xmlsecurity

Last step in process is to run sudo make install to install with newly added translations.

If you would like to build LibreOffice-master and check the translation, you may need "make translations" to merge .po file with the .pot files.

Building translated Help files

Help files are also translated on TDF Weblate so for translated Help files this can be done

  1. by downloading .po files of translated Help
  2. run ./autogen.sh --with-help --with-lang="<langCode>" replacing <langCode> with actual language code. If you want to build Help as HTML files, do --with-help=HTML. If using an autogen.input file, no quotes are used, so this becomes: --with-lang=de ja ar
  3. run make
  4. run cp -fR <langCode>/libo_help/* libreoffice/translations/source/<langCode>/helpcontent2/source/text/, but remember to replace two instances of <langCode> with actual language code and make sure you navigate to this folder correctly from current working directory
  5. run mv libreoffice/translations/source/<langCode>/helpcontent2/source/text/auxiliary.po libreoffice/translations/source/<langCode>/helpcontent2/source/. Replace two instances of <langCode> with actual language code and make sure you navigate to this folder correctly from current working directory
  6. run make build-l10n-only
  7. run sudo make install

(Дякуємо Kiyotaka та Jihui)