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)
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.
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 proxyPour 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
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)
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 ʻaria2cet
wget 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.