- 1 Introductory notice
- 2 Environment setup
- 3 Compilation of a LOOL docker image
- 4 Running separate unit tests
Compilation of LibreOffice online (LOOL from this point) can be quite tricky. Using docker is highly suggested and is what this wiki page covers. For a native installation you can also have a look at this document by the infrastructure team.
The compilation will require almost 30GB. Suggested setup: at least a 2 cores-CPU with 4GB of RAM.
Since LibreOffice core build fails when trying to make as root, LOOL build is even encouraged to be run as regular user. This user needs access to sudo without password to set the capabilities of the newly-build executables. Therefore, using isolate machines to run the builds is suggested.
The first step is to create the user (make sure even to create the home for the user since it's required by npm):
useradd -s /bin/bash -m lool
The user also needs to be a member of the Docker group to build the image:
adduser lool docker
Once the user is created, you will need to authorize him to use sudo. Edit the sudoers file (with your preferred editor or running
visudo) and add something like
lool ALL=(ALL) NOPASSWD: /sbin/setcap, /usr/bin/echo
save & exit.
Prerequisites for building on Debian 10
apt-get install -y git build-essential devscripts libkrb5-dev openssl g++ libssl-dev libcap-dev libtool m4 automake libcppunit-dev libcppunit-doc pkg-config python-polib python3-polib default-jre libpam-dev npm python-lxml python3-lxml translate-toolkit docker.io locales-all libpng16-16 fontconfig adduser cpio findutils nano libpoco-dev libcap2-bin openssl inotify-tools procps libubsan1
apt-get build-dep -y libreoffice
npm i npm@latest -g
Prerequisites for building on Ubuntu 18.04
apt-get install python3-lxml libcap-dev python3-polib libpam-dev libpoco-dev procps inotify-tools build-essential devscripts libcap2-bin libkrb5-dev cpio
apt-get build-dep -y libreoffice
apt-get install python-polib
apt-get install npmsince libpoco-dev and npm packages conflict (https://stackoverflow.com/questions/56463987/installing-libpoco-and-npm-conflict) so from https://github.com/nvm-sh/nvm:
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.0/install.sh | bash
- reopen terminal
nvm install node
- reopen terminal
Clone of the repository
Now choose a working directory. The following will use /opt. Use of /tmp is discouraged.
mkdir -p /opt cd /opt git clone --depth=1 https://git.libreoffice.org/online chown -R lool. online
Compilation of a LOOL docker image
A docker image is the easiest way to have a working version of LOOL built. A script (l10n-docker-nightly.sh) is provided by LOOL developers to (almost) automatically build the required core part, LOOL and close the binaries inside a docker container.
If you have followed the Environment setup you're ready to run the build.
cd /opt/online/docker su lool ./l10n-docker-nightly.sh
The script will run through the compilation of the core and the online and then build the docker image as
libreoffice/online:master but (normally) will fail to push (since you don't have access to the libreoffice namespace in the dockerhub) but you can disable the push by using the
Choosing the branch to compile
If you're interested in compiling a stable image, make sure to pick the same version of the software from online and core.
For example, if you want to compile the latest stable version you have to
- go to https://git.libreoffice.org/online/+refs and look for the branches whose names starts with "libreoffice-", which are the non-branded mainline.
At the moment of writing this page, the latest available is libreoffice-6-4.
- go to https://git.libreoffice.org/core/+refs and look for the branches whose names starts with the online version you found.
At the moment of writing this page, the latest core available that matches with the online is the libreoffice-6-4-4.
Now that you found out which branches you want to compile, you simply have to start the build with something like
LIBREOFFICE_BRANCH="libreoffice-6-4-4" LIBREOFFICE_ONLINE_BRANCH="libreoffice-6-4" NO_DOCKER_PUSH="yes" ./l10n-docker-nightly.sh
Of course, if stability doesn't matter for you, you can simply build the two master branches. And here's another sample for the 7.0 branch:
DOCKER_HUB_REPO=libreoffice/online DOCKER_HUB_TAG=7-0-0 LIBREOFFICE_BRANCH="libreoffice-7-0-0" LIBREOFFICE_ONLINE_BRANCH="libreoffice-7-0" NO_DOCKER_PUSH="yes" ONLINE_EXTRA_BUILD_OPTIONS="--enable-anonymization" ./l10n-docker-nightly.sh
The optional parameters
DOCKER_HUB_TAG help to identify the container. While the first sample (6-4-4), lacking the parameters, is referred to as
libreoffice/online:master, the second sample is referred to as
Automating stable compilation
The following script may be used to automatically fetch the latest (supposed) stable version and compile it. You can run it in something like a nightly build. In any case, using ccache is highly suggested to enhance a lot the build times after the first.
cd /opt [ -e online ] || git clone --depth=1 https://git.libreoffice.org/online cd online git pull origin master cd docker git ls-remote https://git.libreoffice.org/core | cut -f 2 | grep -e '^refs/heads/libreoffice' | tail -1 | rev | cut -d '/' -f 1 | rev > core-branch git ls-remote https://git.libreoffice.org/online | cut -f 2 | grep -e '^refs/heads/libreoffice' | tail -1 | rev | cut -d '/' -f 1 | rev > online-branch LIBREOFFICE_BRANCH="$(cat core-branch)" LIBREOFFICE_ONLINE_BRANCH="$(cat online-branch)" DOCKER_HUB_TAG="$(cat online-branch)-$(date +%Y-%m-%d)" NO_DOCKER_PUSH="yes" ONLINE_EXTRA_BUILD_OPTIONS="--enable-anonymization --with-max-connections=100000 --with-max-documents=100000" ./l10n-docker-nightly.sh
l10n-docker-nightly.sh supported flags
The l10n-docker-nightly.sh script supports a few variables to personalize the build. An up-to-date list of the supported flags are written in the first comments of the script.
|DOCKER_HUB_REPO||which Docker Hub repo to use||Changes the docker image name. If undefined,
|DOCKER_HUB_TAG||which Docker Hub tag to create||Changes the docker image tag. If undefined,
|LIBREOFFICE_BRANCH||which branch to build in core||Changes the branch to build from the core repository. If undefined,
|LIBREOFFICE_ONLINE_BRANCH||which branch to build in online||Changes the branch to build from the online repository. If undefined,
|LIBREOFFICE_BUILD_TARGET||which make target to run (in core repo)||Changes the build target of core. If undefined, nothing will be passed to make.|
|ONLINE_EXTRA_BUILD_OPTIONS||extra build options for online||Adds options to the
|NO_DOCKER_IMAGE||if set, don't build the docker image itself, just do all the preps||if undefined, the option will be performed|
|NO_DOCKER_PUSH||don't push to docker hub||if undefined, the option will be performed|
Running separate unit tests
To run a single unit test, use this command:
(cd test; CPPUNIT_TEST_NAME="TestClass::TestMethod" ./unittest)
To debug it, modify to this:
(cd test; CPPUNIT_TEST_NAME="TestClass::TestMethod" gdb --args ./unittest)