Если установить плагин vagrant не требуется для установки гемов ruby, установите vagrant-proxyconf
У меня есть машина Ubuntu 16.04 за прокси. С этой машины я могу использовать прокси, как и ожидалось, используя http_proxy
а также https_proxy
переменные среды Однако, когда открывается новый бродячий ящик, его сценарий инициализации пытается получить доступ по HTTP и завершается неудачно.
Ответ на это, очевидно, заключается в том, чтобы установить плагин vagrant-proxyconf в соответствии с этим SO вопросом:
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:
Это указывает на то, что GET http://gems.hashicorp.com/quick/Marshal.4.8/io-console-0.4.3.gemspec.rz
по какой-то причине мне отказывает моя корпоративная сеть, но я могу wget
этот URL с той же машины без проблем.
Поэтому моя следующая линия атаки - попытаться установить нужные рубиновые самоцветы вручную. До появления вышеуказанной ошибки я столкнулся с той же проблемой, что и bigdecimal-1.2.6
драгоценный камень. В этом случае мне удалось успешно установить гем вручную следующим образом:
sudo -E gem install bigdecimal -v 1.2.6
Тем не менее io-console-0.4.3
драгоценный камень это другая история. Я могу вручную установить версии 0.4.2 и 0.4.5, но 0.4.3 не доступен на rubygems.org.
TL; DR
Как я могу установить io-console-0.4.3
драгоценный камень? Или возможно как-то взломать версии зависимостей и использовать вместо этого 0.4.5?
1 ответ
После более внимательного прочтения ошибки HTTP я понял, что это не удается, потому что мой корпоративный брандмауэр блокирует запросы HTTP с User-Agent: bundler/1.11.2 ...
, Я смог подтвердить это curl
(работает) против curl -A "bundler/1.11.2 ...
(не работает).
Административное решение состоит в том, чтобы настроить корпоративный брандмауэр, чтобы разрешить пакетирование в качестве агента пользователя. Я подал внутреннее дело - посмотрим, куда это пойдет...
Хакерское промежуточное техническое решение заключается в исправлении исходного кода пакета, чтобы он использовал более приемлемый User-Agent.
- Создать файл
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
- Примените патч:
sudo patch --directory /usr/lib/ruby/vendor_ruby/bundler < bundler-hack-useragent.patch
Это будет жестко закодировано как пользовательский агент в /usr/lib/ruby/vendor_ruby/bundler/fetcher.rb
, curl работает с моим корпоративным брандмауэром, хотя вам, возможно, придется выбрать что-то другое.