gnurl (libgnurl)

motivation rename using gotchas source downloads building reporting maintainer

libgnurl è una micro fork di libcurl. L'obiettivo di libgnurl è supportare solo HTTP e HTTPS (e solo HTTP 1.x) con un'unica back-end crittografica (GnuTLS) per garantire un ingombro ridotto e un'esperienza uniforme per gli sviluppatori, a prescindere da come è stato compilato libcurl.

Il nostro caso d'uso principale è per GNUnet e Taler, ma potrebbe essere usato per altro, quindi stiamo pubblicando il codice per il grande pubblico.

libgnurl viene rilasciato sotto la stessa licenza di libcurl. Leggere README per le istruzioni, perché bisogna impostare le opzioni correttamente per la configurazione e ottenere una giusta compilazione di libgnurl.

Informazioni su gnurl

Gran parte dei sei paragrafi qui di seguito contengono informazioni obsolete e devono essere riscritti.

Motivazione

cURL supporta molti back-end crittografici. GNUnet necessita dell'uso di GnuTLS, ma alcune distribuzioni usano altre varianti. Supportare altri back-end crittografici ci esporrebbe di nuovo a una gamma più ampia di problemi di sicurezza, potrebbe provocare problemi con le licenze e, soprattutto, potrebbe introdurre nuovi bug, poiché è risaputo che alcuni back-end crittografici provocano problemi di runtime impercettibili. Sebbene sia possibile avere due versioni di libcurl installate sullo stesso sistema, è tendente all'errore, soprattutto perché se siamo collegati alla versione sbagliata, i bug che si verificano potrebbero essere piuttosto impercettibili.

Per GNUnet è necessaria anche una versione particolarmente moderna di GnuTLS. Quindi sarebbe comunque necessario ricompilare cURL per GNUnet. Cosa succede però se si collega cURL a questa versione di GnuTLS? Per prima cosa si dovrebbe installare GnuTLS a mano nel sistema. Poi si compila cURL. Non ci sarebbero problemi per la sua compilazione, ma il linker alla fine si lamenterà amaramente, perché cURL si collega anche a una serie di altre librerie di sistema (gssapi, ldap, ssh2, rtmp, krb5, sasl2; per la discussione sui protocolli oscuri, vedi sopra) che, in quanto parte della distribuzione, erano collegate a versioni precedenti di GnuTLS. Ecco la tipica ricetta per un disastro. Per evitare di aggiornare una dozzina di librerie di sistema (e averne due versioni installate), bisogna disabilitare tutte le funzionalità di cURLS che GNUnet non usa, e sono molte. Per GNUnet, i protocolli più oscuri supportati da cURL sono simili a un codice non usato, principalmente innocui, ma inutili. Tuttavia, dato che alcune applicazioni potrebbero usare una di queste funzionalità, le distribuzioni di solito sono costrette ad abilitarle tutte, inclusi i problemi di sicurezza che potrebbero derivare da quel codice.

Quindi per usare una versione moderna di GnuTLS, l'approccio giusto è disattivare tutte le funzionalità "opzionali" di cURL che trascinano con loro librerie di sistema che si collegano allo GnuTLS precedente. È una soluzione che funziona, tranne per il fatto che poi non si dovrebbe MAI installare quella versione di libcurl in /usr o /usr/ locali, poiché potrebbe creare problemi ad altre parti del sistema che potrebbero dipendere dalle funzionalità appena disattivate. Il controllo delle versioni Libtool non è di aiuto, perché non è progettato per gestire librerie con funzionalità opzionali. Ovviamente, anche installare cURL da un'altra parte è problematico, perché bisognerà accertarsi che il linker colleghi GNUnet alla versione corretta. Nessuno di questi problemi può essere realmente risolto con facilità dagli sviluppatori cURL.

Rinomina per risolvere

How does forking fix it? Easy. First, we can get rid of all of the compatibility issues --- if you use libgnurl, you state that you don't need anything but HTTP/HTTPS. Those applications that need more, should stick with the original cURL. Those that do not, can choose to move to something simpler. As the library gets a new name, we do not have to worry about tons of packages breaking as soon as one rebuilds it. So renaming itself and saying that "libgnurl = libcurl with only HTTP/HTTPS support and GnuTLS" fixes 99%% of the problems that darkened my mood. Note that this pretty much CANNOT be done without a fork, as renaming is an essential part of the fix. Now, there might be creative solutions to achieve the same thing within the standard cURL build system, but this was deemed to be too much work when gnurl was originally started. The changes libgnurl makes to curl are miniscule and can easily be applied again and again whenever libcurl makes a new release.

Usare libgnurl

