Cosa fa "echo ipv4 >> ~ / .curlrc"?


8

Stavo affrontando qualche problema oggi quando ho provato a installare il compositore con il comando seguente:

curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

Mi stava dando questo errore:

curl: (7) Failed to connect to getcomposer.org port 443: Network is unreachable

Ho cercato su Google e ho trovato questo comando :

echo ipv4 >> ~/.curlrc

Ho eseguito questo e risolto il problema e il compositore è stato installato correttamente.

Ma non so cosa faccia il comando sopra, qualcuno potrebbe spiegarlo?


@Melebius Aggiunto link :)
Prashant Kumar

Risposte:


9

Ciò che fa è aggiungere "ipv4" al file "curlrc". Esempio che inizia con un file vuoto:

$ touch 1
$ more 1
$ echo ipv4 >> 1
$ more 1
ipv4

Fondamentalmente forza il ricciolo a usare ipv4.


Il manuale ha questo da dire al riguardo:

IPv6

curl si connetterà a un server con IPv6 quando una ricerca host restituisce un indirizzo IPv6 e ricadrà su IPv4 se la connessione fallisce. Le opzioni --ipv4e --ipv6possono specificare quale indirizzo utilizzare quando entrambi sono disponibili. Gli indirizzi IPv6 possono anche essere specificati direttamente negli URL usando la sintassi


Ho eseguito solo quel comando, ha funzionato quindi immagino che sia corretto. Solo una domanda, perché il mio compositore non stava lavorando al primo posto e perché ha funzionato dopo questo comando. Il che credo significhi che il curl precedente stava cercando di usare la rete ipv6, che in realtà non è configurata. È o qualcos'altro?
Prashant Kumar

Suppongo che fosse sì: la connessione si è rifiutata perché dove l'hai presa da ipv6 previsto. Questa modifica del file forza ipv4.
Rinzwind,

ma come hai detto curl will connect to a server with IPv6 when a host lookup returns an IPv6 address and fall back to IPv4 if the connection failsallora perché il mio sistema ha appena dato l'errore invece di provare ad accedere a ipv4 da solo se non ha trovato l'ipv6.
Prashant Kumar

1
.curlrcusa i nomi delle opzioni senza il carattere iniziale -o --.
Chepner,

5

Una convenzione tipica in UNIX è che i programmi (di solito) leggono la loro configurazione di avvio da vari file predefiniti. Questa è semplicemente una tradizione, non qualcosa definito da POSIX o da qualsiasi altro standard. Un tipico programma UNIX, ad esempio foobar, leggerebbe, nel seguente ordine di precedenza:

~/.foobarrc  ## User specific configuration parameters
/etc/foobarrc  ## Global parameters, depending on taste
               ## `/etc/foobar/*(.conf)' might be chosen too 

Potrebbe esserci un fallback /usr/share/ma questo non è molto comune.

Quindi, curlqui seguendo la convenzione e leggendo la sua configurazione iniziale da ~/.curlrc. E facendo echo ipv4 >>~/.curlrc, hai aggiunto la stringa ipv4al file ~/.curlrc.

La stringa ipv4ha un significato speciale per curl- curlutilizzerà quindi IPv4 per la risoluzione dell'host. Ciò è analogo all'utilizzo dell'argomento -4/ ipv4as curldalla riga di comando, ma il salvataggio per ~/.curlrcrenderlo permanente.

Come hai impostato ipv4lì e ora tutto funziona per te, presumibilmente hai configurato IPv6 e in curlprecedenza utilizzavi IPv6 per la risoluzione (riuscita) dell'host, quindi nessun fallback a IPv4. La connessione al sito falliva perché non tutti i siti hanno i loro server web configurati per l'ascolto su indirizzi IPv6, quindi la socket()chiamata fallirebbe come possiamo vedere in questo caso.


1
In pratica, tuttavia, /etc/foobar.confverrebbe letto per primo, quindi ~/.foobarrc, in modo che quest'ultimo possa scavalcare il primo. Quindi, se /etc/foobar.confcontiene una linea che dice frobnitz=0, e ~/.foobarrcha frobnitz=1, prevale quest'ultimo valore
Monty Harder,

@MontyHarder Questo è esattamente ciò che intendevo per ordine di precedenza ...
heemayl

Sì, ordine di precedenza, non ordine di lettura.
Monty Harder,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.