Changes

Aggiunto articolo relativo alla compilazione di LibreOffice 7.0.3.1 su Slackware Arm
{{header_it|title=Compilare LibreOffice per Slackware Linux| keyword={{Template:keyword_it_libreoffice}}| description=Compilare pacchetti funzionanti di LibreOffice per un sistema operativo Slackware o SlackwareARM Linux 14.2 Current | link_page=build_libreoffice_for_slackware_202102}}

== '''Compilare una Versione Recente di LibreOffice per Slackware Linux''' ==

In un mio [[compilare_libreoffice_per_slackware | precedente articolo]] ho illustrato come compilare pacchetti funzionanti di '''LibreOffice''' per '''Slackware current''', la versione di sviluppo della celebre distribuzione '''Linux''', su piattaforma '''Arm'''. Mantenere pacchetti per una versione di sviluppo è come mirare ad un bersaglio in movimento. Molti pacchetti vengono aggiornati quotidianamente con la conseguente introduzione di nuove dipendenze oppure di librerie incompatibili. Io stesso ho scoperto con rammarico che molti programmi, tra cui LibreOffice, hanno smesso di funzionare dopo un aggiornamento particolarmente corposo del sistema operativo. Notato il problema, mi sono accinto a ricompilare tutto quanto solo per scoprire che gli script descritti nell'articolo sopra citato non funzionavano più. Dopo alcuni tentativi infruttuosi, ho deciso di ricominciare daccapo passando alla versione 7.0.3.1 di LibreOffice. Nel proseguo dell'articolo descrivo la procedura seguita, gli accorgimenti e le correzioni apportate per generare pacchetti funzionanti di '''LibreOffice 7.0.3.1 per SlackwareArm 14.2 current'''.

=== Ambiente di Sviluppo ===
La macchina utilizzata consiste in un '''Raspberry Pi 4 dotato di 4 Gb di RAM''' su cui è stata precedentemente installata la versione 14.2 current di SlackwareArm Linux. Prima di incominciare vale la pena specificare che è in uso un rilascio di SlackwareArm datato Natale 2020. Il sistema operativo non è stato aggiornato in seguito perchè è in programma un cambio di versione delle librerie '''glibc''', che sono un componente fondamentale del sistema. È molto probabile che, a seguito dell'aggiornamento, la maggioranza dei programmi installati smetteranno di funzionare e sarà necessario ricompilare praticamente l'intero sistema. Non avendo molto tempo disponibile, preferisco rimandare a quando la distribuzione si sarà assestata.

=== Prerequisiti ===
Per un elenco dei prerequisiti rimando [[compilare_libreoffice_per_slackware#Prerequisiti | all'articolo precedente]]. Le informazioni ivi contenute sono ancora attuali al momento di scrivere il presente. Di seguito tratteremo invece '''OpenJDK''', in quanto la versione 8 utilizzata in precedenza non si integra con LibreOffice 7.0, e le altre differenze.

==== LibFreehand ====
Come in precedenza, ho compilato a mano una versione della libreria '''LibFreehand''' usata per integrare il supporto ai file generati con '''Freehand'''. La versione contenuta nell'archivio ''libreoffice-7.0.3.1-srcs.tar.xz'' è la medesima contenuta nel precedente ''libreoffice-6.4.1.2-srcs.tar.xz'', che aveva dato parecchie gatte da pelare in passato. Si è preferito andare sul sicuro e preparare un pacchetto a se stante seguendo le istruzioni contenute [[compilare_libreoffice_per_slackware#LibFreehand | nell'articolo relativo a LibreOffice 6.4]].

