Difference between revisions of "Compilare libreoffice per slackware"

From Studiosg
Jump to navigationJump to search
(Corretto proseguo in prosieguo)
 
Line 5: Line 5:
 
Gli utenti Slackware non dispongono di pacchetti precompilati di [https://www.libreoffice.net LibreOffice]: una celebre suite di programmi da ufficio che comprende un word processor, un foglio di calcolo, un programma per realizzare presentazioni e non ultimo un'applicazione per interfacciarsi con database relazionali. Tutti strumenti divenuti indispensabili sia per l'utenza domestica che per quella professionale. Sul sito [https://www.slackbuilds.org www.slackbuilds.org] è possibile reperire alcuni script che consentono di [http://www.slackbuilds.org/repository/14.2/office/LibreOffice/ compilare libreOffice] a partire dal codice sorgente, oppure di convertire il [http://www.slackbuilds.org/repository/14.2/office/libreoffice/ programma], la [http://www.slackbuilds.org/repository/14.2/office/libreoffice-helppack/ guida in linea] ed i [http://www.slackbuilds.org/repository/14.2/office/libreoffice-langpack/ pacchetti di localizzazione] per lingue diverse dall'inglese a partire dai pacchetti RPM ufficiali.
 
Gli utenti Slackware non dispongono di pacchetti precompilati di [https://www.libreoffice.net LibreOffice]: una celebre suite di programmi da ufficio che comprende un word processor, un foglio di calcolo, un programma per realizzare presentazioni e non ultimo un'applicazione per interfacciarsi con database relazionali. Tutti strumenti divenuti indispensabili sia per l'utenza domestica che per quella professionale. Sul sito [https://www.slackbuilds.org www.slackbuilds.org] è possibile reperire alcuni script che consentono di [http://www.slackbuilds.org/repository/14.2/office/LibreOffice/ compilare libreOffice] a partire dal codice sorgente, oppure di convertire il [http://www.slackbuilds.org/repository/14.2/office/libreoffice/ programma], la [http://www.slackbuilds.org/repository/14.2/office/libreoffice-helppack/ guida in linea] ed i [http://www.slackbuilds.org/repository/14.2/office/libreoffice-langpack/ pacchetti di localizzazione] per lingue diverse dall'inglese a partire dai pacchetti RPM ufficiali.
  
La seconda soluzione risulta ovviamente più comoda e rapida in quanto non richiede di compilare tutto da zero, ma si limita a eseguire una conversione di formato dei pacchetti. Purtroppo ha il difetto di supportare solo le architetture hardware più diffuse: '''Amd64''' e '''ix86'''. Chi come me utilizza quotidianamente macchine basate su architettura '''Arm''', come il '''Raspberry Pi''', non ha altra scelta se non quella di compilare l'intera suite a partire dal codice sorgente. Preparare i pacchetti è un compito lineare e tutto sommato semplice a patto di organizzarsi e pianificare in anticipo per preparare le risorse necessarie, le dipendenze e quant'altro. Durante il mio primo tentativo sono andato allo sbaraglio ed ho conseguentemente fallito l'obiettivo. Nel proseguo dell'articolo espongo alcune raccomandazioni che potrebbero risultare utili per evitare errori a chi si accingesse nell'impresa.
+
La seconda soluzione risulta ovviamente più comoda e rapida in quanto non richiede di compilare tutto da zero, ma si limita a eseguire una conversione di formato dei pacchetti. Purtroppo ha il difetto di supportare solo le architetture hardware più diffuse: '''Amd64''' e '''ix86'''. Chi come me utilizza quotidianamente macchine basate su architettura '''Arm''', come il '''Raspberry Pi''', non ha altra scelta se non quella di compilare l'intera suite a partire dal codice sorgente. Preparare i pacchetti è un compito lineare e tutto sommato semplice a patto di organizzarsi e pianificare in anticipo per preparare le risorse necessarie, le dipendenze e quant'altro. Durante il mio primo tentativo sono andato allo sbaraglio ed ho conseguentemente fallito l'obiettivo. Nel prosieguo dell'articolo espongo alcune raccomandazioni che potrebbero risultare utili per evitare errori a chi si accingesse nell'impresa.
  
 
=== Ambiente di Sviluppo ===
 
=== Ambiente di Sviluppo ===

Latest revision as of 13:08, 2 May 2022

Benvenuti nella pagina Wiki di Simone Giustetti.


Lingue: English - Italiano


Compilare LibreOffice per Slackware Linux

Gli utenti Slackware non dispongono di pacchetti precompilati di LibreOffice: una celebre suite di programmi da ufficio che comprende un word processor, un foglio di calcolo, un programma per realizzare presentazioni e non ultimo un'applicazione per interfacciarsi con database relazionali. Tutti strumenti divenuti indispensabili sia per l'utenza domestica che per quella professionale. Sul sito www.slackbuilds.org è possibile reperire alcuni script che consentono di compilare libreOffice a partire dal codice sorgente, oppure di convertire il programma, la guida in linea ed i pacchetti di localizzazione per lingue diverse dall'inglese a partire dai pacchetti RPM ufficiali.

La seconda soluzione risulta ovviamente più comoda e rapida in quanto non richiede di compilare tutto da zero, ma si limita a eseguire una conversione di formato dei pacchetti. Purtroppo ha il difetto di supportare solo le architetture hardware più diffuse: Amd64 e ix86. Chi come me utilizza quotidianamente macchine basate su architettura Arm, come il Raspberry Pi, non ha altra scelta se non quella di compilare l'intera suite a partire dal codice sorgente. Preparare i pacchetti è un compito lineare e tutto sommato semplice a patto di organizzarsi e pianificare in anticipo per preparare le risorse necessarie, le dipendenze e quant'altro. Durante il mio primo tentativo sono andato allo sbaraglio ed ho conseguentemente fallito l'obiettivo. Nel prosieguo dell'articolo espongo alcune raccomandazioni che potrebbero risultare utili per evitare errori a chi si accingesse nell'impresa.

Ambiente di Sviluppo

Ho usato un Raspberry Pi 4 con 4 Giga Byte di memoria RAM per compilare LibreOffice. Modelli con una quantità inferiore di memoria o il Raspberry Pi 3 sono in grado di portare a termine l'operazione, ma i tempi di compilazione si dilatano in proporzione alla differenza di risorse. Come distribuzione ho installato Slackware 14.2 current per architettura Arm. I binari ottenuti non saranno utilizzabili su altre versioni della distribuzione perchè current, ossia la versione 15.0 beta, abilita il supporto hardware per i numeri a virgola mobile, mentre tutte le versioni precedenti della distribuzione fanno ricorso all'emulazione software. I pacchetti della distribuzione erano aggiornati all'ultima versione disponibile al momento di eseguire l'attività. Tenuto conto dello stato di beta e la conseguente frequenza con cui sono rilasciati gli aggiornamenti, l'ambiente è sicuramente obsoleto al momento della stesura del presente documento e sussisteranno differenze con un'installazione più recente.

La versione di LibreOffice prescelta è 6.2.8.2. Per la stessa esiste un archivio contenete il codice sorgente di tutti i prerequisiti e le librerie. Usare l'archivio riduce di molto la complessità dell'operazione in quanto sgrava dal compito di compilare ed installare sul sistema operativo una notevole mole di software opzionale. Esiste un archivio per una versione più recente di LibreOffice: libreoffice-6.4.1.2-srcs.tar.xz, ma il sito che lo ospita lo classifica come insicuro perchè potenzialmente affetto da malware. Ho preferito ignorarlo onde non complicare ulteriormente l'attività.

Aggiornamento: Recentemente è stata aggiornata la versione di Python 3 distribuita con Slackware Arm 14.2 current passando dalla 3.8.1 alla 3.8.2. Con la nuova versione la compilazione di LibreOffice 6.2.8.2 fallisce durante la preparazione delle librerie PyUno, che contengono i collegamenti necessari per utilizzare Python in congiunzione con LibreOffice. Per ovviare il problema sono passato alla versione 6.4.1.2 che non sembra risentire del problema.

Infine sottolineo che ho scelto di installare LibreOffice nella directory /opt invece di /usr, impostata nello script SlackBuild reperibile sul sito www.slackbuilds.org. Mi dispiace, ma ho una tendenza compulsiva a mettere le cose al posto giusto anche quando non sia il più comodo.

Prerequisiti

Il requisito fondamentale per poter compilare LibreOffice consiste in una notevole disponibilità di spazio sul disco. Durante il mio primo tentativo ho pensato erroneamente che 5 Giga Byte potessero bastare. La compilazione è fallita dopo aver saturato il file system /tmp al 100 %. Durante il secondo tentativo ho liberato 20 Giga Byte di spazio e la quantità è stata sufficiente per giungere a conclusione. I file generati durante l'attività ammontano ad oltre 14 Giga Byte di spazio occupato.

La seconda condizione fondamentale consiste nella disponibilità di tempo. Se non aveste tempo da dedicare alla compilazione, rinunciate subito. Produrre i pacchetti richiede molte ore di lavoro / compilazione con ovvie ripercussioni sulle prestazioni della macchina impiegata.

Il terzo punto da affrontare consiste nella installazione delle molte librerie richieste dal codice sorgente per una compilazione completa. Un progetto complesso ed esteso come LibreOffice include numerose librerie aventi lo scopo di ampliarne le funzionalità, supportare il maggior numero di formati per documenti possibile e di meglio integrarlo con il sistema. Assieme all'archivio che contiene il codice sorgente di LibreOffice ne viene distribuito un secondo che comprende una versione di tutte le librerie utilizzate. È ovviamente possibile scaricare le librerie per compilarle esplicitamente selezionando la versione ed impostando i parametri di configurazione preferiti. Nel caso trovasse librerie di sistema, la procedura di compilazione di LibreOffice esclude automaticamente quelle incluse nel secondo archivio ed utilizza quelle già installate. L'uso delle librerie di sistema riduce sensibilmente la durata del tempo di compilazione, ma rende la presenza delle librerie obbligatoria per ogni successivo aggiornamento della suite di programmi. Durante i miei tentativi ho utilizzato le librerie incluse nel codice sorgente di LibreOffice a meno che:

  • La versione non fosse afflitta da errori o bachi noti e risolti in rilasci successivi.
  • La libreria non andasse in conflitto con altre dipendenze installate.
  • La libreria non causasse errori durante la procedura di compilazione con conseguente fallimento dell'intera operazione.

Di seguito le librerie ed i prerequisiti sono elencati in ordine alfabetico.

Apache-ant

Si tratta di un build system ossia di un programma utilizzato per compilarne altri. Può essere considerato un'alternativa al classico comando make. Apache Ant è scritto in Java ed è pertanto in grado di girare su qualsiasi architettura dotata di una macchina virtuale Java oppure di un JDK funzionante. Cercate più sotto le istruzioni per installare un JDK su Slackware per architettura Arm.

Non esiste un pacchetto precompilato di Apache-ant per Slackware, ma è comunque disponibile uno script di compilazione distribuito dal sito www.slackbuilds.org che permette di produrre un pacchetto aggiornato del programma.

Apache-ant non è incluso tra le librerie presenti nel codice sorgente di LibreOffice per cui deve essere sempre compilato a se.

Avahi

Avahi è una implementazione del servizio di Zeroconf (configurazione zero) che permette di assemblare una rete basata sui protocolli TCP/IP automaticamente, senza alcuna opera di configurazione, solo collegando gli apparati tra loro. Il demone ha inoltre lo scopo di salvare in cache i risultati delle scansioni eseguite in modo da minimizzare il traffico di rete. Si tratta di una tecnologia molto diffusa in ambito Apple MacOS X, disponibile anche per Linux ed altri sistemi operativi. LibreOffice utilizza Avahi ad esempio per verificare la congruenza dei collegamenti inseriti in un documento di testo ed accertarsi che puntino a risorse realmente esistenti.

Non esiste un pacchetto precompilato di Avahi per Slackware dato che la distribuzione non lo include nel software presente in ogni rilascio. Esiste comunque uno script di compilazione distribuito dal sito www.slackbuilds.org che semplifica notevolmente la produzione di un pacchetto funzionante.

Avahi è una dipendenza opzionale anche di altri progetti come Trinity Desktop Environement. Ipotizzando che vi interessi installare quest'ultimo ed utilizzarlo come interfaccia grafica predefinita, si consiglia la compilazione di Avahi come pacchetto a se stante in modo da non legarlo alla presenza di LibreOffice.

Avahi richiede come dipendenza la libreria Libdaemon che deve pertanto essere installata sul sistema. In questa stessa pagina sono riportate anche le istruzioni relative alla compilazione di Libdaemon, che non è un pacchetto incluso nei rilasci di Slackware Linux.

Doxygen

Doxygen è un programma che genera la documentazione per un progetto software direttamente dai commenti inclusi nel codice sorgente ed opportunamente formattati. La documentazione prodotta può essere salvata in diversi formati tra cui HTML, LaTeX, pagine man, PostScript o pdf. Durante la compilazione dei test di LibreOffice, doxygen rende un errore di memoria (segmentation fault) con conseguente fallimento della produzione di documenti e dell'intera procedura. Si tratta di un problema noto introdotto in versioni recenti del programma e documentato diverse volte nel file changelog di Slackware Linux, di cui riporto alcuni estratti:

  +--------------------------+
  Fri Jan  4 21:44:44 UTC 2019
  a/hwdata-0.319-noarch-1.txz:  Upgraded.
  d/doxygen-1.8.14-x86_64-3.txz:  Upgraded.
     Reverted (for now) to avoid segfault in doxygen-1.8.15.
  
  +--------------------------+
  Sun Jun 30 22:45:12 UTC 2019
  d/Cython-0.29.11-x86_64-1.txz:  Upgraded.
  t/texlive-2019.190626-x86_64-2.txz:  Rebuilt.
     Patched tabu.sty to fix compiling doxygen.
     Thanks to Johannes Schoepfer and nobodino.

quando ho effettuato i primi test SlackwareArm non aveva ancora adottato la versione 1.8.16, nè era regredita alla 1.18.4, apparentemente non affetta dal problema, ed era pertanto necessario compilarla a mano. Il software richiede alcune dipendenze:

  • fig2dev-3.2.7b-arm-1.txz.
  • qt-4.8.7-arm-10.txz.
  • texlive-2019.190626-arm-4.txz.
  • xfig-3.2.7b-arm-1.txz.

tutte disponibili tra i pacchetti standard della distribuzione. Uno script di compilazione ottimizzato per SlackwareArm è reperibile sul sito del progetto al seguente indirizzo: ftp://mirror.slackbuilds.org/pub/slackwarearm/slackwarearm-current/source/d/doxygen/doxygen.SlackBuild . La compilazione fallisce durante la scrittura della documentazione. L'errore sembra essere causato dalla creazione del manuale in formato *.pdf. La creazione dello stesso può essere saltata modificando lo script aggiungendo la riga:

   -Dbuild_doc=no \

tra le opzioni di configurazione e commentando invece la riga:

   make $NUMJOBS docs || make docs || exit 1

aggiungendo un diesis ("#") come primo carattere:

   # make $NUMJOBS docs || make docs || exit 1

Lo script SlackBuild modificato genera un pacchetto funzionante, che può essere utilizzato per compilare LibreOffice.

Aggiornamento: Al momento di scrivere l'articolo SlackwareArm 14.2 current include la versione 1.8.17 di doxygen, che non sembra afflitta dal problema della formattazione dei documenti per cui si consiglia di aggiornare la distribuzione.

LibDaemon

LibDaemon è un requisito per compilare Avahi per cui deve essere installata prima dello stesso. Si tratta di una libreria molto leggera scritta in linguaggio C ed avente il compito di semplificare lo sviluppo di demoni in grado di girare sui sistemi operativi della famiglia UNIX.

Non esiste un pacchetto ufficiale di LibDaemon per Slackware dato che la distribuzione Linux non include la libreria tra quelle distribuite con ogni rilascio. Esiste comunque uno script di compilazione distribuito dal sito www.slackbuilds.org. Siete invitati a scaricare tale script ed il codice sorgente della libreria per procedere alla compilazione manuale ed alla successiva installazione. L'operazione è molto semplice e richiede pochi minuti di lavoro.

LibFreehand

LibFreehand è una libreria che aggiunge il supporto ai file generati da FreeHand un programma di Adobe / Macromedia. Purtroppo la versione inclusa nel secondo archivio del codice sorgente, quello dedicato ai prerequisiti, non compila. L'operazione fallisce rendendo un errore di sintassi. Essendo complicato cercare di risolvere un errore di una piccola parte di un grosso archivio di cui non sia possibile eseguire la compilazione diretta, ho preferito procedere installando separatamente una versione recente della libreria.

La versione completa della libreria presenta il medesimo problema. Probabilmente una svista aggiunta durante una modifica al codice sorgente del progetto. Lo script disponibile sul sito www.slackbuilds.org si blocca rendendo il medesimo messaggio di errore:

  libfreehand_utils.cpp: In function âvoid libfreehand::_appendUTF16(librevenge::RVNGString&, std::vector<short unsigned int>&)â:
  libfreehand_utils.cpp:166:5: error: expected â;â before âunsignedâ
  166 |     unsigned char outbuf[U8_MAX_LENGTH+1];
        |     ^10:35, 27 April 2020 (UTC)~~
  make[4]: *** [Makefile:567: libfreehand_utils.lo] Error 1

Per risolvere il problema ed ottenere un pacchetto installabile della libreria ho preparato la seguente patch:

   *** src/lib/libfreehand_utils.cpp       2020-04-12 20:20:37.853604892 +0200
   --- src/lib/libfreehand_utils.cpp       2020-04-12 20:21:51.220597886 +0200
   ***************
   *** 162,168 ****
      while (j < length)
      {
         UChar32 c;
   !     U16_NEXT(s, j, length, c)
         unsigned char outbuf[U8_MAX_LENGTH+1];
         int i = 0;
         U8_APPEND_UNSAFE(&outbuf[0], i, c);
   --- 162,168 ----
      while (j < length)
      {
         UChar32 c;
   !     U16_NEXT(s, j, length, c);
         unsigned char outbuf[U8_MAX_LENGTH+1];
         int i = 0;
         U8_APPEND_UNSAFE(&outbuf[0], i, c);

Il testo deve essere copiato in un file chiamato libfreehand_utils.patch localizzato nella medesima directory che contiene lo script libfreehand.SlackBuild. Lo script stesso deve essere modificato aggiungendo due righe che richiamino la patch dopo aver decompresso l'archivio del codice sorgente in modo da applicarla e correggere l'errore di sintassi. Le righe da aggiungere allo script sono:

   # Apply patch for libfreehand_utils
   patch -p0 -i ${CWD}"/libfreehand_utils.patch"

Un archivio contenete la patch e lo script SlackBuild corretto può essere scaricato dal seguente collegamento.

  • md5: 45cc05f1acb501eabfbad458e2fefe48
  • SHA512: c914b28ba49c6f14d65aa48a99ede120e697305be30969432a286beabfc25577922ac766a13470ce0b85a34b1f5498b703734a60a8b365de66ae6e5301dc3eb8

Dopo aver aggiornato lo script, la compilazione avverrà senza intoppi producendo l'agognato pacchetto che potrà essere installato sul sistema operativo.

OpenJDK

Si tratta di un Software Development Kit per il linguaggio Java ossia di un insieme di librerie necessarie per sviluppare programmi ed applicazioni. Oltre che per scrivere nuovo software, il JDK serve per compilare eventuali dipendenze, estensioni e componenti di LibreOffice scritti in Java.

Nonostante uno script sia distribuito dal solito sito www.slackbuilds.org, la compilazione di un JDK funzionante è un'attività lunga e tediosa. Come il responsabile dello script sottolinea nella descrizione dello stesso, la procedura spesso fallisce rendendo un errore non sistematico e ripetere l'operazione diverse volte di seguito sembra l'unica soluzione del problema. Sempre il responsabile conferma che solo un tentativo su 5 si conclude con successo. Un altro punto a sfavore della compilazione consiste nel fatto che un JDK funzionante deve essere installato per compilarne un altro. La versione informatica del problema dell'uovo e della gallina. Il progetto Sarpi mette a disposizione un pacchetto per la versione 8 di OpenJDK. Io ho preferito installare quello ritenendo che, essendo più recente, non avrebbe causato conflitti con LibreOffice. I successivi tentativi sembrano avermi dato ragione perciò consiglio a tutti di installare i pacchetti del progetto Sarpi.

Perl-Archive-Zip

Perl-Archive-Zip è una estensione del linguaggio Perl usata per leggere e scrivere archivi compressi. L'estensione non è compresa nei rilasci ufficiali di Slackware Linux ed il relativo pacchetto deve essere compilato ed installato appositamente. Il sito www.slackbuilds.org mette a disposizione uno script di compilazione per eseguire l'installazione.

Neanche LibreOffice include Perl-Archive-Zip nel codice sorgente delle dipendenze perciò la libreria deve essere sempre compilata ed installata a se stante.

Python 3

Python 3 è la versione più recente del famoso linguaggio di programmazione. Slackware 14.2 current include Python 3 tra i sui pacchetti base per cui non serve alcuna azione per abilitarlo.

Rimuovere le Versioni Installate di LibreOffice

È necessario rimuovere le eventuali versioni installate di LibreOffice prima di avviare la compilazione altrimenti l'operazione fallirà durante la preparazione delle gallerie di immagini distribuite con la suite. I messaggi di errore sono criptici e lamentano un errore nel Makefile ./solenv/gbuild/Gallery.mk nel mio caso alla riga 55:

  "/tmp/SBo/libreoffice-6.4.1.2/solenv/gbuild/Gallery.mk:55: recipe for target
     '/tmp/SBo/libreoffice-6.4.1.2/workdir/Gallery/arrows.done' failed
   make[1]: *** [/tmp/SBo/libreoffice-6.4.1.2/workdir/Gallery/arrows.done] Error 1"

Ma tale numero può variare. Solitamente il fallimento riguarda la prima galleria, ma capita anche che quella venga gestita con successo e fallisca invece la preparazione di una successiva. L'errore si presenta anche utilizzando un livello di parallelismo pari a 1. Il problema è noto da tempo e fonte di lunghe discussioni sui forum. La causa potenziale sembra risiedere nell'uso da parte della procedura di compilazione di alcuni programmi installati piuttosto che in quelli compilati ex novo. L'unica soluzione consiste proprio nella rimozione delle versioni installate e nella successiva pulizia di alcune variabili di ambiente impostate dallo script /etc/profile.d/libreoffice.sh quando si accede al PC. Se le variabili non fossero pulite con i comandi

   unset UNO_PATH
   unset URE_BOOTSTRAP

prima di lanciare lo script SlackBuild, questo fallirebbe rendendo un errore simile a:

  "Bootstrap exception 'component context fails to supply service com.sun.star.ucb.UniversalContentBroker of type
      com.sun.star.ucb.XUniversalContentBroker'"

seguito da quelli relativi alle gallerie di cui un esempio e' stato fornito più sopra. In alternativa è possibile eseguire un riavvio subito dopo aver disinstallato LibreOffice e compilare la nuova versione subito dopo.

Riassumendo: prima di avviare la compilazione di LibreOffice è necessario verificare che sul sistema non sia installata una versione precedente:

  ls -la /var/log/packages/*ffice*
  -rw-r--r-- 1 root root 3355381 Jan  1  1970 /var/log/packages/LibreOffice-6.2.8.2-armv7l-1_SBo

Eventualmente disinstallare tale versione:

  removepkg LibreOffice-6.2.8.2-armv7l-1_SBo

Pulire alcune variabili di ambiente

   unset UNO_PATH
   unset URE_BOOTSTRAP

Oppure riavviare la macchina.

Lanciare la compilazione di LibreOffice.

  sh ./LibreOffice.SlackBuild

Script di Compilazione

Come accennato in precedenza, ho modificato lo script di compilazione di LibreOffice adattandolo alla mia abituale organizzazione dei file in un file system Linux. In particolare:

  • Ho riordinato la definizione delle variabili per migliorarne la leggibilità.
  • Ho aggiunto la variabile PREFIX per permettere di installare in una directory a piacere invece che imporre /usr:
   PREFIX="/opt/${SRCNAM}${SHORT_VERSION}"

Nel caso di LibreOffice 6.4.1.2 ad esempio, i programmi verranno installati nella directory /opt/libreoffice6.4.

  • Ho aggiornato le righe che eseguono il riconoscimento dell'architettura includendo esplicitamente armv7l ed il conseguente supporto hardware ai numeri con virgola mobile:
   # Determine target architecture
   if [ -z "${MARCH}" ]; then
      MARCH=`uname -m`
   fi
   if [ -z "${ARCH}" ]; then
      case "${MARCH}" in
         i?86)
            export ARCH=i486
         ;;
         armv7l)
            export ARCH=${MARCH}
         ;;
         arm*)
            export ARCH=arm
         ;;
         *)
            export ARCH=${MARCH}
         ;;
      esac
   fi
   
   echo -e "\E[0;32m+-----------------------+\E[0;0m"
   echo -e "\E[0;32m|     ARCH=${ARCH}      |\E[0;0m"
   echo -e "\E[0;32m+-----------------------+\E[0;0m"
   
   case "${ARCH}" in
      arm)
         # Use Embedded Application Binary Interface. EABI was created as a common
         # binary interface that should permit code compiled with a specific
         # toolchain/compiler to be linked to projects compiled with another one.
         # arm-slackware-linux-gnueabi and arm-slackware-linux are different
         # targets.
         BUILD_ARCH=${ARCH}"-slackware-linux-gnueabi"
         SLKCFLAGS="-O2"; SLKLDFLAGS=""; LIBDIRSUFFIX=""
      ;;
      armv7l)
         BUILD_ARCH=${ARCH}"-slackware-linux-gnueabihf"
         SLKCFLAGS="-O2"; SLKLDFLAGS=""; LIBDIRSUFFIX=""
      ;;
      i486)
         BUILD_ARCH=${ARCH}"-slackware-linux"
         SLKCFLAGS="-O2 -march=i486 -mtune=i686"; SLKLDFLAGS="-L/usr/lib -ldl"; LIBDIRSUFFIX=""
      ;;
      i686)
         BUILD_ARCH=${ARCH}"-slackware-linux"
         SLKCFLAGS="-O2 -march=i686 -mtune=i686"; SLKLDFLAGS="-L/usr/lib -ldl"; LIBDIRSUFFIX=""
      ;;
      powerpc)
         BUILD_ARCH=${ARCH}"-slackware-linux"
         SLKCFLAGS="-O2"; SLKLDFLAGS=""; LIBDIRSUFFIX=""
      ;;
      s390)
         BUILD_ARCH=${ARCH}"-slackware-linux"
         SLKCFLAGS="-O2"; SLKLDFLAGS=""; LIBDIRSUFFIX=""
      ;;
      x86_64)
         BUILD_ARCH=${ARCH}"-slackware-linux"
         SLKCFLAGS="-O2 -fPIC"; SLKLDFLAGS="-L/usr/lib64"; LIBDIRSUFFIX="64"
      ;;
   esac
  • Ho aggiornato la riga che esegue la ricerca ed identificazione del JDK installato come segue:
   JAVA=${JAVA:-jdk}

Una modifica necessaria perchè il JDK 8 messo a disposizione dal progetto Sarpi venga riconosciuto correttamente. Il JDK include infatti lo script di configurazione /etc/profile.d/jdk.sh invece che /etc/profile.d/openjdk8.sh come supposto erroneamente dallo script di compilazione.

  • Ho rimpiazzato la variabile che gestisce la presenza di KDE 4 con una dedicata a KDE 5, che sembra essere diventato l'ambiente grafico predefinito delle versioni recenti di LibreOffice:
   kde5="--enable-kde5" ; [ "${KDE5:-no}" != "yes" ]     && kde5="--disable-kde5"

Le opzioni --enable-kde4 e --disable-kde4 non sembrano essere più supportate e, se impostate, generano errori con LibreOffice 6.4. La stessa variabile è stata quindi sostituita a kde4 nelle righe di configurazione.

  • Le righe di configurazione sono state aggiornate per includere la variabile PREFIX introdotta in precedenza:
   --prefix=${PREFIX}  \
   --mandir=${PREFIX}/man \
   --docdir=${PREFIX}/doc/$PRGNAM-$VERSION \
   --libdir=${PREFIX}/lib$LIBDIRSUFFIX \
  • È stata aggiunta l'opzione di configurazione --without-export-validation all'elenco. La nuova opzione impone di non eseguire i controlli sugli schemi di formato dei file *.odf, *.odt, ecc. Gli schemi non possono più essere distribuiti assieme al codice sorgente per questioni legate alla licenza e sono stati pertanto rimossi dal repository GitHub con la modifica 34dced99c33a97dab86c4538fa267ad4ad4fb41f.
  • La variabile PREFIX ha sostituito il percorso cablato /usr in tutte le istruzioni di configurazione, copia di file, ecc. presenti nella parte finale dello script, dopo le chiamate al comando make.
  • Per ultimo ho imposto il formato txz per il pacchetto al posto del classico tgz. Viste le dimensioni finali del pacchetto risparmiare alcuni megabyte di spazio sul disco non mi dispiace. N.B.: Il risparmio riguarda solo il pacchetto non l'installazione, che comunque richiede di scompattare il contenuto dell'archivio.

In conclusione includo il collegamento ad una patch che applica tutte le modifiche descritte più sopra allo script di compilazione con pochi comandi:

  wget http://www.giustetti.net/resource/patch/14.2current/libreoffice/LibreOffice.SlackBuild.patch.gz
  gunzip ./LibreOffice.SlackBuild.patch.gz
  patch -p0 -i ./LibreOffice.SlackBuild.patch

I comandi devono essere lanciati nella stessa directory che contiene lo script LibreOffice.SlackBuild. La consistenza dell'archivio può essere verificata con i comandi md5sum e sha512sum sfruttando i seguenti valori di confronto:

  • md5: 0cab4839e5c4eed05eec10e6cc642e2b
  • SHA512: 4ff967fa5dadefdc6cd39b52ea47dd99c103659494618519b272803085088b53f397711b95b88b55339a67b96f29e662c4e37070f173962e5014914dcb47761e

Per comodità è incluso anche il collegamento ad una versione dello script SlackBuild modificato: Libreoffice.SlackBuild.gz. Per poter utilizzare lo script dovete:

  • Scaricarlo con il comando:
  wget http://www.giustetti.net/resource/slackbuild/libreoffice-6.4.1.2/LibreOffice.SlackBuild.gz
  • Verificare l'integrità dell'archivio ricalcolando i checksum
  • md5: 60a675277889285137828fd0f20a3a6f
  • SHA512: 60e20e8c79480759bf7182c0d98502233d755c77bdb5ec6b1c9dfd4f9813fa5a93bd93f65ad6ba061823e9323ca28287027ccac3dbcbc5eee6446864d97981cc
  • 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.

Il file contiene una chiara indicazione del fatto che sia stato modificato dal sottoscritto. Ottimisticamente l'autore originale non verrà disturbato per errori che posso aver aggiunto involontariamente allo script.

Post Installazione

Potrebbe capitare che, lanciato immediatamente dopo l'installazione, LibreOffice non parta lamentando l'impossibilità di trovare alcune librerie. Il problema deriva dalla mancata esecuzione dello script di configurazione /etc/profile.d/libreoffice.sh. Per risolvere il problema, lanciare lo script a mano mediante l'istruzione:

  . /etc/profile.d/libreoffice.sh

Oppure riavviare il sistema. Lo script verrà eseguito automaticamente ad autenticazione avvenuta.


CONCLUSIONI

Nel presente articolo è stata descritta la procedura per compilare una versione recente e funzionante di LibreOffice su di un Raspberry Pi 4. Sulla macchina gira un sistema operativo Slackware Linux per architettura Arm con pacchetti adattati esplicitamente per il Raspberry Pi, messi a disposizione dal progetto Sarpi. Sono incluse tutte le correzioni apportate per risolvere i problemi insorti in corso d'opera oltre a numerosi consigli per chi si accingesse ad eseguire la medesima attività in autonomia. Concludendo si ringrazia Christoph Willing per l'ottimo lavoro svolto nel produrre lo script per Slackware 14.2, usato come punto di partenza per le mie personalizzazioni. Si includono inoltre sia sotto forma di patch, che di script completo, tutte le modifiche apportate allo SlackBuild originale.


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


Link esterni





Lingue: English - Italiano