Erro de certificado Curl ao usar RVM para instalar Ruby 1.9.2

90

O RVM está executando um erro de certificado ao tentar fazer o download do Ruby 1.9.2. Parece que curlestá havendo um problema de certificado, mas não tenho certeza de como contorná-lo. Eu incluí as informações exatas do erro abaixo.

$ rvm install 1.9.2
Installing Ruby from source to: /Users/willdennis/.rvm/rubies/ruby-1.9.2-p180, this may take a while depending on your cpu(s)...

ruby-1.9.2-p180 - #fetching 
ERROR: Error running 'bunzip2 '/Users/willdennis/.rvm/archives/ruby-1.9.2-p180.tar.bz2'', please read /Users/willdennis/.rvm/log/ruby-1.9.2-p180/extract.log
ruby-1.9.2-p180 - #extracting ruby-1.9.2-p180 to /Users/willdennis/.rvm/src/ruby-1.9.2-p180
ruby-1.9.2-p180 - #extracted to /Users/willdennis/.rvm/src/ruby-1.9.2-p180
Fetching yaml-0.1.3.tar.gz to /Users/willdennis/.rvm/archives

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). The default
 bundle is named curl-ca-bundle.crt; you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
ERROR: There was an error, please check /Users/willdennis/.rvm/log/ruby-1.9.2-p180/*.log. Next we'll try to fetch via http.
Trying http:// URL instead.

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). The default
 bundle is named curl-ca-bundle.crt; you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
ERROR: There was an error, please check /Users/willdennis/.rvm/log/ruby-1.9.2-p180/*.log
Extracting yaml-0.1.3.tar.gz to /Users/willdennis/.rvm/src
ERROR: Error running 'tar zxf /Users/willdennis/.rvm/archives/yaml-0.1.3.tar.gz -C /Users/willdennis/.rvm/src --no-same-owner', please read /Users/willdennis/.rvm/log/ruby-1.9.2-p180/yaml/extract.log
/Users/willdennis/.rvm/scripts/functions/packages: line 55: cd: /Users/willdennis/.rvm/src/yaml-0.1.3: No such file or directory
Configuring yaml in /Users/willdennis/.rvm/src/yaml-0.1.3.
ERROR: Error running ' ./configure --prefix="/Users/willdennis/.rvm/usr"  ', please read /Users/willdennis/.rvm/log/ruby-1.9.2-p180/yaml/configure.log
Compiling yaml in /Users/willdennis/.rvm/src/yaml-0.1.3.
ERROR: Error running '/usr/bin/make ', please read /Users/willdennis/.rvm/log/ruby-1.9.2-p180/yaml/make.log
Installing yaml to /Users/willdennis/.rvm/usr
ERROR: Error running '/usr/bin/make install', please read /Users/willdennis/.rvm/log/ruby-1.9.2-p180/yaml/make.install.log
ruby-1.9.2-p180 - #configuring 
ERROR: Error running ' ./configure --prefix=/Users/willdennis/.rvm/rubies/ruby-1.9.2-p180 --enable-shared --disable-install-doc --with-libyaml-dir=/Users/willdennis/.rvm/usr ', please read /Users/willdennis/.rvm/log/ruby-1.9.2-p180/configure.log
ERROR: There has been an error while running configure. Halting the installation.

Como posso resolver ou evitar esse erro?

Will Dennis
fonte
você instalou todas as dependências anteriores para compilar essa versão do Ruby?
eveevans
Todo o problema e a solução sugerida são declarados na mensagem de erro muito longa. Não acho que repetir esse texto em uma resposta aqui vai ajudar muito. Comece lendo sobre os URLs mencionados.
Daniel Stenberg
2
@daniel Exceto que a maneira normal de fazer curl parar de reclamar de um certificado SSL inválido, -k, não pode ser usada aqui, porque curl está sendo conduzido por rvm. BTW, você deve pensar cuidadosamente se realmente deseja permitir que o curl ignore certificados SSL inválidos. Uma coisa que você pode tentar é dar ao curl um pacote CA mais recente . A resposta de @dorothy abaixo deve funcionar.
Dan Barowy
@dan: então leia a mensagem de erro novamente. Não sugere que você ignore certificados inválidos (escrevi aquela mensagem de erro), explica claramente o que você pode fazer e fornece um URL com uma descrição completa, incluindo detalhes sobre como obter certificados de CA atualizados.
Daniel Stenberg
1
@daniel: a questão é que a mensagem de erro é para curl, não para rvm! Você pode ler a solução sugerida pelo curl o quanto quiser, mas se não puder modificar a invocação do curl pelo rvm, você está preso. Eu mesmo tentei atualizar o pacote SSL do curl (configurando CURL_CA_BUNDLE) e não funcionou - na verdade, há algo errado com o certificado SSL remoto que hospeda o tarball do yaml, não apenas um pacote CA curl desatualizado. Dizendo que um usuário RTFM é bom se lendo a saída realmente faz corrigir o problema, mas isso é não o caso aqui. Novamente, veja a resposta abaixo que realmente corrige o problema.
Dan Barowy

Respostas:

125

Caso mais alguém descubra isso ao tentar atualizar para 1.9.3 (embora a versão provavelmente não importe), verifique a versão do rvm que você tem. Wayne parece ter mudado de rvm.beginrescueend.com para rvm.io. O certificado de segurança do site antigo expirou, então a resposta do curl está correta.

Atualizar o rvm do novo site corrigiu esse problema e me permitiu seguir em frente.

$ \curl -L https://get.rvm.io | bash -s stable --rails --autolibs=enabled

Atualização : Como @rodgerdpack mencionou, o comando muda e eu atualizei o acima. Em geral, consulte https://rvm.io/ para obter as últimas.

jwadsack
fonte
1
Eu gostaria de ter visto essa resposta primeiro. A instalação do 1.9.3 no Mac OS X com RVM não funcionava, mesmo com as soluções propostas acima. Atualizar o RVM resolveu, no entanto.
chris_radcliff
Isso foi o que funcionou para mim também (atualização de 1.9.2 para 1.9.3) obrigado @jwadsack
Anna Billstrom
hoje em dia, executar o comando que você mencionou dá uma mensagem que diz "você está executando um pacote ubuntu antigo e quebrado, consulte stackoverflow.com/questions/9056008/… para saber como corrigi-lo"
rogerdpack
40

Se você não quiser alterar o script E não quiser adicionar um certificado "para sempre" ao pacote de certificados . Existe uma solução muito boa e rápida:

#to download the cert
wget http://curl.haxx.se/ca/cacert.pem
#to let curl use it for the next calls
export CURL_CA_BUNDLE=~/cacert.pem

Em seguida, execute seu script. Para redefinir a variável de ambiente (para chamadas de script subsequentes que não devem usar este certificado), faça o login novamente em seu sistema ou cancele a definição da variável de ambiente:

export CURL_CA_BUNDLE=
DanielaWaranie
fonte
Isso corrigiu um problema com o yaml, mas tenho outros problemas com alguma outra parte da complicação.
Emerson
4
Agora posso instalar o rvm no CentOS. Muito obrigado
channa ly
Não faz nada no OSX Lion w / rvm 1.8.3.
Mark Richman
Funciona bem no Centos5.4. Obrigado.
Yejun Su
Funciona perfeitamente no OSX Mountain Lion para obter o Ruby 2.0.0.
Arkan
21

Curl é chamado em .rvm / scripts / fetch, que por padrão estará em seu diretório inicial.

Edite-o usando seu editor de texto favorito: por exemplo,

 nano ~/.rvm/scripts/fetch

Nas linhas 56 e 58 (pode variar com outras versões do RVM, é claro), você verá duas linhas que começam

 fetch_command="curl ...

Simplesmente adicione -k após curl, salve e tente novamente.

Richard Fairhurst
fonte
9
Não funcionou para mim, mas segui sua ideia e descobri esta alternativa: Crie um arquivo ".curlrc" em sua pasta de início ('~ / .curlrc'). Abra-o em qualquer editor e digite "inseguro" no arquivo. Salve o arquivo e espere pelo melhor.
Julian Weimer
8
RVM nunca incluirá essa mudança, nós desencorajamos fazê-lo desta forma, se você precisar usar inseguro (-k) apenas chame echo insecure >> ~/.curlrcou ainda melhor apenas atualize os certificados de acordo com as instruções do
@dbikard
trabalhou no debian squeeze. Mesmo os posts mais antigos podem economizar muito tempo;) thx!
23 de
@mpapis Eu concordo totalmente, mas um erro explicando, por exemplo, a solução do user620965 nos erros de instalação RVM seria ótimo
Houen
3
Provavelmente, isso se deve à alteração da URL para rvm.io mencionada na postagem abaixo e é a maneira correta de resolver isso. Você não precisa ignorar certificados SSL ou comportamento curl. Basta atualizar o rvm a partir do URL adequado, emitindo $ curl -L get.rvm.io | bash -s stable conforme mostrado abaixo
cclark
20

Você precisa fazer download do certificado ca de http://curl.haxx.se/ca/cacert.pem e adicioná-los ao arquivo curl-ca-bundle-new.crt.

Para encontrar a localização deste arquivo, use:

   $ curl-config --ca

   /usr/share/curl/curl-ca-bundle.crt

Faça backup do seu arquivo curl-ca-bundle.crt:

$ cp /usr/share/curl/curl-ca-bundle.crt /usr/share/curl/curl-ca-bundle.crt.old

Então você deseja concatenar os dois arquivos usando:

$ cat cacert.pem /usr/share/curl/curl-ca-bundle.crt >> curl-ca-bundle-new.crt
dbikard
fonte
Obrigado, você me salvou algum tempo!
Tadas T
Isso (teria) me economizado HORAS no OpenIndiana 151. Se eu pudesse votar positivamente mais de uma vez, eu o faria.
Andrew Burns
Isso funcionou para mim no CentOS 5.8; Os certificados estão localizados em / etc / pki / certs / para aqueles que precisam encontrá-los no CentOS!
geedew de
E o que você faz com o curl-ca-bundle-new.crt resultante?
Valerio Schiavoni
O novo arquivo de certificado deve estar presente no diretório encontrado usando 'curl-config --ca'.
Anirudh
17

Talvez todas essas soluções complicadas já tenham sido necessárias, mas agora tudo o que você precisa fazer é primeiro atualizar o RVM e seu problema será resolvido:

$ rvm get stable
$ rvm reload
$ rvm install ruby-1.9.3-p194
Nick Messick
fonte
2
Infelizmente, se a sua versão do RVM for antiga o suficiente, "rvm get head" nem mesmo funciona. A resposta de @jwadsack explica por quê.
Alex D
Sim, é verdade. Além disso, olhando para minha resposta, "rvm get head" também não é o melhor conselho. Realmente deveria ser "rvm get stable". Vou editar minha resposta para refletir isso.
Nick Messick de
14

Se você não se importa em desativar a verificação de certificado em curl (eu não):

echo insecure > ~/.curlrc
Vojto
fonte
11

No Centos 5.6 (Final) tive um problema ao instalar o rvm 1.9.2 O erro foi:

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). The default
 bundle is named curl-ca-bundle.crt; you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
ERROR: There was an error, please check /usr/local/rvm/log/ruby-1.9.2-p290/*.log. Next we'll try to fetch via http.
Trying http:// URL instead.

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). The default
 bundle is named curl-ca-bundle.crt; you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
ERROR: There was an error, please check /usr/local/rvm/log/ruby-1.9.2-p290/*.log
ERROR: There has been an error while trying to fetch the source.  
Halting the installation.
ERROR: There has been an error fetching the ruby interpreter. Halting the installation.

Aqui está uma lista de ações que me ajudaram a resolver o problema

$ curl-config --ca # show path to the certificate
/usr/local/share/curl/curl-ca-bundle.crt
$ cd /usr/local/share/curl/ # go to that path
$ cp curl-ca-bundle.crt curl-ca-bundle.crt.bak # backup certificate
$ curl http://curl.haxx.se/ca/cacert.pem -o curl-ca-bundle.crt # download new
$ rvm install 1.9.2 # bingo it works

Btw versão curl é curl 7.18.0 (para verificar '$ curl -V')

Serge Seletskyy
fonte
1
Boa solução, no meu caso tive este erro ao executar "rvm get head". E tome cuidado no linux com o nome do arquivo curl-ca-bundle.crt! é diferente
Albert Català
3

Eu estava tentando instalar ruby-1.9.2-p290e me deparei com o mesmo problema. Depois de executar which curle perceber que a instância curl vinha de uma instalação do MAMP em meu sistema (OS X Snow Leopard), reconfigurei minha PATHvariável para usar o padrão do sistema em /usr/bin/curl. Usando esta versão, curl 7.19.7não tive problemas para instalar a versão mais recente do Ruby com RVM.

jerikl
fonte
2

Tive problemas para instalar 1.9.2 usando RVM, aqui está minha solução:

Ainda recebo o erro de arquivo não encontrado, mas a instalação foi bem-sucedida

[2011-07-05 14:24:07] tar zxf /Users//.rvm/archives/yaml-0.1.3.tar.gz -C /Users//.rvm/src --no-same-owner tar (filho): /Users//.rvm/archives/yaml-0.1.3.tar.gz: Não é possível abrir: Nenhum arquivo ou diretório tar (filho): Erro não recuperável: saindo agora tar: Filho retornou status 2 tar : Erro ao sair atrasado de erros anteriores

Dorothy Dorothy
fonte
1
Eu fiz algo semelhante e funcionou muito bem:wget http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz; cp yaml-0.1.4.tar.gz /Users/yourname/.rvm/archives; rvm install default
Wei
Apenas esta solução funcionou para mim no Mac Osx Lion. Muito obrigado!
Christian Treppo,
1

Obrigado Dorothy - esta receita funcionou para mim com as seguintes pequenas modificações para um ambiente Win7:

Para outros com este problema -

  1. Aprecie a discussão sobre como atualizar o CA_Bundle - Bom fazer, mas não ajudou com esse problema - o certificado do site pyyaml ​​ainda fará com que o CURL emita um erro e, como o CURL é iniciado no instalador, não há como adicionar uma opção -k .

  2. Ruby 1.9.2-p290 está tentando instalar YAML 0.1.4 para que o Google para um espelho e baixe essa versão - YAML-0.1.3 não terá efeito em contornar os problemas.

  3. Você precisa fazer o equivalente do Windows a CHMOD 777 - dentro da pasta rvm / src para os arquivos extraídos. Altere a segurança para que todos tenham propriedade / todos os privilégios e desative o atributo somente leitura para todos os arquivos e pastas.

O instalador ainda emitirá erros ao tentar fazer o download (erro CURL), mas continuará tentando extrair. A extração gerará erros porque o tarball já foi extraído para a pasta src. A próxima etapa da configuração do YAML deve funcionar sem erros se as permissões na etapa 3 forem definidas corretamente e a instalação for concluída sem problemas adicionais. (Se estiver instalando via cygwin / bash, você precisará adicionar um compilador C como 'gcc' e adicionar 'ncurses' (comando tput) e 'make' às opções de configuração do núcleo cygwin padrão.)

Duke3D
fonte
0
$ sudo apt-get install curl

$ curl -L https://get.rvm.io | bash -s stable --ruby   with ruby

$ curl -L https://get.rvm.io | bash -s stable --rails   with rails
Uladz Kha
fonte