web-dev-qa-db-fra.com

Ne pas installer les gemmes Ruby requises par le plug-in vagrant, installez vagrant-proxyconf

J'ai une machine Ubuntu 16.04 derrière un proxy. Sur cette machine, je peux utiliser le proxy comme prévu à l'aide des variables d'environnement http_proxy et https_proxy. Toutefois, lorsqu’une nouvelle boîte de dialogue vagabonde est créée, son script de provisionnement tente les accès HTTP et échoue.

La réponse à cette question est apparemment d’installer le plugin vagrant-proxyconf selon this SO question :

vagrant plugin install vagrant-proxyconf

Avec cela, je rencontre un problème conn que je parviens à corriger, mais même après cela, je rencontre d’autres problèmes, apparemment liés à HTTP:

$ vagrant plugin install vagrant-proxyconf
Installing the 'vagrant-proxyconf' plugin. This can take a few minutes...
Bundler, the underlying system Vagrant uses to install plugins,
reported an error. The error is shown below. These errors are usually
caused by misconfigured plugin installations or transient network
issues. The error from Bundler is:

Net::HTTPForbidden: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
... <snip - see rendered HTML> ...
</html>


Warning: this Gemfile contains multiple primary sources. Using `source` more than once without a block is a security risk, and may result in installing unexpected gems. To resolve this warning, use a block to indicate which gems should come from the secondary source. To upgrade this warning to an error, run `bundle config disable_multisource true`.
$

J'ai sauvegardé la sortie HTML de cette erreur et rendu dans firefox:

enter image description here

Cela semble indiquer que le GET http://gems.hashicorp.com/quick/Marshal.4.8/io-console-0.4.3.gemspec.rz a été refusé par mon réseau d'entreprise pour une raison quelconque, mais je suis capable de wget cette URL à partir de la même machine sans aucun problème.

Ma prochaine ligne d’attaque est donc d’essayer d’installer manuellement les gems requis Ruby. Avant l’erreur ci-dessus, j’ai rencontré le même problème avec la gemme bigdecimal-1.2.6. Dans ce cas, j'ai réussi à installer la gem manuellement comme suit:

 Sudo -E gem install bigdecimal -v 1.2.6

Cependant, la gemme io-console-0.4.3 est une autre histoire. Je suis capable d'installer manuellement les versions 0.4.2 et 0.4.5, mais 0.4.3 est non disponible sur rubygems.org .

TL; DR

Comment puis-je installer le io-console-0.4.3 gem? Ou peut-être est-il possible en quelque sorte de pirater les versions de dépendance et d'utiliser peut-être 0.4.5 à la place?

2
Digital Trauma

Après avoir lu plus attentivement l'erreur HTTP, j'ai réalisé que cela échouait car le pare-feu de mon entreprise bloquait les requêtes HTTP avec User-Agent: bundler/1.11.2 .... J'ai pu confirmer cela avec curl (fonctionne) vs curl -A "bundler/1.11.2 ... (ne fonctionne pas).


La solution administrative consiste à configurer le pare-feu de l'entreprise pour autoriser le regroupeur en tant qu'agent d'utilisateur. J'ai déposé une plainte interne - on verra où ça va ...


La solution technique provisoire de hacky consiste à appliquer un correctif à la source de regroupement afin qu’elle utilise un agent utilisateur plus acceptable.

  1. Créez le fichier bundler-hack-useragent.patch avec le contenu suivant:
diff --git a/fetcher.rb b/fetcher.rb
index aaf4679..e4738f4 100644
--- a/fetcher.rb
+++ b/fetcher.rb
@@ -238,7 +238,8 @@ module Bundler
         end

         con.read_timeout = Fetcher.api_timeout
-        con.override_headers["User-Agent"] = user_agent
+#        con.override_headers["User-Agent"] = user_agent
+        con.override_headers["User-Agent"] = 'curl/7.19.7'
         con.override_headers["X-Gemfile-Source"] = @remote.original_uri.to_s if @remote.original_uri
         con
       end
  1. Appliquez le patch:
Sudo patch --directory /usr/lib/Ruby/vendor_Ruby/bundler < bundler-hack-useragent.patch

Cela va coder en dur en tant que User-Agent dans /usr/lib/Ruby/vendor_Ruby/bundler/fetcher.rb. curl fonctionne avec le pare-feu de mon entreprise, mais vous devrez peut-être choisir autre chose.

1
Digital Trauma