20,642 bytes added
, 27 January
{{header_it|title=Installazione di TDE 14.1.5 su Slackware / SlackwareArm Linux 15.0 | keyword={{Template:keyword_it_tde}} | description=Installazione di Trinity Desktop Environment 14.1.5 su Slackware / SlackwareArm Linux 15.0 | link_page=en/Trinity_desktop_environment_14.1.5 }}
== '''TDE 14.1.5 su Slackware 15.0''' ==
Lo scorso Novembre, ad inizio del mese, è stato rilasciato l'ultimo aggiornamento ufficiale del ramo stabile del '''Trinity Desktop Environment''': la versione 14.1.5. TDE è un ambiente grafico completo per '''Linux''' ed altri sistemi operativi della famiglia '''UNIX''' nato dalle ceneri di '''KDE 3''', ma ormai sviluppato indipendentemente da quest'ultimo. Il nuovo rilascio si propone di risolvere tutti i problemi segnalati dagli utenti nel corso del semestre precedente e di apportare ulteriori migliorie al software. A causa di un eccesso di lavoro non ho potuto occuparmi della compilazione di TDE 14.1.5 all'epoca del rilascio; tornato a ritmi più tranquilli posso finalmente cimentarmi nell'impresa.
Come sempre gli sviluppatori di TDE hanno portato avanti il lavoro di aggiornamento e pulizia del codice. Una delle modifiche maggiormente impattanti ha consistito nella '''rinomina del pacchetto TQt3 in TQt'''. Il cambio di nome si presenta come una banalità, ma purtroppo le '''librerie TQt sono le fondamenta dell'intero ambiente grafico''' e le ripercussioni hanno interessato tutti gli altri pacchetti, anche quelli apparentemente slegati come le estensioni per i linguaggi di programmazione:
* '''Perl''' attraverso la libreria '''libTQt-Perl''';
* '''Python''' attraverso al libreria '''PyTQt'''.
il cui aggiornamento ha presentato una sfida complicata, insuperabile nel caso di Perl. Per un elenco completo delle modifiche introdotte si rimanda alle [https://wiki.trinitydesktop.org/Release_Notes_For_R14.1.5 note di rilascio] (In inglese). Le istruzioni di compilazione sono riportate nel seguito del presente articolo.
=== PyTQt ===
Il pacchetto '''PyTQt''' contiene le librerie necessarie per scrivere in linguaggio Python programmi ed applicazioni integrati in TDE. Le librerie sono sempre state incluse nel progetto, inizialmente chiamate Python-TQt sono state rinominate in occasione del rilascio della versione 14.1.0. Rinominare TQt3 in TQt ha comportato la conseguente modifica dei nomi di molti file del progetto e, soprattutto, di molte funzioni e variabili di ambiente contenute nelle librerie condivise, che sono state adattate alla nuova nomenclatura. I file header sono stati interessati dall'aggiornamento con problemi per la compilazione di alcuni pacchetti tra cui PyTQt.
La compilazione del codice sorgente non modificato incluso nell'archivio fallisce lamentando l'impossibilità di reperire il numero di versione delle librerie TQt:
<font color="red">Error: The TQt version number could not be determined by parsing /opt/trinity/include/tqglobal.h.</font>
Un errore alquanto strano dato che le librerie vengono compilate ed installate prima dei binding e che praticamente nessuno degli altri pacchetti presenta problemi analoghi in fase di compilazione. Trattandosi delle librerie fondamentali su cui si basa l'intero ambiente grafico, l'errore dovrebbe interessarli tutti. Non scrivendo abitualmente codice Python, la sua assenza non mi avrebbe causato particolari fastidi, ma il mio scopo è sempre stato quello di produrre pacchetti funzionanti per l'intero ambiente grafico di base, per cui ho deciso di indagare le cause del malfunzionamento alla ricerca di una soluzione.
Dopo aver eseguito alcune sessioni di debug sono giunto alla conclusione che il problema risieda nel file ''configure.py'' che ha il compito di assegnare i valori corretti ai parametri di compilazione per il pacchetto. La porzione di codice interessata incomincia dalla riga 1090:
<syntaxhighlight lang="python">
...
# Check the TQt header files have been installed.
tqglobal = os.path.join(tqt_incdir, "tqglobal.h")
if not os.access(tqglobal, os.F_OK):
tqglobal = os.path.join(tqt_incdir, "ntqglobal.h")
if not os.access(tqglobal, os.F_OK):
sip_tqt_config.error("tqglobal.h or ntqglobal.h could not be found in %s." % tqt_incdir)
...
</syntaxhighlight>
Il file header ''tqglobal.h'' contine le seguenti righe di codice:
<syntaxhighlight lang="c">
#ifndef TQT_TQGLOBAL_H
#define TQT_TQGLOBAL_H
#include <tqt.h>
#include <ntqglobal.h>
#endif /* TQT_TQGLOBAL_H */
</syntaxhighlight>
Da cui si evince che le istruzioni di assegnazione debbano risiedere nel file ''ntqglobal.h'' e che ''tqglobal.h'' sia presente probabilmente per compatibilità. Tale soluzione non arreca problemi al preprocessore dei linguaggi C o C++, che importa il contenuto dei file elencati, ma '''il linguaggio Python non ha ragione di eseguire l'inclusione dato che non comprende la sintassi di C''' e derivati. In questo caso la soluzione banale consiste nel leggere direttamente il contenuto del file header ''ntqglobal.h''. Ho verificato la mia teoria creando la seguente patch:
<syntaxhighlight lang="python">
*** configure.py 2025-11-26 19:31:50.000000000 +0100
--- configure.py 2025-11-26 19:30:14.000000000 +0100
***************
*** 1091,1097 ****
macros["LIBDIR_TQT"] = tqt_libdir
# Check the TQt header files have been installed.
! tqglobal = os.path.join(tqt_incdir, "tqglobal.h")
if not os.access(tqglobal, os.F_OK):
tqglobal = os.path.join(tqt_incdir, "ntqglobal.h")
--- 1091,1097 ----
macros["LIBDIR_TQT"] = tqt_libdir
# Check the TQt header files have been installed.
! tqglobal = os.path.join(tqt_incdir, "ntqgloba.h")
if not os.access(tqglobal, os.F_OK):
tqglobal = os.path.join(tqt_incdir, "ntqglobal.h")
***************
*** 1112,1118 ****
else:
tqconfigdir = tqt_incdir
! tqconfig = os.path.join(tqconfigdir, "tqconfig.h")
if not os.access(tqconfig,os.F_OK):
tqconfig = os.path.join(tqconfigdir, "ntqconfig.h")
--- 1112,1118 ----
else:
tqconfigdir = tqt_incdir
! tqconfig = os.path.join(tqconfigdir, "ntqconfig.h")
if not os.access(tqconfig,os.F_OK):
tqconfig = os.path.join(tqconfigdir, "ntqconfig.h")
</syntaxhighlight>
e facendo in modo che venisse applicata al codice sorgente dal file ''SlackBuild'' aggiungendo le seguenti righe di codice:
<syntaxhighlight lang="bash">
# Patch the configure.py script for the right configuration.
patch -p0 -i ${SRCDIR}/configure.patch
</syntaxhighlight>
Tanto è bastato per risolvere il problema di compilazione ed '''ottenere un pacchetto PyTQt funzionante'''. Sia la patch che il file ''SlackBuild'' aggiornato sono stati inclusi nell'archivio contenente il build tree. Non si tratta di un a soluzione molto pulita. Provvederò a contattare gli sviluppatori di TDE per segnalare il problema ed aggiornare il file SlackBuild se fossero rilasciate delle patch.
----
=== LibTQt-Perl ===
Anche '''LibTQt-Perl''', la libreria che include i collegamenti al linguaggio [https://www.perl.org/ '''Perl 5'''], presenta problemi nella versione 14.1.5 di TDE. Anche in questo caso ho ricercato le cause degli errori, ma non sono arrivato ad una soluzione essendo necessario apportare modifiche al codice Perl che, purtroppo, non conosco. Andando con ordine: Cercando di compilare un pacchetto a partire dal codice presente nell'archivio '''libtqt-perl-trinity-14.1.5.tar.xz''' si ottiene il seguente errore:
config.status: creating smoke/tqt/generate.pl
readline() on closed filehandle DEFS at generate.pl line 77.
<font color="red">Can't locate Ast.pm in @INC (you may need to install the Ast module) (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5/usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5) at kalyptus line 17.</font>
BEGIN failed--compilation aborted at kalyptus line 17.
config.status: error: cannot find input file: `smoke/Makefile.in'
In sostanza '''l'interprete Perl non trova un modulo necessario per popolare i parametri di configurazione''' ed esce segnalando il problema incontrato. Eseguendo una ricerca nel codice sorgente, ho riscontrato la presenza del modulo richiesto in una cartella del codice sorgente:
'''ls''' ''-lah'' kalyptus/
total 984K
drwxr-xr-x 2 root root 4.0K Apr 3 2025 .
drwxr-xr-x 10 root root 4.0K Jan 12 14:12 ..
<font color="red">-rw-r--r-- 1 root root 2.2K Apr 3 2025 Ast.pm</font>
-rw-r--r-- 1 root root 17K Apr 3 2025 ChangeLog
-rw-r--r-- 1 root root 12K Apr 3 2025 Iter.pm
-rw-r--r-- 1 root root 51 Apr 3 2025 Makefile.cvs
...
Ho pertanto provveduto ad aggiungere il percorso relativo a quelli già memorizzati nella variabile '''@INC''' modificando opportunamente lo script SlackBuild ed aggiungendo una dichiarazione per la variabile '''PERL5LIB''':
<syntaxhighlight lang="bash">
export DEBUG_AUTOTOOL_OPT="--disable-debug"
# Upgrade @INC path list to include the Ast.pm module for each submodule
export PERL5LIB=${TMP}/tmp-${PRGNAM}/${PRGNAM}-${SRCVER}/kalyptus
# Enter sources directory.
cd ${TMP}/tmp-${PRGNAM}/${DIR_SRC}
</syntaxhighlight>
A seguito della modifica lo script di configurazione procede oltre alle righe problematiche solo per incagliarsi nuovamente poco dopo rendendo il messaggio di errore:
config.status: creating smoke/tqt/generate.pl
readline() on closed filehandle DEFS at generate.pl line 77.
<font color="red">Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at /tmp/build/tmp-libtqt-perl/libtqt-perl-trinity-14.1.5/kalyptus/kdocAstUtil.pm line 680.</font>
Compilation failed in require at kalyptus line 20.
BEGIN failed--compilation aborted at kalyptus line 20.
config.status: error: cannot find input file: `smoke/Makefile.in'
Il problema sembra legato alla seguente riga del modulo Perl '''kdocAstUtil.pm''' ed in particolare alla presenza dell'istruzione '''define''' che il messaggio di errore consiglia di rimuovere. Ho provveduto a realizzare una patch allo scopo:
<syntaxhighlight lang="perl">
*** ./kalyptus/kdocAstUtil.pm 2026-01-12 16:59:17.000000000 +0100
--- ./kalyptus/kdocAstUtil.pm 2026-01-12 16:44:14.000000000 +0100
***************
*** 676,682 ****
dumpAst( $kid );
}
! print "\t" x $depth, "Documentation nodes:\n" if defined
@{ $node->{Doc}->{ "Text" }};
foreach $kid ( @{ $node->{Doc}->{ "Text" }} ) {
--- 676,682 ----
dumpAst( $kid );
}
! print "\t" x $depth, "Documentation nodes:\n" if
@{ $node->{Doc}->{ "Text" }};
foreach $kid ( @{ $node->{Doc}->{ "Text" }} ) {
</syntaxhighlight>
La cui applicazione permette allo script di '''ultimare correttamente la fase di configurazione''' e di passare alla successiva fase di compilazione e di fallire quasi immediatamente segnalando problemi inerenti la libreria '''smoke''': utilizzata per generare i collegamenti tra le librerie TQt e i linguaggi di programmazione interpretati quali Perl.
<syntaxhighlight lang="bash">
make all-recursive
make[1]: Entering directory '/tmp/build/tmp-libtqt-perl/libtqt-perl-trinity-14.1.5'
Making all in smoke
make[2]: Entering directory '/tmp/build/tmp-libtqt-perl/libtqt-perl-trinity-14.1.5/smoke'
Making all in tqt
make[3]: Entering directory '/tmp/build/tmp-libtqt-perl/libtqt-perl-trinity-14.1.5/smoke/tqt'
/bin/sh ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I./.. -I/opt/trinity/include -I. -include tqt.h -DTQT_THREAD_SUPPORT -D_REENTRANT -Wno-long-long -Wundef -Wall -W -Wpointer-arith -DNDEBUG -DNO_DEBUG -O2 -O2 -march=i486 -mtune=i686 -Wno-non-virtual-dtor -fno-exceptions -fno-check-new -fno-common -I/usr/include/tqt -MT smokedata.lo -MD -MP -MF .deps/smokedata.Tpo -c -o smokedata.lo smokedata.cpp
libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I./.. -I/opt/trinity/include -I. -include tqt.h -DTQT_THREAD_SUPPORT -D_REENTRANT -Wno-long-long -Wundef -Wall -W -Wpointer-arith -DNDEBUG -DNO_DEBUG -O2 -O2 -march=i486 -mtune=i686 -Wno-non-virtual-dtor -fno-exceptions -fno-check-new -fno-common -I/usr/include/tqt -MT smokedata.lo -MD -MP -MF .deps/smokedata.Tpo -c smokedata.cpp -fPIC -DPIC -o .libs/smokedata.o
smokedata.cpp:18410:35: error: ‘mf_ctor’ is not a member of ‘Smoke’
18410 | {1, 1747, 6253, 2, Smoke::mf_ctor, 9, 7}, //7 TQAccel::TQAccel(TQWidget*, const char*)
| ^~~~~~~
smokedata.cpp:18411:35: error: ‘mf_ctor’ is not a member of ‘Smoke’
18411 | {1, 1747, 6129, 1, Smoke::mf_ctor, 9, 8}, //8 TQAccel::TQAccel(TQWidget*)
| ^~~~~~~
smokedata.cpp:18412:35: error: ‘mf_ctor’ is not a member of ‘Smoke’
18412 | {1, 1747, 6348, 3, Smoke::mf_ctor, 9, 9}, //9 TQAccel::TQAccel(TQWidget*, TQObject*, const char*)
| ^~~~~~~
smokedata.cpp:18413:35: error: ‘mf_ctor’ is not a member of ‘Smoke’
18413 | {1, 1747, 6345, 2, Smoke::mf_ctor, 9, 10}, //10 TQAccel::TQAccel(TQWidget*, TQObject*)
|
</syntaxhighlight>
Qua mi sono fermato non vedendo una facile soluzione del problema. Sia la patch che lo script di compilazione modificato verranno aggiunti al build tree per consentire a chiunque abbia competenze maggiori delle mie di provare a produrre un pacchetto funzionante della libreria. '''Si sconsiglia l'aggiornamento alla versione 14.1.5 di TDE a chiunque utilizzi abitualmente Perl per scrivere applicazioni integrate'''.
----
Segue un sunto delle operazioni necessarie per installare TDE 14.1.5 a partire dagli archivi contenenti il codice sorgente. Per una descrizione dettagliata si rimanda alle numerose pagine dedicate a TDE presenti nel sito.
=== Compilazione dei Pacchetti ===
Per compilare TDE bisogna '''rimuovere versioni precedentemente installate sulla macchina''', scollegarsi e rieseguire l'autenticazione, in modo da pulire l'ambiente di lavoro e le variabili di ambiente. Prima di incominciare, si consiglia di:
* Eseguire un back-up dei dati, delle directory di configurazione ''˜/.trinity'' e del file ''˜/.tderc'' localizzati nella home directory. A mia memoria la procedura di aggiornamento non ha mai causato la perdita di dati oppure la corruzione di file, ma è sempre consigliabile mettersi al riparo da esperienze spiacevoli.
* Rimuovere TDE significa rinunciare all'interfaccia grafica per il tempo necessario a ricompilarla. Un intervallo che dipende dalle prestazioni della macchina. Si consiglia di passare al runlevel 3 (Interfaccia testuale) per il resto della procedura:
<syntaxhighlight lang="bash">
init 3
</syntaxhighlight>
* Rimuovere tutti i pacchetti installati di TDE. Per rimuovere, ad esempio, la versione 14.1.4 di TDE lanciate il comando:
<syntaxhighlight lang="bash">
removepkg /var/log/packages/*trinity-14.1.4*
</syntaxhighlight>
* Cancellare eventuali script di configurazione "dimenticati" dal comando '''removepkg'''.
<syntaxhighlight lang="bash">
rm /etc/profile.d/tqt3.*
rm /etc/profile.d/trinity.*
</syntaxhighlight>
* Eseguire un logout per poi collegarsi come '''root''', in modo da reimpostare le variabili di ambiente e partire da una situazione ottimale.
* Installate o aggiornate i prerequisiti di TDE. Si tratta di una manciata di pacchetti tra cui:
:* '''Heimdall''';
:* '''Imlib''';
:* '''Linxslt''' per chi necessitasse il supporto al debug di file XML;
:* Compilatori ed altri strumenti di sviluppo;
:* I linguaggi di programmazione da integrare in TDE (Opzionale).
Non facendolo alcune delle funzionalità del Trinity Desktop Environment non verranno incluse nei pacchetti finali.
=== Preparare il Build Tree ===
Trinity Desktop Environment è costituito da una cinquantina di pacchetti che devono essere compilati ed installati nel giusto ordine. Il codice sorgente è distribuito nella forma di un archivio '''tar''' di grosse dimensioni. L'archivio deve essere decompresso e gli archivi estratti devono essere spostati nelle opportune cartelle.
* Scaricare e decomprimere [http://www.giustetti.net/resource/slackbuild/tde/1415/tde_build_tree_sg-14.1.5.tar.xz l'archivio contenente il build tree] in una directory della propria Linux Box. Solitamente ''/tmp'' oppure ''/usr/src/tde-14.1.5''.
* Scaricare e decomprimere l'archivio '''tar''' contenente il [https://mirror.ppa.trinitydesktop.org/trinity/releases/R14.1.5/R14.1.5-complete.tar codice sorgente di '''tutti''' i pacchetti].
* Distribuire gli archivi compressi in cui è organizzato il codice sorgente nelle opportune directory. Ogni archivio avente estensione '''tar.xz''' deve essere salvato nella directory avente lo stesso nome.
* Impostare le opzioni di configurazione per l'architettura della macchina su cui si sta installando. Nel caso di un processore Amd a 64 bit, ad esempio, eseguire i seguenti comandi
<syntaxhighlight lang="bash">
rm TDE.options
ln -s TDE.options.x86_64 TDE.options
</syntaxhighlight>
* Spostarsi nella directory contenete lo script principale: '''TDE.SlackBuild''':
<syntaxhighlight lang="bash">
cd ./tde_build_script/bin
</syntaxhighlight>
* Chi desiderasse preparare anche tutti i pacchetti di localizzazione, deve modificare lo script principale '''TDE.SlackBuild''' rimuovendo il commento dall'inizio della riga
<syntaxhighlight lang="bash">
# Build package
# bash ./${PKG}.SlackBuild
</syntaxhighlight>
in modo che diventi:
<syntaxhighlight lang="bash">
# Build package
bash ./${PKG}.SlackBuild
</syntaxhighlight>
* Lanciare lo script '''TDE.SlackBuild''' armandosi di pazienza.
<syntaxhighlight lang="bash">
sh ./TDE.SlackBuild
</syntaxhighlight>
Lo script eseguirà la compilazione, l'installazione e la configurazione automatica di tutti i pacchetti. Il tutto richiederà svariate ore. Al termine dell'operazione, TDE sarà installato e pronto all'uso. Lo script si fermerà prima della naturale conclusione solo nel caso incontrasse errori quali dipendenze mancanti, compilatori o linguaggi mancanti e simili.
* È possibile testare il funzionamento del Trinity Desktop Environment lanciando il comando '''startx''' e aspettando che l'interfaccia grafica venga caricata.
* Per ultimo, chi è solito avviare la macchina in modalità grafica deve chiudere la sessione di TDE e ritornare nel '''runlevel 4'''.
<syntaxhighlight lang="bash">
init 4
</syntaxhighlight>
----
=== Il Build Tree Aggiornato ===
Riporto un collegamento da cui scaricare un archivio che include tutti gli script di compilazione, le patch ed i file di configurazione: [http://www.giustetti.net/resource/slackbuild/tde/1415/tde_build_tree_sg-14.1.5.tar.xz tde_build_tree_sg-14.1.5.tar.xz]. L'archivio verrà aggiornato se e quando saranno rilasciate le patch per compilare il pacchetto '''LibTQt-Perl''', inutilizzabile al momento del rilascio.
----
== CONCLUSIONI ==
Il presente articolo ha descritto la procedura di installazione su Slackware Linux di '''TDE 14.1.5''' a partire dal codice sorgente. I punti principali della procedura per utilizzare gli script con profitto sono coadiuvati di alcuni comandi di esempio. Tutti i test di compilazione, installazione, configurazione e successivo uso sono stati condotti su '''macchine Amd a 64 bit e x86 a 32 bit su cui gira una versione di Slackware Linux 15.0 aggiornata all'ultimo rilascio'''. In conclusione, si rinnovano i doverosi ringraziamenti agli sviluppatori di '''TDE''' per l'impegno e gli sforzi compiuti e si rimanda al prossimo rilascio ufficiale.
Per commenti, consigli, domande inviate una e-mail all'indirizzo ''studiosg [chiocciola] giustetti [punto] net''.
Link esterni
----
* [http://www.slackware.com Home page di Slackware (In inglese)]
* [http://arm.slackware.com Slackware Linux per piattaforma ARM (In inglese)]
* [http://www.trinitydesktop.org Home page del progetto TDE (In inglese)]
* [https://mirror.ppa.trinitydesktop.org/trinity/releases/R14.1.5/downloads.html La pagina da cui scaricare il codice sorgente di TDE]
* [https://wiki.trinitydesktop.org/Release_Notes_For_R14.1.5 Note di rilascio per la versione 14.1.5 di TDE (In inglese)]
----
{{footer_it | link_page=en/Trinity_desktop_environment_14.1.5}}