Progetti che usano cURL per HTTP/HTTPS e che funzionerebbero con GnuTLS dovrebbero essere in grado di cambiare a lbgnurl cambiando "-lcurl" a "lgnurl". Tutto qui. Nessun cambio al codice della sorgente dovrebbe essere richiesto, dato che libgnurl lotta per una compatibilità bug-for-bug con i subset di cURL: HTTP/HTTPS/GnuTLS. Potremmo aggiungere nuovi componenti relazionati con questo subset se ci vengono proposti, ma finora abbiamo mantenuto al minimo i cambiamenti e niente è stato aggiunto alla sorgente originaria curl.

Trabocchetti

libgnurl e gnurl non sono stati pensati per essere usati come rimpiazzo per gli utenti curl:
Questo non significa che non ci sia fiducia nel lavoro fatto con gnurl, ma che questi strumenti non useranno un binario e biblioteca chiamati diversamente. Se sai cosa fai, dovresti essere in grado di usare gnurl nei tuoi strumenti invece di curl. Non consigliamo di farlo comunque, visto che l'unico uso per cui è stato testato finora è come parte dei sistemi Taler's e GNUnet's.
Dal momento che non ci sono conflitti nei nomi dei file non dovresti rimuovere curl per usare gnurl e viceversa.

Codice sorgente

È possibile ottenere l'archivio git gnurl usando:

  • git clone https://git.taler.net/gnurl.git
  • git clone git://git.taler.net/gnurl.git

Le versioni sono registrate come git tag (firmate).

Download

Le versioni sono pubblicate su ftpmirror.gnu.org/gnu/gnunet. È possibile trovare gnurl all'interno di un'ampia gamma di distribuzioni e gestori di pacchetti. Tra i Gestori di pacchetti che includono gnurl ci sono: GNU Guix (disponibile come "gnurl"), Gentoo tramite la raccolta di ebuild collaborativa youbroketheinternet, Nix e come www/gnurl in pkgsrc.

Compilare gnurl

Consigliamo di seguire attentamente gli annunci sulle versioni, perché potrebbero indicare modifiche nel modo in cui gnurl viene compilato.
Se il tuo gestore di pacchetti fornisce una compilazione binaria o istruzioni per compilare gnurl da sorgenti automatiche e integrate nel tuo ambiente, consigliamo caldamente di usare questa compilazione binaria.
Esistono due modi per compilare gnurl: il primo consiste nella compilazione dal git tag più recente, mentre il secondo usa il tarball distribuito. Di solito, i distributori dovrebbero compilare dal tarball, ma in questo caso descriviamo entrambi i metodi. I metodi sono scritti tenendo conto di uno spazio utente NetBSD 9, sostituisci gli strumenti se necessario.
Si dovrebbe evitare di compilare gnurl dalla cima del ramo git di default, perché solo i tag sono considerate compilazioni stabili e approvate.

Compilazione dal tarball distribuito (metodo preferibile)

Installare uno strumento OpenPGP compatibile come security/gnupgp2 (e configurarlo) per verificare la firma. Se si usa pkgin:

  • pkgin update
  • pkgin install gnupg2

Ottieni la chiave della firma su keys.openpgp.org o tramite riga di comando con gnupg2.

Recupera la versione, la firma, il file checksum e la sua firma:

  • ftp https://ftpmirror.gnu.org/gnu/gnunet/gnurl-7.65.3.tar.Z
  • ftp https://ftpmirror.gnu.org/gnu/gnunet/gnurl-7.65.3.tar.Z.sig
  • ftp https://ftpmirror.gnu.org/gnu.org/gnunet/gnurl-7.65.3.sum.txt
  • ftp https://ftpmirror.gnu.org/gnu.org/gnunet/gnurl-7.65.3.sum.txt.sig

verifica le firme e i checksum confrontandoli con i checksum nel file .sum.txt.

decomprimere il tarball:

  • tar -zxf gnurl-7.65.3.tar.Z

Passare alla directory

  • cd gnurl-7.65.3

Ora è possibile eseguire

  • ./configure

direttamente (e leggere configurare-gnurl prima di farlo) o richiamare

  • ./configure-gnurl

e passare parametri aggiuntivi come una posizione PREFIX personalizzata. Per maggiori informazioni consultare il www/gnurl Makefile. Quindi, eseguire

  • make
  • make check (opzionale)
  • make install

ecco fatto.

Compilare da un commit git contrassegnato

Segui le istruzioni sopra ma, anziché scaricare il tarball, clona il tag git da cui vuoi compilare.

Report dei Bug

È possibile segnalare i bug sul nostro registro bug: bugs.gnunet.org. Oppure, è possibile usare la mailing list per i bug, ma è preferibile segnalarli sul registro bug.

Maintainer e firme Crittografiche

gnurl/libgnurl è alla ricerca di un nuovo maintainer. Le versioni successive alla 7.69.1 fino alla 7.72.0 sono state firmate con la chiave OpenPGP 0xD6B570842F7E7F8D (keys.openpgp.org, con impronta digitale della chiave 6115 012D EA30 26F6 2A98 A556 D6B5 7084 2F7E 7F8D.