Changes

17,436 bytes added ,  17:00, 26 March 2018
Aggiunto pagina relativa a WINE e GnuTLS
{{header_it|title=Crittografia, WINE e Slackware| keyword={{Template:keyword_it_wine}}| description=Pacchetti necessari per utilizzare la crittografia con WINE in Slackware Linux | link_page=En/wine_gnutls}}

== Slackware Linux, WINE Multi-libreria ed il Supporto alla Crittografia ==

WINE consente di installare ed utilizzare su '''Linux''' ed altri sistemi operativi della famiglia '''UNIX''' programmi pensati e scritti per '''Windows'''. L'elenco del software supportato è vasto, molto articolato ed include i programmi più disparati: applicazioni di produttività personale ed aziendale, giochi, programmi per il multimediale, browser di rete, utilià varie e molto altro ancora. Un progetto con obiettivi così ambiziosi non potrebbe sopravvivere contando solo sulle proprie forze ed infatti '''WINE si appoggia su di un folto gruppo di librerie''' di cui incamera le funzionalità. Alcune delle librerie incluse si appoggiano a loro volta su altre formando conseguentemente una catena di dipendenze. Non è sempre facile decifrare tale catena soprattutto su sistemi multi-libreria in cui pacchetti a 64 bit convivono con gli omonimi a 32.

In un [[wine_multimedia| precedente articolo]] mi ero occupato di WINE e dei pacchetti richiesti per sfruttare appieno le potenzialità di [https://it.wikipedia.org/wiki/GStreamer '''GStreamer''']: una piattaforma software modulare utilizzata da molte applicazioni dedicate al multimediale. I pacchetti ufficiali di '''Slackware includono infatti solo una parte dei plug-in e dei moduli di GStreamer''' ed è necessario compilarne ed installarne diversi altri per poter leggere tutti i formati audio e video supportati dalla piattaforma. Nel presente articolo mi occuperò di [https://gnutls.org '''GnuTLS''']: una libreria che implementa funzioni di crittografia impiegate da molte applicazioni di uso comune come i browser web, utilizzati per navigare in Internet, o i lettori di e-book. Come [https://it.wikipedia.org/wiki/GStreamer '''GStreamer'''] anche [https://gnutls.org '''GnuTLS'''] si basa su altre librerie e richiede che siano installate le proprie dipendenze per funzionare correttamente.

=== WINE, TLS e la Crittografia ===
[https://it.wikipedia.org/wiki/Transport_Layer_Security Transport Layer Security], in breve TLS, è un protocollo cifrato di comunicazione usato nel campo delle telecomunicazioni e dell'informatica. '''TLS permette una comunicazione sicura tra due punti di una rete TCP/IP''', Internet ad esempio, fornendo funzionalità di autenticazione, di controllo dell'integrità delle informazioni e ovviamente di cifratura delle stesse. Il protocollo HTTPS usato da molti siti web è forse l'esempio diffuso di impiego di TLS.

Linux dispone di un nutrito numero di browser, client di posta e, seppur in numero minore, di programmi per leggere e-book ed organizzare la propria collezione personale. Può capitare che un particolare sito supporti solo un browser non disponibile per Linux o che un negozio di libri elettronici non supporti nessun lettore che giri su Linux oppure che sia necessario utilizzare plug-in sviluppati solo per altre piattaforme. '''Esistono ragioni che costringono a ricorrere ad un programma sviluppato per Windows e di conseguenza a WINE'''.

I programmi Windows potrebbero richiedere funzionalità di crittografia. Nei browser si tratta di una eventualità molto frequente dato che numerosi siti utilizzano il protocollo cifrato '''HTTPS''' per trasferire le pagine web. I client di posta elettronica utilizzano la crittografia per collegarsi ad un server remoto garantendo la privacy dell'utenza. Infine i lettori di e-book utilizzano funzioni crittografiche per leggere i libri nel rispetto del diritto d'autore, per salvarli nel cloud o per acquistarli e scaricarli dai negozi virtuali. Per eseguire tutte le funzioni elencate '''Linux e, di conseguenza, WINE si appoggiano a [https://gnutls.org GnuTLS]'''. Affinchè i programmi lanciati con WINE possano sfruttare tutte le funzionalità di cui dispongono bisogna installare il pacchetto [https://gnutls.org '''GnuTLS'''] per la propria piattaforma e '''tutte le relative dipendenze'''.

=== Aggiornamento delle Librerie e delle Dipendenze ===
La crittografia rientra nel più ampio campo della sicurezza informatica. Data la delicatezza della materia i relativi componenti sono trattati con un occhio di riguardo dagli sviluppatori: patch e correzioni di errori sono rilasciati con una frequenza costante, spesso maggiore rispetto ad altre parti del sistema operativo. È consigliabile '''eseguire periodici aggiornamenti''' ed installare sempre l'ultima versione disponibile delle librerie crittografiche tra cui [https://gnutls.org '''GnuTLS'''] per non incorrere in errori già noti e risolti. È necessario però fare attenzione che gli aggiornamenti non introducano nuove dipendenze altrimenti programmi che fino a prima della manutenzione giravano egregiamente potrebbero smettere di funzionare correttamente.

L'eventualit&agrave; che venga a mancare una libreria in un rilascio ufficiale di Slackware &egrave; molto remota dato che '''gli sviluppatori si prodigano per fornire un sistema completo'''. Tale politica &egrave; seguita anche nel caso del rilascio di patch: se l'aggiornamento di un pacchetto richiedesse nuove dipendenze per le stesse vengono aggiunti i pacchetti necessari. Lo stesso discorso non vale purtroppo per i sistemi multi-libreria. <q>[https://alien.slackbook.org/blog/your-feedback/ I pacchetti compat32 non sono pensati per soddisfare tutte le possibili dipendenze, ma solo per far girare i principali programmi a 32 bit senza garantirne tutte le funzionalit&agrave;]</q>.

Ci&ograve; purtroppo '''&egrave; accaduto con l'aggiornamento rilasciato il 12 Gennaio scorso'''. Per correggere alcuni problemi di sicurezza gli sviluppatori di Slackware hanno introdotto l'uso del ramo 3.5.x di [https://gnutls.org '''GnuTLS'''] abbandonando l'ormai obsoleto 3.4.x. Slackware 14.2 al momento del rilascio includeva:
* gnutls-3.4.13-i586-1.txz per la versione a 32 bit.
* gnutls-3.4.13-x86_64-1.txz per la versione a 64 bit.
Il 12 Gennaio i pacchetti sono stati aggiornati e rimpiazzati da:
* gnutls-3.5.8-i586-1_slack14.2.txz per la versione a 32 bit.
* gnutls-3.5.8-x86_64-1_slack14.2.txz per la versione a 64 bit.
I pacchetti sostitutivi hanno introdotto tre nuove dipendenze:
* '''Gc''': Un Garbage Collector per i linguaggi di programmazione C e C++.
* '''Guile''': Libreria che contiene un interprete per il linguaggio Scheme.
* '''Libunistring''': Libreria di funzioni per manipolare le stringhe di testo Unicode.
Tutte e tre le librerie sono incluse in Slackware. Se non fossero gi&agrave; installate &egrave; possibile adeguarsi mediante il comando: '''installpkg''' <pacchetto>. '''I programmi che hanno smesso di funzionare riprenderanno a farlo immediatamente dopo l'installazione dei pacchetti mancanti''' senza che sia necessario apportare altre modifiche alla configurazione di sistema.

=== Sistemi Multi-Libreria ===
Per i sistemi multi-libreria il discorso si fa complicato perch&egrave; installare i pacchetti mancanti non basta. &Egrave; necessario installare anche i pacchetti a 32 bit altrimenti alcuni programmi continueranno a non funzionare dopo l'aggiornamento. A peggiorare uno scenario gi&agrave; complesso contribuisce il fatto che i pacchetti a 32 bit, come accennato precedentemente, non sono un insieme finito, ma mancano di alcune dipendenze. In altre parole '''non &egrave; garantito che installare un pacchetto e il suo corrispondente a 32 bit permetta ad un programma di girare con WINE'''. Nel caso di [https://gnutls.org '''GnuTLS'''], ad esempio, '''installare il pacchetto gnutls-compat32-3.5.8-x86_64-1_slack14.2compat32.txz''' non &egrave; sufficiente; bisogna installare anche i pacchetti a 32 bit corrispondenti alle dipendenze di [https://gnutls.org '''GnuTLS''']. L'elenco delle dipendenze include '''Gc''' ed il relativo pacchetto '''gc-compat32-7.4.2-x86_64-3compat32.txz''', disponibile nella sezione l-compat32, '''Libunistring''' di cui esiste un pacchetto: '''libunistring-compat32-0.9.3-x86_64-1compat32.txz''' sempre nella sezione l-compat32 ed infine '''Guile''' di cui purtroppo non esiste un pacchetto a 32 bit nel repository "ufficiale". Per installare le prime due dipendenze sar&agrave; sufficiente scaricare i file elencati ed utilizzare il comando '''installpkg''' come nell'esempio seguente:
'''installpkg''' gc-compat32-7.4.2-x86_64-3compat32.txz
'''installpkg''' libunistring-compat32-0.9.3-x86_64-1compat32.txz
Nel caso dell'ultima dipendenza: '''Guile''', bisogner&agrave; procedere come segue:
* Scaricare il pacchetto a 32 bit di Guile reperibile al [https://packages.slackware.com/?r=slackware-14.2&p=guile-2.0.11-i486-2.txz seguente indirizzo].
* Convertire il pacchetto in uno di compatibilit&grave; a 32 bit mediante lo script '''convertpkg-compat32''' contenuto nel pacchetto '''compat32-tools-3.7-noarch-15alien.tgz''':
'''convertpkg-compat32'' ''-i'' guile-2.0.11-i486-2.txz ''-d'' /tmp
Il pacchetto convertito sar&agrave; reperibile nella directory /tmp.
* Installare il pacchetto ottenuto con il comando
'''installpkg''' /tmp/guile-compat32-2.0.11-x86_64-2compat32.txz
Al termine dell'installazione tutte le funzionalit&agrave; della libreria [https://gnutls.org '''GnuTLS'''] a 32 bit inutilizzabili dopo l'aggiornamento ricominceranno a funzionare e di conseguenza ricominceranno a funzionare i programmi Windows a 32 bit con WINE. Browser, client di posta e lettori di e-book riprenderanno a collegarsi ai siti attraverso canali cifrati, a decifrare libri e documenti, ecc.

Per istruzioni dettagliate circa la conversione dei pacchetti nativi a 32 bit in pacchetti di compatibilit&agrave; per un sistema multi-libreria si rimanda al [http://www.slackware.com/~alien/multilib/ sito di Alien Bob].

=== Note per la Compilazione di WINE ===
I problemi di dipendenze mancanti '''si manifestano anche durante la compilazione e la pacchettizzazione di software'''. Il mancato funzionamento della libreria [https://gnutls.org '''GnuTLS'''] '''influisce durante la compilazione di WINE'''. Compilare WINE in assenza di tutte le dipendenze porta uno di due possibili risultati:
# Le relative funzionalit&agrave; verrebbero a mancare dal pacchetto finito. Ad esempio un web browser potrebbe essere incapace di collegarsi ad un sito attraverso il protocollo HTTPS, oppure un lettore di e-book potrebbe non essere in grado di aprire i relativi file.
# Nel caso in cui fosse impostato il flag ''--with-gnutls'' che obbliga il collegamento della libreria TLS, la procedura di compilazione fallirebbe rendendo il seguente errore:
checking for gnutls/gnutls.h... yes
checking for -lgnutls... not found
checking for gnutls_hash... no
configure: error: '''libgnutls 32-bit development files not found''', no schannel support.
This is an error since --with-gnutls was requested.

Per ovviare al problema sar&agrave; necessario installare [https://gnutls.org '''GnuTLS''']. Nel caso in cui pacchetti relativi fossero installati sul sistema bisegner&agrave; controllare le dipendenze degli stessi. '''Installando tutte le dipendenze mancanti la procedura di compilazione giunger&agrave; al termine con successo'''.

Per individuare le dipendenze mancanti di un pacchetto &egrave; possibile ricorrere al comando '''ldd''', che ha lo scopo di rendere l'elenco delle librerie condivise richieste da un eseguibile o una libreria per funzionare. Si supponga di cercare l'elenco delle dipendenze di [https://gnutls.org '''GnuTLS''']. Per farlo &egrave; possibile seguire la seguente procedura:
* Spulciare l'elenco dei file contenuti dal pacchetto alla ricerca di comandi, programmi eseguibili o librerie:
'''cat''' /var/log/packages/gnutls-compat32-3.5.8-x86_64-1_slack14.2compat32 | '''egrep''' "bin|lib" | '''grep''' ''-v'' ".la"
usr/bin/32/certtool
usr/bin/32/gnutls-cli
usr/bin/32/gnutls-cli-debug
usr/bin/32/gnutls-serv
usr/bin/32/ocsptool
usr/bin/32/p11tool
usr/bin/32/psktool
usr/bin/32/srptool
usr/lib/guile/2.0/guile-gnutls-v-2.so.0.0.0
usr/lib/guile/2.0/site-ccache/
usr/lib/guile/2.0/site-ccache/gnutls.go
usr/lib/guile/2.0/site-ccache/gnutls/
usr/lib/guile/2.0/site-ccache/gnutls/extra.go
usr/lib/libgnutls-openssl.so.27.0.2
usr/lib/libgnutls.so.30.13.1
usr/lib/libgnutlsxx.so.28.1.0
usr/lib/pkgconfig/gnutls.pc
* Interrogare i file nell'elenco per assicurarsi che le rispettive dipendenze siano soddisfatte:
'''ldd''' /usr/lib/guile/2.0/guile-gnutls-v-2.so.0.0.0
linux-gate.so.1 (0xf77db000)
libgnutls.so.30 => /usr/lib/libgnutls.so.30 (0xf75e5000)
libguile-2.0.so.22 => /usr/lib/libguile-2.0.so.22 (0xf747d000)
libgc.so.1 => /usr/lib/libgc.so.1 (0xf73c4000)
libpthread.so.0 => /lib/libpthread.so.0 (0xf73a7000)
libc.so.6 => /lib/libc.so.6 (0xf720e000)
libz.so.1 => /lib/libz.so.1 (0xf71f8000)
libp11-kit.so.0 => /usr/lib/libp11-kit.so.0 (0xf719f000)
libidn.so.11 => /usr/lib/libidn.so.11 (0xf716b000)
libunistring.so.0 => /usr/lib/libunistring.so.0 (0xf705a000)
libnettle.so.6 => /usr/lib/libnettle.so.6 (0xf701a000)
libhogweed.so.4 => /usr/lib/libhogweed.so.4 (0xf6fe7000)
libgmp.so.10 => /usr/lib/libgmp.so.10 (0xf6f75000)
libffi.so.6 => /usr/lib/libffi.so.6 (0xf6f6e000)
libltdl.so.7 => /usr/lib/libltdl.so.7 (0xf6f63000)
libdl.so.2 => /lib/libdl.so.2 (0xf6f5e000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0xf6f2a000)
libm.so.6 => /lib/libm.so.6 (0xf6ed6000)
/lib/ld-linux.so.2 (0x56640000)
'''ldd''' /usr/lib/libgnutls.so.30.13.1
linux-gate.so.1 (0xf7796000)
libz.so.1 => /lib/libz.so.1 (0xf75b7000)
libp11-kit.so.0 => /usr/lib/libp11-kit.so.0 (0xf755e000)
libidn.so.11 => /usr/lib/libidn.so.11 (0xf752a000)
libunistring.so.0 => /usr/lib/libunistring.so.0 (0xf7419000)
libnettle.so.6 => /usr/lib/libnettle.so.6 (0xf73d9000)
libhogweed.so.4 => /usr/lib/libhogweed.so.4 (0xf73a6000)
libgmp.so.10 => /usr/lib/libgmp.so.10 (0xf7334000)
libc.so.6 => /lib/libc.so.6 (0xf719c000)
libffi.so.6 => /usr/lib/libffi.so.6 (0xf7195000)
libdl.so.2 => /lib/libdl.so.2 (0xf7190000)
libpthread.so.0 => /lib/libpthread.so.0 (0xf7172000)
/lib/ld-linux.so.2 (0x5658b000)
...

Se una dipendenza non fosse soddisfatta comparirebbe la stringa "'''not found'''" a seguito dell'operatore "=>" anzich&egrave; il file puntato.
* Individuare ed installare i pacchetti contenti le eventuali librerie mancanti. Non esiste una vera procedura per eseguire la ricerca, ma &egrave; necessario far lavorare l'intuito. Il nome del file ad esempio potrebbe fornire indizi circa il pacchetto di appartenenza. &Egrave; possibile eseguire una ricerca nell'elenco dei file disponibile in ogni CDROM o DVD di installazione di Slackware Linux. &Egrave; possibile anche utilizzare il [https://packages.slackware.com/ package finder] disponibile sul sito di Slackware impostando la modalit&agrave; di ricerca "content", che ispeziona il contenuto dei pacchetti anzich&egrave; il solo nome. I due suggerimenti possono aiutare molto nel caso di pacchetti ufficiali, meno per librerie di terze parti e pacchetti di altra provenienza. In tali casi forse la soluzione migliore consiste nell'interrogare un motore di ricerca in Internet.

Quale che sia la strada seguita, una volta installate tutte le dipendenze i problemi di compilazione spariranno e sar&agrave; possibile ottenere una versione funzionante di WINE per Slackware Linux.


== Conclusioni ==

'''WINE &egrave; un ottimo strumento per far girare programmi che utilizzino la crittografia scritti per Windows su sistemi Linux / Unix a patto di installare tutte le dipendenze necessarie'''. La mancata installazione delle dipendenze pu&ograve; causare notevoli problemi fino al crash apparentemente inspiegabile delle applicazioni. Nel presente articolo &egrave; stato trattato il caso di [https://gnutls.org '''GnuTLS'''] il cui ultimo aggiornamento pu&ograve; causare problemi al software a 32 bit, qualora giri su di un ambiente multi-libreria, ed alla procedura di compilazione di WINE. &Egrave; stata diagnosticata ed esposta la causa di tali problemi nel bisogno di dipendenze dei pacchetti di compatibilit&agrave; a 32 bit e sviscerata una procedura per risolvere tali problemi.


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


Link esterni
----
* [https://gstreamer.freedesktop.org Home page di GStreamer]
* [https://it.wikipedia.org/wiki/GStreamer Pagina di Wikipedia dedicata a GStreamer]
* [http://www.slackware.com Home page di Slackware]
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:multilib Pagina di Alien Bob dedicata a Slackware multilib]
* [http://www.winehq.org Home page di WINE]
* [https://it.wikipedia.org/wiki/Transport_Layer_Security Pagina di Wikipedia dedicata a TLS]
* [https://it.wikipedia.org/wiki/GnuTLS Pagina di Wikipedia dedicata all'implementazione GNU di TLS]
* [https://gnutls.org Home page del progetto GnuTLS]

----

{{footer_it | link_page=En/wine_gnutls}}