Wine gnutls

From Studiosg
Revision as of 13:48, 21 March 2022 by Wikiuser (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Benvenuti nella pagina Wiki di Simone Giustetti.


Lingue: English - Italiano


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 precedente articolo mi ero occupato di WINE e dei pacchetti richiesti per sfruttare appieno le potenzialità di 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 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 GStreamer anche GnuTLS si basa su altre librerie e richiede che siano installate le proprie dipendenze per funzionare correttamente.

WINE, TLS e la Crittografia

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 GnuTLS. Affinchè i programmi lanciati con WINE possano sfruttare tutte le funzionalità di cui dispongono bisogna installare il pacchetto 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 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à che venga a mancare una libreria in un rilascio ufficiale di Slackware è molto remota dato che gli sviluppatori si prodigano per fornire un sistema completo. Tale politica è 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. 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à.

Ciò purtroppo è 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 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à installate è 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è installare i pacchetti mancanti non basta. È necessario installare anche i pacchetti a 32 bit altrimenti alcuni programmi continueranno a non funzionare dopo l'aggiornamento. A peggiorare uno scenario già 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 è garantito che installare un pacchetto e il suo corrispondente a 32 bit permetta ad un programma di girare con WINE. Nel caso di GnuTLS, ad esempio, installare il pacchetto gnutls-compat32-3.5.8-x86_64-1_slack14.2compat32.txz non è sufficiente; bisogna installare anche i pacchetti a 32 bit corrispondenti alle dipendenze di 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à 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à procedere come segue:

  • Scaricare il pacchetto a 32 bit di Guile reperibile al 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à 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à della libreria 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à per un sistema multi-libreria si rimanda al 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 GnuTLS influisce durante la compilazione di WINE. Compilare WINE in assenza di tutte le dipendenze porta uno di due possibili risultati:

  1. Le relative funzionalità 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.
  2. 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à necessario installare GnuTLS. Nel caso in cui pacchetti relativi fossero installati sul sistema bisegnerà controllare le dipendenze degli stessi. Installando tutte le dipendenze mancanti la procedura di compilazione giungerà al termine con successo.

Per individuare le dipendenze mancanti di un pacchetto è 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 GnuTLS. Per farlo è 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è il file puntato.

  • Individuare ed installare i pacchetti contenti le eventuali librerie mancanti. Non esiste una vera procedura per eseguire la ricerca, ma è necessario far lavorare l'intuito. Il nome del file ad esempio potrebbe fornire indizi circa il pacchetto di appartenenza. È possibile eseguire una ricerca nell'elenco dei file disponibile in ogni CDROM o DVD di installazione di Slackware Linux. È possibile anche utilizzare il package finder disponibile sul sito di Slackware impostando la modalità di ricerca "content", che ispeziona il contenuto dei pacchetti anzichè 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à possibile ottenere una versione funzionante di WINE per Slackware Linux.


Conclusioni

WINE è 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ò causare notevoli problemi fino al crash apparentemente inspiegabile delle applicazioni. Nel presente articolo è stato trattato il caso di GnuTLS il cui ultimo aggiornamento può causare problemi al software a 32 bit, qualora giri su di un ambiente multi-libreria, ed alla procedura di compilazione di WINE. È stata diagnosticata ed esposta la causa di tali problemi nel bisogno di dipendenze dei pacchetti di compatibilità 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





Lingue: English - Italiano