Falha ao instalar as gemas do Ruby requeridas pelo plugin vagrant instalar o vagrant-proxyconf

2

Eu tenho uma máquina Ubuntu 16.04 atrás de um proxy. Dessa máquina, posso usar o proxy conforme o esperado usando as variáveis de ambiente http_proxy e https_proxy . No entanto, quando uma nova caixa vagrant é ativada, seu script de provisionamento tenta acessos HTTP e falha.

A resposta para isto aparentemente é instalar o plugin vagrant-proxyconf conforme esta pergunta SO :

vagrant plugin install vagrant-proxyconf

Com isso, me deparo com um problema conhecido que eu sou capaz de corrigir, mas mesmo depois disso, eu me deparo com mais problemas, aparentemente relacionados a 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'.
$

Salvei a saída HTML desse erro e processei no firefox:

Isso parece indicar que o GET http://gems.hashicorp.com/quick/Marshal.4.8/io-console-0.4.3.gemspec.rz está sendo negado pela minha rede corporativa por algum motivo, mas posso wget desta URL da mesma máquina sem problemas.

Então, minha próxima linha de ataque é tentar instalar manualmente as gemas de rubi necessárias. Antes do erro acima, eu corri para o mesmo problema com a bigdecimal-1.2.6 gem. Nesse caso, consegui instalar a gem manualmente da seguinte forma:

 sudo -E gem install bigdecimal -v 1.2.6

No entanto, a io-console-0.4.3 gem é uma história diferente. Eu posso instalar manualmente as versões 0.4.2 e 0.4.5, mas 0.4.3 é não disponível em rubygems .org .

TL; DR

Como posso instalar a io-console-0.4.3 gem? Ou talvez seja possível, de alguma forma, hackear as versões de dependência e, talvez, usar 0.4.5?

    
por Digital Trauma 09.07.2016 / 01:13

1 resposta

1

Depois de ler com mais cuidado o erro HTTP, percebi que isso está falhando porque meu firewall corporativo está bloqueando solicitações HTTP com User-Agent: bundler/1.11.2 ... . Consegui confirmar isso com curl (works) vs curl -A "bundler/1.11.2 ... (não funciona).

A solução administrativa é configurar o firewall corporativo para permitir o bundler como um User-Agent. Eu arquivei um caso interno - vamos ver onde isso vai ...

A solução técnica provisória do hacky é corrigir a origem do bundler para que ele use um User-Agent mais aceitável.

  1. Crie o arquivo bundler-hack-useragent.patch com o seguinte conteúdo:
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. Aplicar o patch:
sudo patch --directory /usr/lib/ruby/vendor_ruby/bundler < bundler-hack-useragent.patch

Isso codificará o curl como o User-Agent em /usr/lib/ruby/vendor_ruby/bundler/fetcher.rb . O curl funciona com o firewall corporativo, embora você tenha que escolher outra coisa.

    
por Digital Trauma 12.07.2016 / 01:42