Changes

From Studiosg
Jump to navigationJump to search
Aggiunto nuovo articolo relativo alla compilazione di LibreOffice per Slackware ARM su Raspberry Pi 4
Line 3: Line 3:  
== '''Compilare LibreOffice per Slackware Linux''' ==
 
== '''Compilare LibreOffice per Slackware Linux''' ==
   −
Pagina in costruzione.
+
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.
   −
Per cortesia tornate a visitarci per leggere l'articolo completo.
+
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.
 +
 
 +
=== 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: [https://sourceforge.net/projects/slackbuildsdirectlinks/files/LibreOffice/libreoffice-6.4.1.2-srcs.tar.xz/download 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à.
 +
 
 +
<font color="red">Aggiornamento:</font> Recentemente &egrave; 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 [http://www.slackbuilds.org/repository/14.2/office/LibreOffice/ 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&ugrave; comodo.
 +
 
 +
=== Prerequisiti ===
 +
Il requisito fondamentale per poter compilare LibreOffice consiste in '''una notevole disponibilit&agrave; di spazio sul disco'''. Durante il mio primo tentativo ho pensato erroneamente che 5 Giga Byte potessero bastare. La compilazione &egrave; fallita dopo aver saturato il file system ''/tmp'' al 100 %. Durante il secondo tentativo ho liberato '''20 Giga Byte''' di spazio e la quantit&agrave; &egrave; stata sufficiente per giungere a conclusione. I file generati durante l'attivit&agrave; ammontano ad oltre 14 Giga Byte di spazio occupato.
 +
 
 +
La seconda condizione fondamentale consiste nella disponibilit&agrave; 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&agrave;, 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. &Egrave; 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&agrave; 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&ograve; essere considerato un'alternativa al classico comando '''make'''. Apache Ant &egrave; scritto in Java ed &egrave; pertanto in grado di girare su qualsiasi architettura dotata di una macchina virtuale Java oppure di un JDK funzionante. Cercate pi&ugrave; sotto le istruzioni per installare un JDK su Slackware per architettura Arm.
 +
 
 +
Non esiste un pacchetto precompilato di Apache-ant per Slackware, ma &egrave; comunque disponibile uno script di compilazione distribuito dal sito [http://www.slackbuilds.org/repository/14.2/development/apache-ant/ www.slackbuilds.org] che permette di produrre un pacchetto aggiornato del programma.
 +
 
 +
'''Apache-ant non &egrave; incluso tra le librerie presenti nel codice sorgente di LibreOffice per cui deve essere sempre compilato a se'''.
 +
 
 +
==== Avahi ====
 +
Avahi &egrave; 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 [http://www.slackbuilds.org/repository/14.2/network/avahi/ www.slackbuilds.org] che semplifica notevolmente la produzione di un pacchetto funzionante.
 +
 
 +
Avahi &egrave; 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 &egrave; un pacchetto incluso nei rilasci di Slackware Linux.
 +
 
 +
==== Doxygen ====
 +
'''Doxygen''' &egrave; un programma che genera la documentazione per un progetto software direttamente dai commenti inclusi nel codice sorgente ed opportunamente formattati. La documentazione prodotta pu&ograve; 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&egrave; 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 &egrave; 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&ograve; essere saltata modificando lo script aggiungendo la riga:
 +
<syntaxhighlight lang="bash">
 +
  -Dbuild_doc=no \
 +
</syntaxhighlight>
 +
 
 +
tra le opzioni di configurazione e commentando invece la riga:
 +
<syntaxhighlight lang="bash">
 +
  make $NUMJOBS docs || make docs || exit 1
 +
</syntaxhighlight>
 +
 
 +
aggiungendo un diesis ("#") come primo carattere:
 +
<syntaxhighlight lang="bash">
 +
  # make $NUMJOBS docs || make docs || exit 1
 +
</syntaxhighlight>
 +
 
 +
'''Lo script SlackBuild modificato genera un pacchetto funzionante, che pu&ograve; essere utilizzato per compilare LibreOffice'''.
 +
 
 +
<font color="red">Aggiornamento:</font> 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''' &egrave; 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 [https://slackbuilds.org/repository/14.2/libraries/libdaemon/?search=libdaemon 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 &egrave; molto semplice e richiede pochi minuti di lavoro.
 +
 
 +
==== LibFreehand ====
 +
'''LibFreehand''' &egrave; 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 [https://slackbuilds.org/repository/14.2/libraries/libfreehand/?search=Libfreehand 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:
 +
<syntaxhighlight lang="cpp">
 +
  *** 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);
 +
</syntaxhighlight>
 +
 
 +
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:
 +
<syntaxhighlight lang="bash">
 +
  # Apply patch for libfreehand_utils
 +
  patch -p0 -i ${CWD}"/libfreehand_utils.patch"
 +
</syntaxhighlight>
 +
 
 +
Un archivio contenete la patch e lo script SlackBuild corretto pu&ograve; essere scaricato dal seguente [http://www.giustetti.net/resource/slackbuild/libfreehand-0.1.2/libfreehand_patched.tar.gz collegamento].
 +
* md5: 45cc05f1acb501eabfbad458e2fefe48
 +
* SHA512: c914b28ba49c6f14d65aa48a99ede120e697305be30969432a286beabfc25577922ac766a13470ce0b85a34b1f5498b703734a60a8b365de66ae6e5301dc3eb8
 +
 
 +
Dopo aver aggiornato lo script, la compilazione avverr&agrave; senza intoppi producendo l'agognato pacchetto che potr&agrave; 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 [https://www.slackbuilds.org/repository/14.2/development/openjdk7/ www.slackbuilds.org], la compilazione di un JDK funzionante &egrave; un'attivit&agrave; 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&ugrave; recente, non avrebbe causato conflitti con LibreOffice. I successivi tentativi sembrano avermi dato ragione perci&ograve; consiglio a  tutti di installare [[https://sarpi.fatdog.eu/index.php?p=downloads#142pkg i pacchetti del progetto Sarpi]].
 +
 
 +
==== Perl-Archive-Zip ====
 +
'''Perl-Archive-Zip''' &egrave; una estensione del linguaggio [https://www.perl.org/ Perl] usata per leggere e scrivere archivi compressi. L'estensione non &egrave; compresa nei rilasci ufficiali di Slackware Linux ed il relativo pacchetto deve essere compilato ed installato appositamente. Il sito [https://www.slackbuilds.org/repository/14.2/perl/perl-Archive-Zip/ 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&ograve; la libreria deve essere sempre compilata ed installata a se stante.
 +
 
 +
==== Python 3 ====
 +
Python 3 &egrave; la versione pi&ugrave; 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 ===
 +
&Egrave; '''necessario''' rimuovere le eventuali versioni installate di LibreOffice prima di avviare la compilazione altrimenti l'operazione fallir&agrave; 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&ograve; 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 &egrave; noto da tempo e fonte di lunghe discussioni sui [https://www.linuxquestions.org/questions/slackware-14/unable-to-build-libreoffice-with-sbopkg-4175604297/page2.html 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
 +
<syntaxhighlight lang="bash">
 +
  unset UNO_PATH
 +
  unset URE_BOOTSTRAP
 +
</syntaxhighlight>
 +
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&ugrave; sopra. In alternativa &egrave; possibile eseguire un riavvio subito dopo aver disinstallato LibreOffice e compilare la nuova versione subito dopo.
 +
 
 +
Riassumendo: '''prima di avviare la compilazione di LibreOffice &egrave; 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
 +
<syntaxhighlight lang="bash">
 +
  unset UNO_PATH
 +
  unset URE_BOOTSTRAP
 +
</syntaxhighlight>
 +
 
 +
Oppure riavviare la macchina.
 +
 
 +
Lanciare la compilazione di LibreOffice.
 +
  '''sh''' ./LibreOffice.SlackBuild
 +
 
 +
=== Script di Compilazione ===
 +
Come accennato in precedenza, ho modificato lo [http://www.slackbuilds.org/repository/14.2/office/LibreOffice/ 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&agrave;.
 +
* Ho aggiunto la variabile '''PREFIX''' per permettere di installare in una directory a piacere invece che imporre ''/usr'':
 +
<syntaxhighlight lang="bash">
 +
  PREFIX="/opt/${SRCNAM}${SHORT_VERSION}"
 +
</syntaxhighlight>
 +
 
 +
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''':
 +
<syntaxhighlight lang="bash">
 +
  # 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
 +
</syntaxhighlight>
 +
 
 +
* Ho aggiornato la riga che esegue la ricerca ed identificazione del JDK installato come segue:
 +
<syntaxhighlight lang="bash">
 +
  JAVA=${JAVA:-jdk}
 +
</syntaxhighlight>
 +
 
 +
Una modifica necessaria perch&egrave; 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:
 +
<syntaxhighlight lang="bash">
 +
  kde5="--enable-kde5" ; [ "${KDE5:-no}" != "yes" ]    && kde5="--disable-kde5"
 +
</syntaxhighlight>
 +
 
 +
Le opzioni ''--enable-kde4'' e ''--disable-kde4'' non sembrano essere pi&ugrave; supportate e, se impostate, generano errori con LibreOffice 6.4. La stessa variabile &egrave; stata quindi sostituita a '''kde4''' nelle righe di configurazione.
 +
 
 +
* Le righe di configurazione sono state aggiornate per includere la variabile '''PREFIX''' introdotta in precedenza:
 +
<syntaxhighlight lang="bash">
 +
  --prefix=${PREFIX}  \
 +
  --mandir=${PREFIX}/man \
 +
  --docdir=${PREFIX}/doc/$PRGNAM-$VERSION \
 +
  --libdir=${PREFIX}/lib$LIBDIRSUFFIX \
 +
</syntaxhighlight>
 +
 
 +
* &Egrave; 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&ugrave; 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 [http://www.giustetti.net/resource/patch/14.2current/libreoffice/LibreOffice.SlackBuild.patch.gz patch] che applica tutte le modifiche descritte pi&ugrave; 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&ograve; essere verificata con i comandi '''md5sum''' e '''sha512sum''' sfruttando i seguenti valori di confronto:
 +
* md5: 0cab4839e5c4eed05eec10e6cc642e2b
 +
* SHA512: 4ff967fa5dadefdc6cd39b52ea47dd99c103659494618519b272803085088b53f397711b95b88b55339a67b96f29e662c4e37070f173962e5014914dcb47761e
 +
 
 +
Per comodit&agrave; &egrave; incluso anche il collegamento ad una versione dello script SlackBuild modificato: [http://www.giustetti.net/resource/slackbuild/libreoffice-6.4.1.2/LibreOffice.SlackBuild.gz 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&agrave; dell'archivio ricalcolando i checksum
 +
:* md5: 60a675277889285137828fd0f20a3a6f
 +
:* SHA512: 60e20e8c79480759bf7182c0d98502233d755c77bdb5ec6b1c9dfd4f9813fa5a93bd93f65ad6ba061823e9323ca28287027ccac3dbcbc5eee6446864d97981cc
 +
* Decomprimerlo con il comando:
 +
  '''gunzip''' ./LibreOffice.SlackBuild.patch.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&agrave; 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&agrave; 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&agrave; eseguito automaticamente ad autenticazione avvenuta.
 +
 
 +
 
 +
== CONCLUSIONI ==
 +
 
 +
Nel presente articolo &egrave; 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&agrave; 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.
      Line 16: Line 323:     
* [https://it.libreoffice.org/ Home page di LibreOffice]
 
* [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://www.slackware.com Home page di Slackware (En)]
 
* [http://arm.slackware.com Slackware Linux per piattaforma ARM (En)]
 
* [http://arm.slackware.com Slackware Linux per piattaforma ARM (En)]

Navigation menu