==== OpenJDK ====
È il '''Software Development Kit per il linguaggio Java''', necessario per sviluppare nuovi programmi ed applicazioni. LibreOffice integra molte librerie Java per gestire i collegamenti ai database server, ma non solo. Non è possibile compilare LibreOffice a meno che non sia installato un JDK recente funzionante. In precedenza avevo installato [https://slackware.uk/sarpi/pkg/jdk-8u261-armv7-1_slackcurrent_sp1.txz '''OpenJDK versione 8'''] messo a disposizione dal progetto [https://sarpi.fatdog.eu Sarpi]. Lo stesso pacchetto è purtroppo obsoleto per LibreOffice 7.0 ed è necessaria una versione più recente. Ho provveduto ad aggiornarlo utilizzando '''OpenJDK versione 11''' reperibile presso il sito [https://adoptopenjdk.net AdoptOpenJDK]. Esistono versioni ancora più recenti, ma '''la 11 offre il supporto a lungo termine''' e perciò garantisce una certa stabilità. Il sito segnalato offre sia una versione a 32 bit (arm32), che una a 64 (aarch64). '''La versione richiesta è a 32 bit''' dato che Slackware Arm non supporta ancora le architetture a 64 bit.

Alternativamente è possibile compilare la propria versione di OpenJDK. Si tratta di un'operazione complicata, che richiede parecchio tempo per cui suggerisco di ricorrere a pacchetti già pronti, almeno in un primo tempo.

==== RedLand ====
'''RedLand''' è una libreria di funzioni scritte nel linguaggio '''C''' su cui si appoggia LibreOffice. Ho usato la versione della libreria inclusa nel codice sorgente addizionale per compilare LibreOffice. Tutte le librerie addizionali sono incluse nell'archivio ''libreoffice-7.0.3.1-srcs.tar.xz''.

=== Rimuovere Eventuali Versioni Installate di LibreOffice ===
'''È necessario rimuovere le versioni di LibreOffice''' installate in precedenza, prima di avviare la compilazione, per evitare l'insorgere di errori dovuti alla presenza di programmi ed impostazioni obsoleti nel sistema. Rimossa la versione precedente, è bene pulire alcune variabili di ambiente con i comandi:
<syntaxhighlight lang="bash">
unset UNO_PATH
unset URE_BOOTSTRAP
</syntaxhighlight>

Oppure scollegandosi e ricollegandosi alla macchina in modo da ricaricare l'ambiente di lavoro, oppure ancora riavviando la stessa.

=== Patch no-check-if-root ===
I pacchetti sono abitualmente generati dall'utente '''root''' in Slackware Linux al contrario di altre distribuzioni. LibreOffice non contempla l'eventualit&agrave; e prevede un controllo per prevenire che il codice sorgente sia compilato da un utente con privilegi elevati quali un amministratore. Per ovviare il problema, il progetto www.slackbuilds.org distribuisce il file ''no-check-if-root.diff'' che rimuove i controlli e consente la compilazione. La patch distribuita nell'archivio del sito slackbuilds.org funziona con la versione 6.4 di LibreOffice, ma '''deve essere adattata per la 7.0.3.1'''. Segue la versione della patch aggiornata alla versione 7.0.3.1 del codice sorgente:
<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>

Rimpiazzare il file ''no-check-if-root.diff'' contenuto nell'archivio con un altro avente medesimo nome, ma contenente le righe riportate pi&ugrave; sopra.

Per comodit&agrave; riporto il collegamento alla [http://www.giustetti.net/resource/patch/14.2current/libreoffice/no-check-if-root-lo7031.tar.gz patch] aggiornata. Una volta scaricata ed estratta dall'archivio, deve essere spostata nella direcrtory contenente lo script SlackBuild '''LibreOffice.SlackBuild''', sovrascrivendo i file ''no-check-if-root.diff'' ivi localizzato.

&Egrave; possibile verificare la consistenza dell'archivio scaricato ricalcolando i checksum:
<syntaxhighlight lang="bash">
md5: 8d2ebf2aad015833692a2091a5310a30
SHA512: be3cb2d237b1991e978186c1dcab837887b5ff31c1ee8a98c14d652a673ac764fc5efff83726ddf459a245bc205951f9d7bf8717e6268c9b36da59a9fb042796
</syntaxhighlight>

=== Script di Compilazione ===
Lo [http://www.slackbuilds.org/repository/14.2/office/LibreOffice/ script di compilazione di LibreOffice] deve essere aggiornato seguendo le istruzioni [[compilare_libreoffice_per_slackware#Script_di_Compilazione | dell'articolo precedente]]. Inoltre devono essere aggiunte delle nuove righe appositamente per '''la versione 10 di gcc''', il compilatore C:
<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>

La correzione &egrave; stata segnalata sia da Alien Bob, sul suo blog, che dai membri del forum www.slacky.it. Ringrazio entrambi per la dritta.

Per comodit&agrave; riporto il collegamento all'intero [http://www.giustetti.net/resource/slackbuild/libreoffice-7.0.3.1/LibreOffice.SlackBuild.gz file SlackBuild] aggiornato. Una volta scaricato e decompresso lo script, bisogna sostituirlo a quello presente nell'archivio distribuito dal sito www.slackbuilds.org.

Scaricarlo con il comando:
<syntaxhighlight lang="bash">
wget http://www.giustetti.net/resource/slackbuild/libreoffice-7.0.3.1/LibreOffice.SlackBuild.gz
</syntaxhighlight>

Verificarne l'integrit&agrave; ricalcolando i checksum:
<syntaxhighlight lang="bash">
md5: 296dd03a782f0cafc2d366554186a35c
SHA512: 65af0d178abe33642c785886a631098b97c204a6a4deec101b4c7dd3f9e0b18e45d24451b320a6d1676459e4bab0e6ab8338097b2545baa95375e475b185644b
</syntaxhighlight>

Decomprimerlo con il comando:
<syntaxhighlight lang="bash">
gunzip ./LibreOffice.SlackBuild.gz
</syntaxhighlight>

Assegnare permessi di esecuzione
<syntaxhighlight lang="bash">
chmod u+x ./LibreOffice.SlackBuild
</syntaxhighlight>

Sovrascrivere il file originale e lanciare la compilazione con il comando:
<syntaxhighlight lang="bash">
sh ./LibreOffice.SlackBuild
</syntaxhighlight>

Per cortesia non richiedere supporto all'autore originale per la versione dello script modificata da me.

=== File .desktop ===
I file con estensione ''.desktop'' vengono utilizzati per registrare i programmi installati sul sistema operativo nei men&ugrave; delle interfacce grafiche come '''Gnome''', '''KDE''', '''TDE''' o '''XFCE'''. LibreOffice include molti programmi con funzioni diverse: '''writer''', per scrivere testi, '''calc''', per creare fogli di calcolo, '''draw''', per la grafica vettoriale e cos&igrave; via. Le voci dei men&ugrave; sono molto comode per avviare i programmi senza doverli richiamare attraverso la riga di comando. Lo script da me modificato salva i collegamenti nella directory ''/opt'' assieme alle librerie, agli eseguibili ed alle altre risorse, ma le interfacce grafiche li cercano nella directory ''/usr'' di conseguenza le voci relative non compaiono nei men&ugrave; di avvio di alcuna interfaccia. Per ovviare al problema &egrave; possibile agire in tre modi:
# Copiare i file, spostarli o creare dei collegamenti nella directory ''/usr/share/applications''.
# Ricompilare LibreOffice utilizzando ''/usr'' invece di ''/opt'' come cartella principale.
# Modificare lo script SlackBuild di compilazione aggiungendo i comandi necessari a spostare i file ''.desktop'' nella cartella opportuna in fase di creazione del pacchetto.
Nel primo caso bisogna ricordarsi di rimuovere anche i file o i collegamenti quando si disinstalla LibreOffice, per non lasciare cadaveri in giro per il file system. La seconda soluzione &egrave; quella adottata dalla maggioranza delle distribuzioni e ha come risultato di riempire un'unica directory con una quantit&agrave; spropositata di programmi, librerie, eseguibili, ecc. L'ultima soluzione &egrave; quella ottimale secondo me. Quando i file sono organizzati correttamente nel pacchetto, la loro gestione &egrave; demandata ai programmi di amministrazione per cui non si incorre nei problemi causati dalla prima quando si disinstalla il pacchetto.

Si ringrazia Mr. Ananda Murthy per la segnalazione.


== CONCLUSIONI ==

Nel presente articolo &egrave; stata nuovamente affrontata la compilazione di una versione recente di LibreOffice su di un Raspberry Pi 4. L'aggiornamento della distribuzione Slackware Arm ha, infatti, reso inutilizzabili le vecchie versioni del programma e ha costretto a eseguire l'installazione di una versione pi&ugrave; recente. Sono incluse tutte le modifiche apportate agli script istituzionali, i pacchetti collegati installati e gli accorgimenti adottati per portare a buon fine l'operazione. Si includono inoltre copie della patch e del file di compilazione modificati.


Per commenti, consigli, domande inviate una e-mail all'indirizzo ''studiosg [chiocciola] giustetti [punto] net''.


Link esterni

----

* [https://it.libreoffice.org/ Home page di LibreOffice]
* [https://slacky.eu/ Sito italiano dedicato a Slackware]
* [http://www.slackware.com Home page di Slackware (En)]
* [http://arm.slackware.com Slackware Linux per piattaforma ARM (En)]
* [http://sarpi.fatdog.eu/index.php?p=rpi4getcurrent Pacchetti semiufficiali per SlackwareARM su Raspberry Pi 4 (En)]

----

{{footer_it | link_page=build_libreoffice_for_slackware_202102}}