Puppet 無法安裝正常安裝的 Rubygem
我正在使用以下內容嘗試使用 Puppet 安裝 Rubygem。
package { 'reaper': ensure => 'installed', provider => 'gem', source => 'http://192.168.1.101:9292/', install_options => ['--no-ri', '--no-rdoc'] }
當我執行時,
puppet agent --test
我收到以下錯誤。Error: Execution of '/usr/bin/gem install --source http://192.168.1.101:9292/ reaper' returned 1: ERROR: While executing gem ... (NameError) uninitialized constant Gem::RemoteFetcher::OpenSSL Error: /Package[reaper]/ensure: change from absent to present failed: Execution of '/usr/bin/gem install --source http://192.168.1.101:9292/ reaper' returned 1: ERROR: While executing gem ... (NameError) uninitialized constant Gem::RemoteFetcher::OpenSSL
但是,當我從命令行
gem install --source http://192.168.1.101:9292/ reaper
以 root 身份執行時,gem 安裝得很好。有人知道發生了什麼嗎?Puppet 代理是否使用一些可能導致此錯誤的不同環境變數執行?
===== 編輯 =====
以下是有關環境的一些附加資訊:
#output from `grep libssl /proc/{irb pid}/maps` b70e0000-b7131000 r-xp 00000000 08:01 393357 /lib/i386-linux-gnu/libssl.so.1.0.0 b7131000-b7133000 r--p 00050000 08:01 393357 /lib/i386-linux-gnu/libssl.so.1.0.0 b7133000-b7137000 rw-p 00052000 08:01 393357 /lib/i386-linux-gnu/libssl.so.1.0.0
Ruby 和 RubyGems(通過 安裝
aptitude install rubygems
):# ruby -v ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-linux] # gem env RubyGems Environment: - RUBYGEMS VERSION: 1.8.15 - RUBY VERSION: 1.8.7 (2011-06-30 patchlevel 352) [i686-linux] - INSTALLATION DIRECTORY: /var/lib/gems/1.8 - RUBY EXECUTABLE: /usr/bin/ruby1.8 - EXECUTABLE DIRECTORY: /usr/local/bin - RUBYGEMS PLATFORMS: - ruby - x86-linux - GEM PATHS: - /var/lib/gems/1.8 - /root/.gem/ruby/1.8 - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :benchmark => false - :backtrace => false - :bulk_threshold => 1000 - REMOTE SOURCES: - http://rubygems.org/
SSL(自動安裝):
# aptitude search ~i | grep ssl i A libssl-dev - SSL development libraries, header files an i A libssl-doc - SSL development documentation documentatio i libssl1.0.0 - SSL shared libraries i A openssl - Secure Socket Layer (SSL) binary and relat # aptitude show libssl1.0.0 Package: libssl1.0.0 State: installed Automatically installed: no Multi-Arch: same Version: 1.0.1-4ubuntu5.9 Priority: required Section: libs Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Architecture: i386 Uncompressed Size: 2,748 k Depends: libc6 (>= 2.7), zlib1g (>= 1:1.1.4), debconf (>= 0.5) | debconf-2.0 PreDepends: multiarch-support Breaks: openssh-client (< 1:5.9p1-4), openssh-server (< 1:5.9p1-4) Description: SSL shared libraries
===== 編輯#2 =====
我想知道為什麼我什至會遇到 OpenSSL 錯誤…我使用的源是
http
,而不是https
. 想法?!
好吧,所以我想我知道交易是什麼了…
似乎我收到
uninitialized constant Gem::RemoteFetcher::OpenSSL
錯誤不是因為 SSL 問題,而是因為找不到源伺服器。我的印像是該--source
選項正在被使用,但我不認為它是(見下文)。作為 Puppet 客戶端的 root 使用者,我將 gem 源位置更改為我的自定義 gem 伺服器。以 root 身份執行
gem env
確認了更改。然後我更新了我的 Puppet 清單以輸出gem env
Puppet 代理執行時的結果,並且源仍然是 Puppet 代理執行命令http://rubygems.org/
時的結果。gem
經過進一步檢查,我得到的印像是環境變數在命令執行之前HOME
被更改為(主要是因為在 Puppet 代理執行時被列為 GEM PATH而不是or )。/``gem``/.gem/ruby/1.8``gem env``/root/.gem/ruby/1.8``/var/lib/puppet/.gem/ruby/1.8
/root/.gemrc
為了測試,我將我的文件(它指定了我的自定義 gem 源)複製到/.gemrc
並再次執行 Puppet 代理。這次沒有報錯,我想要的gem也安裝成功了。Puppet 的主目錄 per/etc/passwd
設置為/var/lib/puppet
,因此必須將 Puppet 代理配置為/
在執行清單之前將其主目錄指向。
libssl
我之前也遇到過類似的問題,並且我大約 99% 確定您的 Ruby 執行時正在嘗試載入 OpenSSL 的版本,而不是它所針對的版本,這很可能是由於/usr/local
. 你能做到以下幾點:
irb
使用用於執行 Puppet 的 Ruby 執行時啟動會話,然後require 'openssl'
保持會話執行- 在另一個終端中,執行
grep libssl /proc/$(pidof irb)/maps
並複制輸出- 使用您在上面擷取的輸出更新您的文章
有關您正在執行的 Ruby/OpenSSL 版本以及它們的安裝方式的其他資訊也將非常有助於診斷此問題。