web-dev-qa-db-ja.com

vagrant plugin install vagrant-proxyconfに必要なRuby gemのインストールに失敗しました

プロキシの背後にUbuntu 16.04マシンがあります。このマシンから、http_proxyおよびhttps_proxy環境変数を使用して、期待どおりにプロキシを使用できます。ただし、新しいvagrantボックスが表示されると、そのプロビジョニングスクリプトはHTTPアクセスを試行して失敗します。

これに対する答えは、明らかに this SO question に従ってvagrant-proxyconfプラグインをインストールすることです。

vagrant plugin install vagrant-proxyconf

これにより、 既知の問題 に遭遇しましたが、これは正常にパッチを適用できますが、その後でも、明らかに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`.
$

このエラーからHTML出力を保存し、firefoxでレンダリングしました。

enter image description here

これは、何らかの理由でGET http://gems.hashicorp.com/quick/Marshal.4.8/io-console-0.4.3.gemspec.rzが企業ネットワークによって拒否されていることを示しているように見えますが、このURLを同じマシンから問題なくwgetできます。

したがって、私の次の攻撃は、必要なRuby gemsを手動でインストールしようとすることです。上記のエラーの前に、bigdecimal-1.2.6 gemで同じ問題に遭遇しました。その場合、次のようにgemを手動で正常にインストールできました。

 Sudo -E gem install bigdecimal -v 1.2.6

ただし、io-console-0.4.3 gemは別の話です。バージョン0.4.2と0.4.5を手動でインストールできますが、0.4.3は rubygems.orgでは利用できません です。

TL; DR

io-console-0.4.3 gemをインストールするにはどうすればよいですか?それとも、どういうわけか、依存関係のバージョンをハックして、代わりに0.4.5を使用することが可能でしょうか?

2
Digital Trauma

HTTPエラーをより注意深く読んだ後、企業のファイアウォールがUser-Agent: bundler/1.11.2 ...でHTTP要求をブロックしているため、これが失敗していることに気付きました。 curl(動作する)対curl -A "bundler/1.11.2 ...(動作しない)でこれを確認できました。


管理ソリューションは、ユーザーのエージェントとしてバンドラーを許可するように企業のファイアウォールを構成することです。私は内部のケースを提出しました-それがどこに行くのか見ていきます...


ハックの暫定的な技術的解決策は、より受け入れやすいユーザーエージェントを使用するようにバンドラーソースにパッチを適用することです。

  1. 次の内容のファイルbundler-hack-useragent.patchを作成します。
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. パッチを適用します。
Sudo patch --directory /usr/lib/Ruby/vendor_Ruby/bundler < bundler-hack-useragent.patch

これにより、/usr/lib/Ruby/vendor_Ruby/bundler/fetcher.rbのユーザーエージェントとしてcurlがハードコードされます。 curlは私の企業のファイアウォールで動作しますが、別のものを選択する必要があるかもしれません。

1
Digital Trauma