Changes

From Studiosg
Jump to navigationJump to search
Nuovo articolo circa la compilazione di TDE 14.0.1 su Raspberry Pi 2 e SlackwareARM 14.1
Benvenuti nella pagina Wiki di Simone Giustetti.


Lingue: [[En/Trinity_desktop_environment_raspberry_pi_2 |English]] - '''Italiano'''

----

Il '''Raspberry Pi''' &egrave; un computer di dimensioni molto ridotte, occupa una superficie paragonabile ad una carta di credito, e dal costo contenuto, una trentina di Euro, progettato con il fine di '''insegnare la programmazione ai pi&ugrave; giovani'''. La prima versione fu introdotta il 29 Febbraio del 2012 dalla [https://www.raspberrypi.org fondazione Raspberry Pi], che ne cura tuttora lo sviluppo e gestisce gli aggiornamenti. Nel Febbraio del 2015, &egrave; stato rilasciato il primo modello della nuova generazione di Raspberry Pi: Il '''Raspberry Pi 2'''. Una macchina dotata di un processore Quad Core a 900 MHz e 1 Gb di memoria RAM integrata: una potenza di calcolo di tutto rispetto, migliaia di volte superiore alla dotazione dei server che installavo alcuni anni fa. Ci&ograve; conferma come il Raspberry Pi sia ideale per lo sviluppo di progetti complessi ed articolati e che sto diventando veramente vecchio >_< .

'''Raspian''', una versione di '''Debian GNU Linux''' appositamente modificata, &egrave; il sistema operativo ufficialmente supportato e fornito dalla [https://www.raspberrypi.org fondazione Raspberry Pi]. Esiste comunque la possibilit&agrave; di installare altri sistemi operativi sugli apparati. Una qualsiasi distribuzione '''Linux''' compatibile con l''''architettura ARM''', ad esempio '''SlackwareARM 14.1''', girer&agrave; egregiamente sul Rasperry Pi 2 fornendo all'utenza tutte le applicazioni e gli strumenti abitualmente disponibili su un comune PC. Molte applicazioni risultano fluide e reattive, mentre altre perdono nel confronto con le prestazioni di un moderno portatile. Una nota dolente &egrave; rappresentata dall'ambiente desktop '''KDE 4''', che richiede una quantit&agrave; di risorse forse eccessiva per il Raspberry Pi. Una potenziale soluzione consisterebbe nell'impiego di un desktop leggero ad esempio '''XFCE''', ma ci&ograve; comporta rinunciare a molte delle ottime applicazioni integrate in KDE. Una soluzione alternativa alquanto laboriosa, ma decisamente pi&ugrave; soddisfacente consiste nell'installazione di TDE. Il progetto '''Trinity Desktop Environment''' ha lo scopo di continuare lo sviluppo del ramo 3 di KDE migliorando l'esperienza utente e mantenendo aggiornato il supporto hardware. TDE rappresenta un ambiente desktop maturo, ricco di applicazioni e funzionalit&agrave;, decisamente pi&ugrave; leggero di KDE 4 e, come tale, '''meglio indicato per macchine con risorse limitate'''.

Nel proseguo dell'articolo verr&agrave; illustrato come installare la versione 14.0.1 del '''Trinity Desktop Environment''', '''TDE''' in breve, sul Raspberry Pi e SlackwareARM 14.1.


== SlackwareARM sul Raspberry Pi 2 ==

Il primo passo consiste ovviamente nell'installare l'ultima versione disponibile di SlackwareARM sul Raspberry Pi 2. La [https://www.raspberrypi.org fondazione Raspberry Pi] non supporta la distribuzione derivata Slackware, n&egrave; SlackwareARM fornisce supporto per il Raspberry Pi. Non di meno l'operazione non si discosta molto da una normale installazione di Slackware Linux su PC ed in rete &egrave; possibile reperire [http://rpi2.fatdog.eu/index.php?p=installer documentazione] esaustiva in merito. Le poche difformit&agrave; nascono dalle differenze architetturali intercorrenti tra sistemi embedded e personal computer come ad esempio l'assenza di un '''BIOS''', di un lettore '''CD/DVD''' e di altri componenti tipici di un PC.

Prima di procedere sar&agrave; necessario procurarsi:
* Una scheda MicroSD da 16 Gb su cui verr&agrave; installato il sistema operativo.
* Un lettore di schede MicroSD per PC.
* Una pennetta USB da almeno 4 Gb su cui copiare i pacchetti di installazione.
* Mouse USB, tastiera USB, monitor, cavi e tutto il necessario per il funzionamento del Raspberry Pi.

=== Preparazione della Scheda MicroSD ===
Le operazioni di installazione devono essere eseguite da un utente con privilegi elevati quale '''root'''. Salvo dove diversamente specificato nel proseguo dell'articolo si presupporr&agrave; che stiate operando come root.

Collegare la scheda al PC mediante l'apposito lettore. La scheda correttamente rilevata dovrebbe comparire nell'elenco dei dischi reso dal comando '''fdisk''' come nel seguente esempio:
'''fdisk''' ''-l''
Disk /dev/sdc: 15.9 GB, 15931539456 bytes
255 heads, 63 sectors/track, 1936 cylinders, total 31116288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Device Boot Start End Blocks Id System
/dev/sdc1 8192 31116287 15554048 c W95 FAT32 (LBA)

Scaricare l'immagine di installazione di '''SlacwareArm''' in una directory locale
: '''cd''' /tmp
: '''wget''' http://rpi2.fatdog.eu/files/img/rpi2-slackwarearm-install_13Mar15_fd.img.xz
: '''wget''' http://rpi2.fatdog.eu/files/img/rpi2-slackwarearm-install_13Mar15_fd.img.xz.md5

Ad operazione terminata eseguire un controllo di congruenza per accertarsi che l'immagine non si sia corrotta durante il trasferimento:
: '''md5sum''' ''-c'' rpi2-slackwarearm-install_13Mar15_fd.img.xz.md5

Nel caso il comando rendesse un errore sar&agrave; necessario scaricare nuovamente il file immagine sperando che il problema non si ripeta. Altrimenti si potr&agrave; procedere copiando l'immagine sulla scheda MicroSD mediante il comando '''dd''':
: '''xz''' ''-dc'' rpi2-slackwarearm-install_13Mar15_fd.img.xz | '''dd''' of=/dev/sdc bs=65536

Ove /dev/sdc &egrave; la scheda MicroSD collegata al PC e precedentemente rilevata. Il buon esito della copia potr&agrave; essere verificato utilizzando nuovamente il comando '''fdisk''' per accertarsi che '''le dimensioni della partizione siano mutate''' e che sia stato '''attivato il flag di boot''':
'''fdisk''' ''-l''
Disk /dev/sdc: 15.9 GB, 15931539456 bytes
4 heads, 32 sectors/track, 243096 cylinders, total 31116288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x08dd8e65

Device Boot Start End Blocks Id System
/dev/sdc1 * 32 156287 78128 c W95 FAT32 (LBA)

=== Pacchetti di Installazione ===
'''Non esistono immagini ISO di SlackwareARM''' dato che la grande maggioranza dei dispositivi basati su architettura ARM non &egrave; dotata di lettore CD/DVD e che anche collegandone uno esterno via USB '''non sarebbe comunque possibile eseguire il boot''' dai supporti. SlackwareARM pu&ograve; essere installata in due modi dopo aver avviato il programma di installazione:
# Leggendo i pacchetti esportati via rete tramite protocollo NFS.
# Leggendo i pacchetti da un supporto collegato via USB.
Nel proseguo dell'articolo si utilizzer&agrave; la seconda opzione. Un elenco di locazioni da cui scaricare i pacchetti pu&ograve; essere reperito al [http://arm.slackware.com/getslack/ seguente indirizzo]. Una volta scaricati, i pacchetti costituenti SlackwareARM devono essere copiati sulla pennetta USB che dovr&agrave; essere collegata al Raspberry Pi durante l'installazione.

=== Avviare l'Installazione di SlackwareARM ===
Ultimati i preparativi si potr&agrave; cominciare l'installazione vera e propria.
* Inserire la scheda MicroSD nell'apposito lettore integrato nel Raspberry Pi.
* Collegare tastiera e mouse USB.
* Collegare la chiavetta USB contenente i pacchetti di SlackwareARM precedentemente scaricati.
* Collegare il cavo HDMI/RCA al monitor.
* Accendere il monitor.
* Collegare il cavo di alimentazione al Raspberry Pi.
Se tutto va bene sul Raspberry Pi si accenderanno in sequenza la spia rossa dell'alimentazione e la spia verde collegata al lettore MicroSD che incomincer&agrave; a lampeggiare. Sulla parte alta del monitor compariranno '''un numero di lamponi pari al numero di core''' e pi&ugrave; sotto la schermata di selezione della tastiera. In caso contrario qualcosa non funziona: potrebbe trattarsi di un problema dell'immagine di installazione risolvibile ripetendo l'operazione di scrittura della scheda MicroSD oppure un problema della scheda stessa; in quest'ultimo caso sar&agrave; necessario sostituirla e provarne un'altra.

=== Impostazione di Data e Ora ===
Il Raspberry Pi non &egrave; dotato di un orologio hardware perci&ograve; '''ad ogni avvio la data di sistema viene azzerata al 1 Gennaio 1970 ed &egrave; necessario impostare data ed ora correnti'''. Tale operazione deve essere eseguita anche durante l'installazione altrimenti la procedura si rifiuter&agrave; di installare pacchetti di molti anni pi&ugrave; recenti del sistema ipotizzando un errore di configurazione. Per impostare la data di sistema sar&agrave; necessario:
* Selezionare un layout di tastiera dall'elenco fornito.
* Collegarsi come utente root (Durante l'installazione non viene richiesta una password).
* Lanciare il comando '''date''' con l'opzione ''-s'' per impostare la data:
: '''date''' ''-s'' "<day> <month> <date> <hour>:<minute>:<second> <year>"
Ove
: <day> = Stringa di 3 lettere che specifica il giorno della settimana in inglese.
: <month> = Mese dell'anno rappresentato con una stringa di 3 lettere.
: <date> = Giorno del mese rappresentato con 2 cifre numeriche.
: <year> = Anno rappresentato con 4 cifre numeriche.
: <hour> = Ora rappresentata con 2 cifre numeriche.
: <minute> = Minuti rappresentati con 2 cifre numeriche.
: <second> = Secondi rappresentati con 2 cifre numeriche.
: Es: '''date''' ''-s'' "Thu Sep 3 16:06:35 2015"
Nel caso in cui la rete fosse configurata e funzionante sar&agrave; invece possibile aggiornare la data di sistema interrogando un '''server NTP''' esterno mediante il comando:
: '''ntpdate''' pool.ntp.org

=== Partizionamento della Scheda MicroSD ===
La scheda MicroSD &egrave; gestita come un disco e come tale deve essere partizionata. Creare un numero di partizioni maggiore di uno garantisce una maggior sicurezza per i dati residenti sul sistema oltre che una maggiore flessibilit&agrave; nell'eseguire aggiornamenti, back-up o per reinstallare il sistema. Il primo passo consiste nell'individuare la scheda tra i supporti riconosciuti dal sistema mediante il comando '''fdisk''' di cui si riporta un estratto:
'''fdisk''' ''-l''
/dev/mmcblk0
/dev/mmcblk0p1
La scheda corrisponde al dispositivo '''/dev/mmcblk0''' mentre '''/dev/mmcblk0p1''' &egrave; la prima partiziona, che contiene i file di avvio. Per partizionare la scheda &egrave; possibile far ricorso al comando '''cfdisk''' comune in moltissime distribuzioni Linux:
: '''cfdisk''' /dev/mmcblk0
La partizione esistente '''non deve essere modificata'''. Oltre ad essa sar&agrave; necessario creare una '''partizione di swap''', tipologia 082, di almeno 256 Mb di dimensione, una '''partizione di root''', ove installare il sistema ed una '''partizione /home''' per i dati dell'utenza. &Egrave; ovviamente possibile creare molte altre partizioni secondo le proprie esigenze; quelle elencate rappresentano una configurazione minima. Verificare che '''il flag di boot della prima partizione VFAT sia attivo''' prima di salvare la tabella delle partizioni ed uscire da cfdisk.

=== Copia dei Pacchetti ===
Montare la pennetta USB contenente i pacchetti di SlackwareARM su di una directory locale ed avviare il programma di installazione mediante il comando '''setup''', che presenter&agrave; le schermate standard di una installazione di Slackware Linux.
* Attivare la partizione di swap.
* Attivare la partizione di sistema e le altre configurate.
* Salvare la configurazione delle partizioni nel file '''/etc/fstab'''.
* Attivare la partizione di boot (VFAT) facendo attenzione ad '''impostare umask 177''' in fase di mount onde evitare che ne sia sovrascritto il contenuto per errore.
* Selezionare la sorgente dei pacchetti specificando la directory ove &egrave; stata in precedenza montata la pennetta USB.
* Selezionare la tipologia di installazione ed avviare la copia dei pacchetti.
Come anticipato in precedenza lo scopo del presente articolo consiste nel dimostrare che TDE 14.0.1 rappresenti un ottimo rimpiazzo per KDE 4 pertanto si consiglia di '''non installare i pacchetti relativi a KDE 4 ed alla versione 4 delle librerie Qt'''. Le librerie Qt4 potrebbero essere richieste da programmi non necessariamente legati a KDE 4 e possono convivere con '''TQt''': la versione di Qt 3 manutenuta dal progetto Trinity. Purtroppo la presenza di Qt4 pu&ograve; causare problemi durante la compilazione dei pacchetti costituenti il Trinity Desktop Environment pertanto si consiglia di rimandarne l'installazione a dopo aver ultimato quella di TDE.

=== Configurazione di Sistema ===
Il programma di installazione di SlackwareARM ricalca quello standard di Slackware perci&ograve; la procedura di configurazione va a toccare tutti i punti gestiti da quest'ultimo:
* Configurazione del mouse.
* Configurazione dell'interfaccia di rete.
** Impostazione del nome della macchina.
** Impostazione del dominio.
** Impostazione di un indirizzo IP statico oppure configurazione del servizio DHCP.
* Configurazione dei servizi da avviare al boot.
* Selezione di un font per la console.
* Configurazione del fuso orario.
* Configurazione del Window Manager predefinito. Operazione che dovr&agrave; essere ripetuta dopo aver compilato ed installato TDE.
* Impostazione della password per l'utente root.
In chiusura il programma di installazione chieder&agrave; di eseguire un riavvio del sistema. '''Non riavviare immediatamente''' e procedere invece collegandosi ad un nuovo terminale per:
* Rimuovere pacchetti inutili:
: ROOT=/mnt '''removepkg''' kernel_kirkwood kernel-modules-kirkwood
: ROOT=/mnt '''removepkg''' kernel_armv7 kernel-modules-armv7
* Rimuovere il file '''initrd.gz''' dalla partizione di boot:
: '''mount''' ''-t'' vfat /dev/mmcblk0p1 /mnt/boot
: '''rm''' /mnt/boot/initrd.gz
* Installare il firmware per il Raspberry Pi ed i dati per il kernel:
: ROOT=/mnt '''installpkg''' /rpi2-extra/kernel* /rpi2-extra/rpi2*
Ultimate le operazioni sopra elencate si potr&agrave; smontare la sorgente dei pacchetti di installazione ed '''eseguire il riavvio'''. L'installazione di SlackwareARM sul Raspberry Pi &egrave; conclusa ed al termine della procedura di avvio sar&agrave; possibile collegarsi al sistema appena installato per procedere all'installazione di TDE.


== Installazione di Trinity Desktop Environment su Raspberry Pi 2 ==

Il 6 Settembre del 2015 &egrave; stata ufficialmente rilasciata la '''versione 14.0.1 del Trinity Desktop Environment'''. Si tratta di un rilascio di '''bug fix''' e rappresenta il risultato di svariati mesi di lavoro per correggere i problemi segnalati dagli utenti. '''Non esistono pacchetti precompilati di TDE per Slackware Linux'''. Non per PC e neppure per dispositivi basati su architettura ARM. Si dovr&agrave; pertanto procedere compilando i singoli pacchetti a partire dal codice sorgente. Gli archivi compressi contenenti il codice sorgente per i pacchetti possono essere scaricati dal seguente [http://tde-mirror.yosemite.net/trinity/releases/R14.0.1/downloads.html indirizzo]. Trattandosi di una versione di bug fix, la 14.0.1 non si discosta di molto dalla precedente 14.0.0 la cui procedura di compilazione &egrave; stata oggetto di un [[trinity_desktop_environment_14.0.0 |precedente articolo]] a cui si rimanda per una descrizione dettagliata degli script di compilazione. Nel proseguo dell'articolo verranno invece descritte le differenze e le aggiunte introdotte specificamente per la versione 14.0.1.

=== Compilazione in Parallelo ===
I moderni processori sono costituiti da pi&ugrave; core: una soluzione architetturale che consente di eseguire molte istruzioni in parallelo. Tale caratteristica pu&ograve; essere sfruttata dai compilatori recenti consentendo di '''ridurre drasticamente le tempistiche di generazione del codice eseguibile'''. Molti pacchetti costituenti il Trinity Desktop Environment possono trarre giovamento dalla compilazione in parallelo mentre in altri causa la generazione di errori. Per aggirare l'insorgere potenziale di errori, gli script realizzati in occasione del rilascio di TDE 14.0.0 '''non utilizzavano alcuna forma di parallelismo''' nel generare i pacchetti. Uno spreco di risorse se si considera che il Raspberry Pi 2, come la maggior parte dei processori in commercio, dispone di '''4 core'''. Si &egrave; pertanto deciso di rettificare la scelta cautelativa di qualche mese fa introducendo negli script una nuova variabile adibita al controllo del livello di parallelismo: '''JOB_NUM'''.

La variabile &egrave; stata introdotta nella riga che invoca il comando '''make''', immediatamente dopo la fase di configurazione del codice sorgente:
'''make''' VERBOSE=1 ${JOB_NUM}
Come standard per i pacchetti si &egrave; optato per '''un livello di parallelismo pari a 6''' in accordo con i vecchi script ufficiali di compilazione di KDE 3 per Slackware. La variabile definita negli script SlackBuild deve essere impostata attraverso il file '''TDE.options''', contenente le opzioni di compilazione per l'intero ambiente desktop.
JOB_NUM=-j6
Per impostare un livello di parallelismo maggiore o minore sar&agrave; sufficiente variare il valore numerico impostato dopo l'opzione ''-j''. Un valore pari a ''-j1'' implicher&agrave; l'uso di un singolo core '''disabilitando di fatto la compilazione in parallelo'''.

=== Errori Dovuti al Parallelismo ===
Esistono segnalazioni da parte di utenti che lamentano l'insorgere di errori durante la compilazione di alcuni pacchetti di TDE quando il livello di parallelismo impostato &egrave; maggiore di 1. La maggior parte delle segnalazioni riguardano due pacchetti: '''tdebindings''' e '''tdemultimedia'''. I test eseguiti durante la stesura del presente articolo non hanno rilevato alcun problema, cionondimeno se tali problemi dovessero presentarsi sar&agrave; possibile aggirarli durante la compilazione impostando un valore di parallelismo pari ad 1. A tal fine dovr&agrave; essere modificato il contenuto del file globale '''TDE.options''', oppure le opzioni specifiche per il singolo pacchetto contentue nel relativo file '''local.options'''. Se ad esempio si volesse generare un pacchetto per '''tdebindings''' senza ricorrere alla compilazione parallela sar&agrave; sufficiente spostarsi nella directory contente gli script di compilazione, il codice sorgente ed il file local.options: /usr/src/trinity/base/tdebindings nel nostro caso, aprire il file '''local.options''' con un programma di elaborazione di testi a scelta ed aggiungere la riga:
JOB_NUM=-j1
Apportata la modifica sar&agrave; possibile lanciare immediatamente la compilazione del pacchetto tramite lo script SlackBuild presente nella medesima directory:
'''sh''' ./tdebindings.SlackBuild

Le considerazioni riportate sopra hanno valore generale e possono essere utilizzate anche per tdemultimedia o qualsiasi altro pacchetto che presentasse problemi riconducibili alla compilazione in parallelo.

=== Script SlackBuild Modificati ===
Sebbene la maggior parte dei pacchetti siano rimasti invariati nel passaggio dalla versione 14.0.0 alla 14.0.1, in alcuni casi sono state introdotte '''nuove dipendenze''' o purtroppo '''nuovi errori''' per cui &egrave; nata la necessit&agrave; di ricorrere a patch correttive. Di seguito sono riportate le modifiche apportate ad alcuni specifici script di compilazione:

==== TDELIBS ====
Durante il primo tentativo di compilare il pacchetto '''tdelibs''' la procedura &egrave; fallita rendendo il seguente errore:
[ 0%] Building C object dcop/KDE-ICE/CMakeFiles/kICE-static.dir/accept.c.o
In file included from <command-line>:0:0:
/usr/include/tqt/tqt.h:54:23: fatal error: ntqglobal.h: No such file or directory
#include <ntqglobal.h>
^
compilation terminated.
make[2]: *** [dcop/KDE-ICE/CMakeFiles/kICE-static.dir/accept.c.o] Error 1
make[1]: *** [dcop/KDE-ICE/CMakeFiles/kICE-static.dir/all] Error 2
make: *** [all] Error 2

Inizialmente si &egrave; pensato ad un potenziale problema derivante dal parallelismo introdotto dato che la versione 14.0.0 del pacchetto non presentava alcun difetto. Un secondo tentativo eseguito impostando l'opzione '''-j1''' ha reso esito analogo. Scartata la compilazione parallela come causa potenziale del problema si &egrave; proceduto a verificare che tutti i prerequisiti fossero stati correttamente installati e che il file '''ntqglobal.h''' fosse presente nel sistema. Il comando '''find''' ha confermato l'esistenza di un file con tale nome:
'''find''' / ''-name'' "ntqglobal.h"
/opt/trinity/include/ntqglobal.h
Spulciando i dettagli dei pacchetti installati si &egrave; ricevuta conferma che si trattasse del file corretto:
'''grep''' ntqglobal.h /var/log/packages/*
/var/log/packages/'''tqt3-R14.0.1-arm-1sg''':opt/trinity/include/ntqglobal.h

Il problema &egrave; stato risolto '''aggiungendo un percorso di ricerca per i file include''' durante la fase di compilazione del codice sorgente. A tal fine sono state aggiunte le righe:
# Add some include paths to the standard compiler flags otherwise the build
# process will fail with an error
SLKCFLAGS="${SLKCFLAGS} -I${PREFIX}/include"
Aventi lo scopo di accodare '''/opt/trinity/include''' all'elenco dei percorsi predefiniti. Lo script modificato gira con successo.

==== TDENETWORK ====
Nel caso del pacchetto '''tdenetwork''' il problema non si &egrave; presentato immediatamente, ma relativamente pi&ugrave; tardi a procedura avanzata: durante la fase di copia dei file costituenti l'installazione. L'errore reso nel caso specifico era:
[ 71%] Building CXX object krdc/vnc/CMakeFiles/vnc-static.dir/threads.cpp.o
/tmp/build/tmp-tdenetwork/tdenetwork/krdc/vnc/threads.cpp: In function 'void output(const char*, ...)':
/tmp/build/tmp-tdenetwork/tdenetwork/krdc/vnc/threads.cpp:113:10: error: 'class TQString' has no member named 'vsprintf'
message.vsprintf(format, args);
^
make[2]: *** [krdc/vnc/CMakeFiles/vnc-static.dir/threads.cpp.o] Error 1
make[1]: *** [krdc/vnc/CMakeFiles/vnc-static.dir/all] Error 2
make: *** [all] Error 2

Anche in questo caso si &egrave; proceduto verificando che il problema non fosse una conseguenza diretta del livello di parallelismo pari a 6, ma nuovamente i test hanno dimostrato che la causa dovesse essere cercata altrove. Leggendo la documentazione relativa alle classi TQString e TQCString interessate:
'''man''' tqt3-tqcstring
'''man''' tqt3-tqstring
&egrave; emerso che queste non disponessero di un metodo '''vsprintf''', come segnalato dall'errore. Esiste invece un metodo chiamato '''sprintf''', implementato come una chiamata al precedente. Da cui si &egrave; dedotto che la soluzione consistesse nel '''sostituire il metodo vsprintf con sprintf''' nel codice della funzione '''output''' del file '''threads.cpp'''. Apportata la modifica e lanciato il comando '''make install''' la compilazione si &egrave; conclusa con successo.

Per ovviare definitivamente al problema &egrave; stata preparata la seguente '''patch''':
*** krdc/vnc/threads.cpp 2015-09-13 20:01:24.889992277 +0200
--- krdc/vnc/threads.cpp 2015-09-13 19:59:20.899992324 +0200
***************
*** 110,116 ****
va_start(args, format);

TQString message;
! message.vsprintf(format, args);

va_end(args);

--- 110,116 ----
va_start(args, format);

TQString message;
! message.sprintf(format, args);

va_end(args);

Richiamata dallo script di compilazione mediante le righe:
# Patch the krdc/vncn/threads.cpp source file in order to solve an issue with the
# output function.
'''patch''' ''-p0 -i'' ${SRCDIR}/threads_sprintf.patch

In seguito, spulciando le segnalazioni presenti nel bug tracker del progetto Trinity ne &egrave; stata trovata una relativa al problema sopra descritto: [http://bugs.pearsoncomputing.net/show_bug.cgi?id=2525 BUG 2525]. La patch &egrave; stata proposta come soluzione.

'''Aggiornamento''': La patch &egrave; stata rifiutata perch&egrave; l'origine dell'errore &egrave; stata identificata altrove. Sembra che parte del codice per il prossimo rilascio 14.1.0 sia finito nell'archivio del 14.0.1. Esistono due soluzioni per l'errore:
# Scaricare il codice sorgente dal '''repository GIT di TDE'''.
# Aspettare la sostituzione dell'archivio contenente il codice sorgente di tdenetwork con la versione corretta.
Quale che sia la strada adottata, applicare la patch al codice corretto causer&agrave; un errore. Per prevenirlo &egrave; necessario '''commentare le righe aggiunte allo script SlackBuild'''.


Non sono state necessarie modifiche ad alti script appartenenti ai gruppi: base, library e prerequisite di TDE.


=== Legare Tutto Assieme ===
Per semplificare l'operazione di compilazione di TDE &egrave; stato preparato uno '''script principale: TDE.SlackBuild''' avente lo scopo di guidare la procedura richiamando quelli per specifici pacchetti nell'ordine suggerito dalla documentazione. Una copia dello script e dell'intero '''build tree''' &egrave; scaricabile sotto forma di archivio compresso dal seguente [http://www.giustetti.net/resource/slackbuild/tde/1401/tde_build_tree_sg-14.0.1.tar.bz2 indirizzo]. Una volta scaricato l'archivio ed il codice sorgente del progetto TDE in una directory locale quale '''/tmp''' si potr&agrave; procedere seguendo i passi dettagliati nel seguito:
* Creare la directory '''/usr/src/trinity''':
: '''mkdir''' /usr/src/trinity
* Copiare l'archivio contenente il build tree in tale directory
: '''cp''' /tmp/tde_build_tree_sg-14.0.1.tar.bz2 /usr/src/trinity
* Spostarsi nella directory /usr/src/trinity
: '''cd''' /usr/src/trinity
* Estrarre il contenuto dell'archivio utilizzando il comando '''tar''':
: '''tar''' ''-jxf'' tde_build_tree_sg-14.0.1.tar.bz2
La directory /usr/src/trinity verr&agrave; cos&igrave; popolata:
'''ls''' ''-la''
total 14
drwxr-xr-x 7 root root 1024 Sep 14 19:52 .
drwxr-xr-x 5 root root 1024 Sep 14 19:52 ..
-rw-r--r-- 1 root root 314 Sep 14 14:53 TDE.options
drwxr-xr-x 113 root root 7168 Sep 14 17:40 application
drwxr-xr-x 22 root root 1024 Jan 1 1970 base
drwxr-xr-x 13 root root 1024 Jan 1 1970 library
drwxr-xr-x 16 root root 1024 Jan 1 1970 prerequisite
drwxr-xr-x 4 root root 1024 Jan 1 1970 tde_build_script

* Smistare gli archivi contenenti il codice sorgente per i pacchetti nelle omonime directory contenute in '''base''', '''library''' e '''prerequisite'''. Il file '''TDE.options''', di cui viene fornito un esempio, contiene le opzioni di compilazione per l'intero ambiente:
# Global options used to build TDE.
#
# Do not place here package specific options. Use a file named
# "local.options" in the build root directory of the package
# instead.

ARCH="arm"
ARCHIVE_FORMAT="tar.bz2"
BUILD="1"
JOB_NUM="-j6"
MARCH="arm"
PREFIX="/opt/trinity"
SRCVER="R14.0.1"
TAG="sg"
TAR_OPTION="-xjvf"

* Aprire il file con un qualsiasi programma di elaborazione di testo ed impostare i valori desiderati per le variabili contenute. Le variabili che dovrebbero essere popolate con riguardo all'architettura e alle preferenze personali sono:
** '''ARCH''' e '''MARCH''' che impostano l'architettura per cui si desideri compilare i pacchetti: '''arm nel caso del Raspberry Pi 2'''.
** '''BUILD''' che dovrebbe essere incrementato ogni volta che si apporta una modifica alla procedura.
** '''JOB_NUM''' che specifica il livello di parallelismo utilizzato per compilare i pacchetti.
** '''PREFIX''' che impone la directory di installazione di TDE. Impostare '''/opt/trinity consente la convivenza di TDE e KDE 4'''.
** '''SRCVER''' &egrave; la versione di TDE che si desidera compilare.
** '''TAG''' &egrave; l'identificatore di chi esegue la compilazione. Impostare una stringa a piacere.

* Spostarsi nella directory '''/usr/src/trinity/tde_build_script/bin''' e lanciare la procedura di generazione dei pacchetti:
: '''cd''' /usr/src/trinity/tde_build_script/bin
: '''sh''' ./TDE.SlackBuild

Lo script si far&agrave; autonomamente carico di compilare ogni pacchetto e di installarlo. '''I pacchetti generati ed i relativi file di log potranno essere reperiti nella directory /tmp'''.

Una nota a parte merita il pacchetto '''tde-i18n''' contenente i file di localizzazione in tutte le lingue supportate da TDE. Lo script principale contiene le istruzioni necessarie ad eseguirne la compilazione, ma l'operazione risulta essere molto onerosa in termini di tempo perci&ograve; '''le istruzioni sono commentate''' ed i pacchetti di localizzazione vengono ignorati. Se si desiderasse generare anche i file di localizzazione sar&agrave; necessario modificare lo script TDE.SlackBuild rimuovendo il commento dalla riga:
# bash ./${PKG}.SlackBuild
modificandola in
bash ./${PKG}.SlackBuild

=== Tempistiche ===
Per capire quanto il livello di parallelismo incida sulla tempistica di compilazione dell'intero ambiente sono riportati alcuni dati relative alla generazione dei pacchetti inerenti '''Trinity Desktop Environment''' su '''Rasperry Pi 2'''. I dati coprono la tempistica relativa alla '''compilazione dei prerequisiti, dell'ambiente completo con l'esclusione dei pacchetti di localizzazione e, infine, delle librerie opzionali'''. Non sono state prese in considerazione le applicazioni a corredo di TDE. Personalmente non uso quasi nessuna di tali applicazioni e l'ambiente funziona perfettamente anche senza. L'operazione di compilazione con un '''livello di parallelismo pari a 1''' in totale ha richiesto '''47''' ore. Impostando un '''parallelismo pari a 6''' invece la tempistica &egrave; scesa '''sotto le 20 ore''' con un notevole risparmio di tempo.


== Conclusioni ==

Nel corso del presente articolo &egrave; stato affrontato il tema dell'installazione di SlackwareARM e di Trinity Desktop Environment su un Raspberry Pi modello 2. L'operazione si &egrave; rivelata semplice e lineare e ha consentito di dotare il Raspberry Pi di un ambiente grafico completo, funzionale e leggero. In conclusione si riportano alcune immagini dell'ambiente desktop in funzione.

[[File:desktop_clean.jpeg]]

Fig: 1 - Come si presenta il desktop all'avvio di TDE.

[[File:desktop_krdc.jpeg]]

Fig: 2 - La schermata di avvio di KRDC programma che ha creato qualche problema compilando tdenetwork.

[[File:desktop_ksirtet.jpeg]]

Fig: 3 - Il mitico Ksirtet.

[[File:desktop_tdevelop.jpeg]]

Fig: 4 - TDevelop un IDE per sviluppatori integrato nell'ambiente desktop.


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


Link esterni
----

* [https://www.raspberrypi.org Home page della fondazione Raspberry Pi (En)]
* [https://it.wikipedia.org/wiki/Raspberry_Pi La pagina di Wikipedia dedicata al Raspberry Pi]
* [http://www.slackware.com Home page di Slackware (En)]
* [http://arm.slackware.com Slackware Linux per piattaforma ARM]
* [http://rpi2.fatdog.eu/index.php?p=home Supporto non ufficiale per Slackware su Raspberry Pi 2]
* [http://www.trinitydesktop.org Home page del progetto TDE (En)]

----

Lingue: [[En/Trinity_desktop_environment_raspberry_pi_2 |English]] - '''Italiano'''

Navigation menu