O que faz “echo ipv4 ~ / .curlrc”?

8

Eu estava enfrentando algum problema hoje ao tentar instalar o compositor com o comando abaixo:

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

Estava me dando esse erro:

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

Eu pesquisei no Google e encontrei este comando :

echo ipv4 >> ~/.curlrc

Corri isso e consertei o problema e o compositor instalados bem.

Mas eu não sei o que o comando acima faz, alguém poderia explicar isso?

    
por Prashant Kumar 25.05.2017 / 13:50

2 respostas

9

O que é isso é adicionar "ipv4" ao arquivo "curlrc". Exemplo começando com um arquivo vazio:

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

Basicamente, força o curl a usar o ipv4.

O manual tem a dizer sobre isso:

  

IPv6

     O

curl se conectará a um servidor com IPv6 quando uma pesquisa de host retornar um endereço IPv6 e voltar para o IPv4 se a conexão falhar. As opções --ipv4 e --ipv6 podem especificar qual endereço usar quando ambos estiverem disponíveis. Endereços IPv6 também podem ser especificados diretamente em URLs usando a sintaxe

    
por Rinzwind 25.05.2017 / 13:53
5

Uma convenção típica no UNIX é que os programas (normalmente) lêem sua configuração de inicialização de vários arquivos predefinidos. Isto é meramente uma tradição, não algo definido por POSIX ou qualquer outro padrão. Um programa típico do UNIX, por ex. foobar iria ler, na seguinte ordem de precedência:

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

Pode haver um retorno em /usr/share/ , mas isso não é muito comum.

Então, curl aqui seguindo a convenção e lendo a configuração inicial de ~/.curlrc . E fazendo echo ipv4 >>~/.curlrc , você incluiu a string ipv4 no arquivo ~/.curlrc .

A string ipv4 tem um significado especial para curl - curl usará o IPv4 para a resolução do host. Isso é análogo ao uso do argumento -4 / ipv4 as curl na linha de comando, mas salvar em ~/.curlrc torna isso permanente.

Como você definiu ipv4 lá e agora tudo funciona para você, presumivelmente você configurou o IPv6 e curl estavam usando o IPv6 anteriormente para a resolução do host (bem-sucedida), portanto, não há retorno para o IPv4. A conexão com o site estava falhando porque nem todos os sites têm seus servidores da Web configurados para ouvir em endereços IPv6, portanto, a chamada socket() falharia, como podemos ver neste caso.

    
por heemayl 25.05.2017 / 14:12