сбой установки gem в Linux за брандмауэром с использованием прокси

#ruby #linux #installation #rubygems #firewall

#ruby #linux #установка #rubygems #брандмауэр

Вопрос:

Я пытаюсь установить fpm на сервере Linux за брандмауэром. Для этого я использую прокси-сервер с аутентификацией.

 gem install --no-document -p http://proxyuser:proxypassword@proxyserver.tld:proxyport fpm
  

Сбой с ошибкой:

 ERROR: Could not find a valid gem 'fpm' (>=0), here is why:
Unable to download data from https://rubygems.org - no such name (https://api.rubygems.org/specs.4.8.gz)
  

Та же ошибка возникает, когда я использую прокси с переменными окружения http_proxy / https_proxy.

Когда я использую curl для загрузки https://api.rubygems.org/specs.4.8.gz все работает нормально. Либо с использованием переменных окружения http_proxy https_proxy, либо с использованием curl -x.

Я погуглил несколько часов, и единственными решениями, которые я нашел, были обходные пути и никакого реального решения. Например. «Попробуйте использовать gem на компьютере без брандмауэра» и т. Д.

Итак, это важные моменты:

  1. Операционная система: Linux (Suse)
  2. Есть брандмауэр, есть прокси с аутентификацией.
  3. DNS-разрешение работает при использовании curl или wget.
  4. У меня есть пользователь, которому разрешено загружать исполняемые файлы.
  5. Я являюсь пользователем root в системе.
  6. Я не могу загрузить файлы gem с другого компьютера, потому что мне не разрешено загружать файлы с USB-накопителя.

Ответ №1:

Теперь я сделал это с помощью следующего скрипта:

 #!/bin/bash

/bin/false
while [ $? -ne 0 ]; do
        sleep 5
    zypper --non-interactive install ruby-devel gcc make
done

GEMS="arr-pm-0.0.10.gem backports-3.17.1.gem cabin-0.6.0.gem childprocess-0.9.0.gem clamp-1.0.0.gem ffi-1.10.0.gem json-1.7.7.gem pleaserun-0.0.29.gem ruby-xz-0.2.3.gem fpm-1.11.0.gem stud-0.0.23.gem dotenv-2.7.6.gem insist-1.0.0.gem mustache-0.99.8.gem io-like-0.3.1.gem"

for package in $GEMS
do
        curl -x http://PROXYNAME:PROXYPORT -U "PROXYUSER:PROXYPASS" https://rubygems.org/downloads/$package -s --output $package
done

gem install -l --no-document fpm
  

Установка выполняется без каких-либо ошибок, но если я пытаюсь запустить fpm, я получаю сообщение об ошибке:

 /usr/lib64/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- backports/2.0.0/stdlib/ostruct (LoadError)
        from /usr/lib64/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        from /usr/lib64/ruby/gems/2.1.0/gems/fpm-1.11.0/lib/fpm/package.rb:7:in `<top (required)>'
        from /usr/lib64/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        from /usr/lib64/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        from /usr/lib64/ruby/gems/2.1.0/gems/fpm-1.11.0/lib/fpm.rb:3:in `<top (required)>'
        from /usr/lib64/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        from /usr/lib64/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        from /usr/lib64/ruby/gems/2.1.0/gems/fpm-1.11.0/bin/fpm:4:in `<main>'