Changes

From Studiosg
Jump to navigationJump to search
Added article about building LibreOffice 7.0.3.1 for Slackware Arm
{{header_en|title=How-to build LibreOffice for Slackware Linux| keyword={{Template:keyword_en_libreoffice}}| description=Build and install working LibreOffice packages for the Slackware and SlackwareARM Linux 14.2 Current operating systems | link_page=compilare_libreoffice_per_slackware_202102}}

== '''How-to Build a Recent Version of LibreOffice for Slackware Linux''' ==

Not so long ago I wrote a [[build_libreoffice_for_slackware | page]] about building working '''LibreOffice''' packages for '''Slackware current''', the development version of the famous '''Linux''' distribution, for the '''ARM''' architecture. Maintaining packages for a development release is a lot like hitting a moving target. A lot of the included packages are updated daily thus introducing new dependencies and issues arising from library version mismatch. I myself discovered with a certain disappointment that many programs, including LibreOffice, had stopped working after a particularly large update of the operating system. Noticing the problem, I tried to rebuild everything only to find that the scripts described in the mentioned article no longer worked. After some unsuccessful attempts, I resolved to start from scratch upgrading to LibreOffice 7.0.3.1. In the following article I'll detail the procedure, provide some hits and all of the corrections made to produce working packages of '''LibreOffice 7.0.3.1 for SlackwareArm 14.2 current'''.

=== Development Environment ===
I used a '''Raspberry Pi 4 model with 4 Giga Bytes of RAM memory''' which runs '''Slackware Linux Arm 14.2 current'''. Before I start, I'd like to point out that I'm still using a SlackwareArm release dating back to Christmas 2020. No serious operating system update was installed after that because a '''glibc''' version update has been in the air for some time. The Glibc libraries are a fundamental part of the system and it is very likely that, following the upgrade, the vast majority of installed programs will stop working and a massive rebuild, touching more or less the whole system, will be required afterwards. Not having much time to spare, I chose to postpone any update to when the distribution will be stable anew.

=== Prerequisites ===
For a full list of prerequisites I'll suggest reading [[build_libreoffice_for_slackware#Prerequisites | the previous article of the series]]. The provided information is still valid. I'm going to write about '''OpenJDK''', previously used release 8 does not match with LibreOffice 7.0, and other differences instead.

==== LibFreehand ====
I again built a stand alone package for the '''LibFreehand''' library that enables support for '''Freehand''' save files. The ''libreoffice-7.0.3.1-srcs.tar.xz'' archive includes a version of the library matching the one in ''libreoffice-6.4.1.2-srcs.tar.xz'', that proved to be a source of errors and problems in the past. I preferred to play it safe and build a stand alone package following the same procedure described in [[build_libreoffice_for_slackware#LibFreehand | the LibreOffice 6.4 related web page]].

==== OpenJDK ====
OpenJDK is a '''Software Development Kit for the Java programming language''', needed to write new programs and applications. LibreOffice includes many Java libraries, to connect to database servers and more. LibreOffice cannot be successfully built unless a recent working JDK is installed on the operating system. I had previously installed an [https://slackware.uk/sarpi/pkg/jdk-8u261-armv7-1_slackcurrent_sp1.txz '''OpenJDK 8 package'''] provided by the [https://sarpi.fatdog.eu Sarpi] project. The very same package turned out to be outdated for LibreOffice 7.0 and I was in need of a newer release. I installed an '''OpenJDK 11''' package provided by the [https://adoptopenjdk.net AdoptOpenJDK] project web site. Newer versions exist already, but '''release 11 offers long term support''' that guarantees a certain degree of stability. The mentioned web site provides both a 32 bit (arm32) and 64 bit (aarch64) version. '''The required version is the 32 bit one''' because Slackware Arm does not provide support for any 64 bit platform yet.

Alternatively you could build your own version of OpenJDK from scratch. That is no easy task requiring a lot of time and effort, therefore I suggest using the pre-built packages, at least initially.

==== RedLand ====
'''RedLand''' is a library of software functions written in '''C''' programming language LibreOffice leans on. I used the version included in the additional source code archive. All of the LibreOffice required libraries are included in the ''libreoffice-7.0.3.1-srcs.tar.xz'' archive file.

=== Remove Any Installed LibreOffice Release ===
Installed versions of LibreOffice '''should always be removed''' before you start building a new one, otherwise errors will raise when the script detects the presence of old system programs and settings. After you remove previously installed versions, please clean some leftover environment variables running commands:
<syntaxhighlight lang="bash">
unset UNO_PATH
unset URE_BOOTSTRAP
</syntaxhighlight>

or executing a log out followed by a new authentication to reload the environment, or again rebooting your Linux box.

=== Patch no-check-if-root ===
Packages are usually built by user '''root''' in Slackware Linux unlike other distributions. LibreOffice developers prefer to avoid building by root and provide a check to prevent the source code from being compiled by a high privileged user such as the administrator. To work around the problem, the www.slackbuilds.org project includes the ''no-check-if-root.diff'' file which removes all checks allowing the SlackBuild script to work. The patch included in the slackbuilds.org compressed archive file works well with LibreOffice 6.4, but '''requires editing to work with 7.0.3.1'''. An updated patch menat for release 7.0.3.1 of the source code follows:
<syntaxhighlight lang="bash">
--- Makefile.orig 2018-02-07 22:18:13.161535968 +1000
+++ Makefile 2018-02-07 22:17:41.560533422 +1000
@@ -9,7 +9,7 @@

gb_Top_MODULE_CHECK_TARGETS := slowcheck unitcheck subsequentcheck perfcheck uicheck screenshot

-.PHONY : check-if-root bootstrap gbuild build build-non-l10n-only build-l10n-only check clean clean-build clean-host test-install distclean distro-pack-install docs download etags fetch get-submodules id install install-gdb-printers install-strip tags debugrun help showmodules translations packageinfo internal.clean $(gb_Top_MODULE_CHECK_TARGETS)
+.PHONY : bootstrap gbuild build build-non-l10n-only build-l10n-only check clean clean-build clean-host test-install distclean distro-pack-install docs download etags fetch get-submodules id install install-gdb-printers install-strip tags debugrun help showmodules translations packageinfo internal.clean $(gb_Top_MODULE_CHECK_TARGETS)

MAKECMDGOALS?=all
build_goal:=$(if $(filter build check,$(MAKECMDGOALS)),all)\
@@ -268,7 +268,7 @@
#
# Bootstrap
#
-bootstrap: check-if-root compilerplugins
+bootstrap: compilerplugins

#
# Build
</syntaxhighlight>

The file ''no-check-if-root.diff'' included in the archive should be replaced with a new one, bearing the same name, but containing the above lines.

For your convenience I share a link to the updated [http://www.giustetti.net/resource/patch/14.2current/libreoffice/no-check-if-root-lo7031.tar.gz patch]. Download and unzip it, move it in the directory where the SlackBuild script '''LibreOffice.SlackBuild''' is located overwriting the existing ''no-check-if-root.diff'' file.

To check for the patch archive consistency and ensure its safety, please confront its checksum values with the following ones:
<syntaxhighlight lang="bash">
md5: 8d2ebf2aad015833692a2091a5310a30
SHA512: be3cb2d237b1991e978186c1dcab837887b5ff31c1ee8a98c14d652a673ac764fc5efff83726ddf459a245bc205951f9d7bf8717e6268c9b36da59a9fb042796
</syntaxhighlight>

=== Build Script ===
The [http://www.slackbuilds.org/repository/14.2/office/LibreOffice/ LibreOffice build script]] requires some updates to work. Please follow the instructions of my [[build_libreoffice_for_slackware#Build_Script | previous article]] to apply them. Moreover yuo need to add some lines of code specifically for '''gcc 10'''.
<syntaxhighlight lang="bash">
# GCC10 requirements (Tx alienBOB)
# From http://cgit.ponce.cc/slackbuilds/commit/?h=LibreOffice
sed -i external/libcdr/ExternalProject_libcdr.mk \
-e '/configure /i \\t\t&& sed -i "s/TRUE/true/g" src/lib/libcdr_utils.cpp \\'
sed -i external/libebook/ExternalProject_libebook.mk \
-e '/configure /i \\t\t&& sed -i "s/TRUE/true/g" src/lib/EBOOKCharsetConverter.cpp \\'
sed -i i18npool/source/calendar/calendar_gregorian.cxx -e 's/TRUE/true/'
</syntaxhighlight>

The issue was discussed by both Alien Bob, in his blog, and members of the www.slacky.it forum. My thanks to both for the tip.

For your commodity I share a link to the whole [http://www.giustetti.net/resource/slackbuild/libreoffice-7.0.3.1/LibreOffice.SlackBuild.gz updated SlackBuild file]]. Download and unzip it, then replace the one provided by www.slackbuilds.org in their archive.

Download it with '''wget''':
<syntaxhighlight lang="bash">
'''wget''' http://www.giustetti.net/resource/slackbuild/libreoffice-6.4.1.2/LibreOffice.SlackBuild.gz
</syntaxhighlight>

Check the integrity of the downloaded archive against its checksum values:
<syntaxhighlight lang="bash">
md5: 296dd03a782f0cafc2d366554186a35c
SHA512: 65af0d178abe33642c785886a631098b97c204a6a4deec101b4c7dd3f9e0b18e45d24451b320a6d1676459e4bab0e6ab8338097b2545baa95375e475b185644b
</syntaxhighlight>

Unzip it with command:
<syntaxhighlight lang="bash">
gunzip ./LibreOffice.SlackBuild.gz
</syntaxhighlight>

Assign it execution permissions
<syntaxhighlight lang="bash">
chmod u+x ./LibreOffice.SlackBuild
</syntaxhighlight>

Overwrite the original script and start building:
<syntaxhighlight lang="bash">
sh ./LibreOffice.SlackBuild
</syntaxhighlight>

Please do not ask the original script author for help regarding my updated version.

=== .desktop Files ===
Files with the ''.desktop'' extension are used to register installed programs in menus of graphical user interface like '''Gnome''', '''KDE''', '''TDE''' or '''XFCE'''. The LibreOffice suite includes a multitude of applications with a wide range of functionality: '''writer''', a word processor, '''calc''', a spreadsheet software, '''draw''', a vector drawing software and so on. Menu entries are very helpful to start a program without having to run it through the command line. The build script I provide saves the .desktop files into the ''/opt'' directory along the libraries, the executable files, and many other resources, but GUIs search for them in the ''/usr'' directory meaning the related menu entries do not appear in any panel. You can correct this minor nuisance in one of three ways:
# Copy the files, move them or link them in directory ''/usr/share/applications''.
# Rebuild LibreOffice setting ''/usr'' instead of ''/opt'' as its root directory.
# Modify the SlackBuild script adding the commands required to move ''.desktop'' files in the proper directory while building the package.
The former require users to manually delete files or links when uninstalling LibreOffice, to avoid leaving dead files through the file system. The second option is enforced by the majority of Linux distributions and causes a single directory to be cluttered by a multitude of programs, libraries, applications and so on. The latter is probably the best one, at least in my opinion. When files are properly arranged in a package, they can be manages easily recurring to the package managers and users do not risk the issues afflicting the first of the three solutions proposed when uninstalling packages.

My sincere thanks to Mr. Ananda Murthy for pointing this out.


== CONCLUSIONS ==

This article delves once more about building a recent version of LibreOffice on a Raspberry Pi 4. Recent Slackware Arm updates caused old versions of the software to fail and required installing a newer one. All the updates made to the original script and patch are included, as well as instructions required to successfully execute the task. Moreover I included copies of the updated SlackBuild script and patch.


For any feedback, questions, errors and such, please e-mail me at ''studiosg [at] giustetti [dot] net''


External links

----

* [https://www.libreoffice.org/ LibreOffice home page]]
* [http://www.slackware.com Slackware home page]
* [http://arm.slackware.com Slackware Linux for the ARM architecture]
* [http://sarpi.fatdog.eu/index.php?p=rpi4getcurrent Semi official SlackwareARM packages for the Raspberry Pi 4]

----

{{footer_en | link_page=compilare_libreoffice_per_slackware_202102}}

Navigation menu