【问题标题】:Local ruby gems fail to install on Windows 2008R2: Errno::EADDRNOTAVAIL本地 ruby​​ gem 无法在 Windows 2008R2 上安装:Errno::EADDRNOTAVAIL
【发布时间】:2015-05-26 22:09:48
【问题描述】:

编辑:Bug in rubygems 2.4.4. (fixed in 2.4.5)

我在使用 Chef Client v12.2.1 附带的嵌入式 ruby​​ 安装 gems 时遇到问题,使用 chef_gem 资源:

  Mixlib::ShellOut::ShellCommandFailed
  ------------------------------------
  chef_gem[zabbixapi] (generic_server_win::libzabbix-deps line 6) had an error: Mixlib::ShellOut::ShellCommand Failed: Expected process to exit with [0], but received '1'
  ---- Begin output of C:/opscode/chef/embedded/bin/gem install c:/chef/cache/zabbixapi-2.2.2.gem -q --no-rdoc --no-ri -v "2.2.2" ----
  STDOUT:
  STDERR: ERROR:  While executing gem ... (Errno::EADDRNOTAVAIL)
      The requested address is not valid in its context. - connect(2)
  ---- End output of C:/opscode/chef/embedded/bin/gem install c:/chef/cache/zabbixapi-2.2.2.gem -q --no-rdoc --no-ri -v "2.2.2" ----
  Ran C:/opscode/chef/embedded/bin/gem install c:/chef/cache/zabbixapi-2.2.2.gem -q --no-rdoc --no-ri -v "2.2.2" returned 1

还有:

  • 使用 --local 选项以管理员身份在命令行上手动运行命令时的结果相同
  • 其他 gem 也会出现同样的错误。
  • 我尝试运行它的服务器无法访问 Internet
  • 我无法在新安装的测试机器(可以访问互联网)上重现该问题
  • 使用的 ruby​​ 版本为 2.0.0:ruby 2.0.0p451 (2014-02-24) [i386-mingw32]

这是我的厨师食谱:

cookbook_file "#{Chef::Config[:file_cache_path]}/zabbixapi-2.2.2.gem" do
  source 'zabbixapi-2.2.2.gem'
end

chef_gem "zabbixapi" do
  source "#{Chef::Config[:file_cache_path]}/zabbixapi-2.2.2.gem"
end

【问题讨论】:

  • gem 命令必须具有 Internet 访问权限才能下载您尝试安装的 gem 所需的依赖项(除非您使用本地存储库)。如果您确实无法访问互联网,则必须安装每个必备的 gem 或使用本地服务器。
  • 有问题的 gem 仅依赖于已安装的 json gem。 (列在“宝石列表”输出中)
  • 支持研究工作和问题更新:)

标签: ruby gem rubygems chef-infra chef-windows


【解决方案1】:

您的问题是chef_gem 资源在强制在厨师安装中使用嵌入式 ruby​​ 的方式上是特殊的,并且它在收敛之前运行以允许在食谱中需要 gem。 documentation about it here

要使用通过 chef 部署的本地源,您必须确保该文件之前存在,否则 gem 命令将尝试下载它(并且由于无法访问互联网而失败)。

为了确保您的本地文件在chef_gem 调用之前存在,您必须确保在编译时使用this trick 调用cookbook_file 资源

在您的具体情况下应该这样做:

cookbook_file "#{Chef::Config[:file_cache_path]}/zabbixapi-2.2.2.gem" do
  action :nothing
  source 'zabbixapi-2.2.2.gem'
end.run_action(:create)

chef_gem "zabbixapi" do
  source "#{Chef::Config[:file_cache_path]}/zabbixapi-2.2.2.gem"
end

资源中的操作是为了避免将其调用两次(一次在编译阶段,一次在收敛阶段,即使后者不会有任何影响,最好节省时间,不要两次评估它)然后调用定义末尾的操作:create 将触发编译阶段的操作,并且该文件将出现在稍后的chef_gem 调用中。

【讨论】:

  • 您在编译期间需要下载 gem 确实是对的,但是它仍然不能解决我的 gem 安装问题。在 gem 文件已经存在的情况下手动运行 gem install 时,它也会失败。
  • 尝试使用命令行gem install --verbose ... 甚至--debug 的详细输出,以查看它尝试从命令行连接到的内容,然后再与厨师重试(也许使用-l debug 给厨师- 客户端调用以获得更详细的输出)
  • 使用 --debug 运行 gem 提供了更多线索。似乎是 dns 解析的问题:pastebin.com/ggeGNPcQ 系统没有配置 dns 服务器。我仍然无法在另一台主机上重现该问题。
  • 好的,我现在可以复制了。如果没有配置 DNS 服务器,看起来就像 gem pukes 一样。即使安装本地 gem。
  • 似乎 win32 注册表 gem 尝试解析机器主机名(可能是为了找到一些环境变量)并且由于没有配置 dns 而失败,我不确定如何解决这个问题。
猜你喜欢
  • 2021-11-13
  • 2010-12-29
  • 1970-01-01
  • 2016-10-14
  • 1970-01-01
  • 2015-03-24
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多