Compilare libreoffice per slackware 202102

Revision as of 12:06, 21 March 2022 by Wikiuser (talk | contribs)

Benvenuti nella pagina Wiki di Simone Giustetti.


Lingue: English - Italiano


Compilare una Versione Recente di LibreOffice per Slackware Linux

In un mio 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 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 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 OpenJDK versione 8 messo a disposizione dal progetto 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 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:

   unset UNO_PATH
   unset URE_BOOTSTRAP

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à 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:

   --- 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

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

Per comodità riporto il collegamento alla 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.

È possibile verificare la consistenza dell'archivio scaricato ricalcolando i checksum:

   md5: 8d2ebf2aad015833692a2091a5310a30
   SHA512: be3cb2d237b1991e978186c1dcab837887b5ff31c1ee8a98c14d652a673ac764fc5efff83726ddf459a245bc205951f9d7bf8717e6268c9b36da59a9fb042796

Script di Compilazione

Lo script di compilazione di LibreOffice deve essere aggiornato seguendo le istruzioni dell'articolo precedente. Inoltre devono essere aggiunte delle nuove righe appositamente per la versione 10 di gcc, il compilatore C:

   # 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/'

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

Per comodità riporto il collegamento all'intero 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:

   wget http://www.giustetti.net/resource/slackbuild/libreoffice-7.0.3.1/LibreOffice.SlackBuild.gz

Verificarne l'integrità ricalcolando i checksum:

   md5: 296dd03a782f0cafc2d366554186a35c
   SHA512: 65af0d178abe33642c785886a631098b97c204a6a4deec101b4c7dd3f9e0b18e45d24451b320a6d1676459e4bab0e6ab8338097b2545baa95375e475b185644b

Decomprimerlo con il comando:

   gunzip ./LibreOffice.SlackBuild.gz

Assegnare permessi di esecuzione

   chmod u+x ./LibreOffice.SlackBuild

Sovrascrivere il file originale e lanciare la compilazione con il comando:

   sh ./LibreOffice.SlackBuild

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ù 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ì via. Le voci dei menù 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ù di avvio di alcuna interfaccia. Per ovviare al problema è possibile agire in tre modi:

  1. Copiare i file, spostarli o creare dei collegamenti nella directory /usr/share/applications.
  2. Ricompilare LibreOffice utilizzando /usr invece di /opt come cartella principale.
  3. 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 è quella adottata dalla maggioranza delle distribuzioni e ha come risultato di riempire un'unica directory con una quantità spropositata di programmi, librerie, eseguibili, ecc. L'ultima soluzione è quella ottimale secondo me. Quando i file sono organizzati correttamente nel pacchetto, la loro gestione è 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 è 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ù 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





Lingue: English - Italiano