Si l'installation de rbenv échoue, essayez d'utiliser la variable d'environnement "RUBY_BUILD_CURL_OPTS".

Dans l'environnement de développement local créé par Vagrant, j'ai essayé d'utiliser rbenv lors de l'insertion de ruby (puisqu'il s'agit de Vagrant, essentiellement Je travaille en tant que root).

L'installation de rbenv lui-même est terminée, mais lorsque j'essaye d'installer ruby avec rbenv, j'obtiens l'erreur suivante.

[root@localhost ~]# rbenv install 2.6.6
Downloading ruby-2.6.6.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.6.tar.bz2
error: failed to download ruby-2.6.6.tar.bz2

BUILD FAILED (CentOS Linux 7 using ruby-build 20200520-2-gf00582b)

échec de curl

Je n'arrive pas à télécharger le fichier. Après examen, j'ai trouvé que «rbenv» utilise «curl» pour télécharger les fichiers.

En fait, l'environnement dans lequel je faisais ce travail était à l'intérieur du proxy, donc j'ai deviné que c'était probablement dû à l'environnement du réseau, alors j'ai exécuté curl seul et j'ai vérifié son comportement.

[root@localhost ~]# curl https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.6.tar.bz2
curl: (60) Peer's Certificate issuer is not recognized.
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). If the default
 bundle file isn't adequate, 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.

Paramètres du proxy

curl a également échoué. Il semble que la cause soit "L'authentification SSL ne fonctionne pas" ou "Le proxy n'est pas configuré correctement". Donc, j'ai d'abord essayé de définir les relations proxy probables.

Définissez le proxy avec vi ~ / .curlrc.

proxy-user="{Nom d'utilisateur}:{mot de passe}"
proxy = "http:/{Procuration}:{numéro de port}/"

Après le réglage, j'ai essayé d'exécuter curl. Le message d'erreur a un peu changé, mais cela ne fonctionne pas (au fait, la version spécifiée est différente de la section précédente, mais j'ai essayé de basculer entre celle-ci et cette version).

[root@localhost ~]# curl -v https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.1.tar.bz2
* Could not resolve proxy: http;Erreur inconnue
* Closing connection 0
curl: (5) Could not resolve proxy: http;Erreur inconnue

curl seul réussit grâce à la spécification facultative du proxy

Pour curl, exécutez le paramètre -x qui vous permet de définir directement le proxy etc., le -O qui est utilisé pour le téléchargement du fichier et le paramètre -k qui ignore l'erreur de certificat dans la connexion SSL. Le téléchargement de curl` seul s'est bien passé.

curl -k -x http://{Nom d'utilisateur}:{mot de passe}@{Procuration}:{numéro de port}/ -v -O https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.1.tar.bz2

...
...
...

  0 11.9M    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0{ [data not shown]
100 11.9M  100 11.9M    0     0  1314k      0  0:00:09  0:00:09 --:--:-- 1658k

Spécifiez un alias. curl réussit. Cependant, «rbenv» échoue.

J'ai trouvé que le proxy était toujours la cause. Afin d'utiliser ce paramètre dans rbenv, je place ensuite le même paramètre dans l'alias de curl.

Dans vi / etc / bashrc, définissez ce qui suit à la fin.

alias curl="curl -k -x http://{Nom d'utilisateur}:{mot de passe}@{Procuration}:{numéro de port}/"

Si vous rechargez les paramètres avec source ~ / .bashrc, omettez -x et -k et définissez curl, la boucle seule réussit.

curl -v -O https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.bz2

100 11.9M  100 11.9M    0     0  1853k      0  0:00:06  0:00:06 --:--:-- 1899k

Cependant, rbenv ne fonctionne pas.

[root@localhost ~]# rbenv install 2.6.6
Downloading ruby-2.6.6.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.6.tar.bz2
error: failed to download ruby-2.6.6.tar.bz2

BUILD FAILED (CentOS Linux 7 using ruby-build 20200520-2-gf00582b)

En utilisant la variable d'environnement RUBY_BUILD_CURL_OPTS de ruby-build, rbenv a également réussi.

Pensez à ceci et à cela, regardez la page Github de rbenv et ruby-build Si vous le faites, vous remarquerez qu'il existe une variable d'environnement RUBY_BUILD_CURL_OPTS qui vous permet de spécifier des options pour curl.

Si vous exécutez comme suit, cela réussit.

[root@localhost ~]# RUBY_BUILD_CURL_OPTS="-k -x http://{Nom d'utilisateur}:{mot de passe}@{Procuration}:{numéro de port}/" rbenv install 2.7.1
Downloading ruby-2.7.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.1.tar.bz2
Installing ruby-2.7.1...

Installed ruby-2.7.1 to /root/.rbenv/versions/2.7.1

[root@localhost ~]# rbenv global 2.7.1
[root@localhost ~]# rbenv rehash
[root@localhost ~]# ruby -v
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]
[root@localhost ~]#

Réussi. Je n'ai pas pu trouver un moyen d'utiliser RUBY_BUILD_CURL_OPTS dans la mesure où j'ai cherché, donc je vais le laisser comme mémo.

De plus, il semble que vous puissiez spécifier d'utiliser ʻaria2cetwget en utilisant le paramètre RUBY_BUILD_HTTP_CLIENT, donc si vous ne pouvez pas utiliser curl lui-même, vous voudrez peut-être utiliser RUBY_BUILD_HTTP_CLIENT`. Hmm.

Recommended Posts

Si l'installation de rbenv échoue, essayez d'utiliser la variable d'environnement "RUBY_BUILD_CURL_OPTS".
[Erreur] L'application ne s'affiche pas dans l'environnement de production
[Ubuntu 20.04] Que faire si le moniteur externe n'est pas reconnu