Назад | Перейти на главную страницу

Puppet не может установить Rubygem, который нормально устанавливается

Я использую следующее, чтобы попытаться установить Rubygem с Puppet.

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 из командной строки гем устанавливается нормально.

Кто-нибудь имеет представление о том, что происходит? Выполняется ли агент 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. Мысли ?!

Я сталкивался с подобными проблемами раньше, и я примерно на 99% уверен, что ваша среда выполнения Ruby пытается загрузить версию OpenSSL, отличную от той, для которой он был создан, скорее всего, из-за наличия настраиваемого libssl в /usr/local. Можете ли вы сделать следующее:

  1. Начать irb сеанс со средой выполнения Ruby, используемой для запуска Puppet, затем require 'openssl' и оставьте сеанс запущенным
  2. В другом терминале запустите grep libssl /proc/$(pidof irb)/maps и скопируйте вывод
  3. Обновите свой пост тем, что вы сняли выше

Другая информация о том, какая версия Ruby / OpenSSL у вас установлена ​​и как они были установлены, также будет чрезвычайно полезна при диагностике этой проблемы.

Хорошо, думаю, я понял, в чем заключалась сделка ...

Кажется, я получил uninitialized constant Gem::RemoteFetcher::OpenSSL ошибка не из-за проблемы с SSL, а из-за того, что не удалось найти исходный сервер. У меня создалось впечатление, что --source вариант был привычным, но я не думаю, что это было (см. ниже).

В качестве пользователя root в клиентском окне Puppet я изменил местоположение источника гемов на свой собственный сервер гемов. Бег gem env как root подтвердил изменение. Затем я обновил свой манифест Puppet, чтобы вывести результат gem env когда запущен агент Puppet, а источник все еще http://rubygems.org/ когда gem команда была выполнена агентом Puppet. При дальнейшем осмотре у меня создалось впечатление, что HOME переменная среды была изменена на / перед gem команда выполнялась (в основном потому, что /.gem/ruby/1.8 был указан как ПУТЬ GEM, когда gem env был выполнен агентом Марионетки вместо /root/.gem/ruby/1.8 или /var/lib/puppet/.gem/ruby/1.8).

Чтобы проверить, я скопировал свой /root/.gemrc файл (в котором указан мой пользовательский источник драгоценного камня) в /.gemrc и снова запустил агент Марионетки. На этот раз ошибок не произошло, и драгоценный камень, который я хотел, был успешно установлен. Домашний каталог Puppet, на /etc/passwd, установлен на /var/lib/puppet, поэтому агент Puppet должен быть настроен так, чтобы его домашний каталог указывал на / перед исполнением манифестов.