web-dev-qa-db-fra.com

Installation de Ruby 2.0 et Rails 4.0.0beta sur AWS EC2)

L'installation de Ruby 2.0.0 et Rails 4.0.0beta1 sur l'installation par défaut d'Amazon EC2 Linux (Amazon Linux AMI 2012.09.1) se passe bien. Mais openssl entre la façon (par exemple http://railsapps.github.com/openssl-certificate-verify-failed.html ) et bizarre soit d'empêcher openssl d'être installé ou de faire installer le gestionnaire de paquets RubyGem par Rails.

Comment contourner ces problèmes?

27
Paul Ardeleanu

Connectez-vous à votre toute nouvelle instance:

[19:59:22] paul:~ $ ssh -i ~/.ssh/server.pem [email protected]

   __|  __|_  )
   _|  (     /   Amazon Linux AMI
  ___|\___|___|

  https://aws.Amazon.com/Amazon-linux-AMI/2012.09-release-notes/

et usurper l'identité de la racine:

$ Sudo su -

Vous êtes connecté en tant que root à partir d'ici. Appliquez les mises à jour du serveur:

[root@ip-xx ~]# yum update
...
Complete!
[root@ip-xx ~]# yum groupinstall "Development Tools"
...
Install      72 Package(s)
...
Complete!

Maintenant, c'est là qu'elle diffère de la solution standard. Installez RVM mais sans distribution de Ruby:

[root@ip-xx ~]# \curl -L https://get.rvm.io | bash -s stable

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   184  100   184    0     0    135      0  0:00:01  0:00:01 --:--:--   183
100 11861  100 11861    0     0   7180      0  0:00:01  0:00:01 --:--:-- 64113
Downloading RVM from wayneeseguin branch stable
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   124  100   124    0     0    161      0 --:--:-- --:--:-- --:--:--   185
100 1615k  100 1615k    0     0   258k      0  0:00:06  0:00:06 --:--:--  401k

Installing RVM to /usr/local/rvm/
    Creating group 'rvm'

# RVM:  Shell scripts enabling management of multiple Ruby environments.
# RTFM: https://rvm.io/
# HELP: http://webchat.freenode.net/?channels=rvm (#rvm on irc.freenode.net)
# Cheatsheet: http://cheat.errtheblog.com/s/rvm/
# Screencast: http://screencasts.org/episodes/how-to-use-rvm

# In case of any issues read output of 'rvm requirements' and/or 'rvm notes'

Installation of RVM in /usr/local/rvm/ is almost complete:

  * First you need to add all users that will be using rvm to 'rvm' group,
    and logout - login again, anyone using rvm will be operating with `umask u=rwx,g=rwx,o=rx`.

  * To start using RVM you need to run `source /etc/profile.d/rvm.sh`
    in all your open Shell windows, in rare cases you need to reopen all Shell windows.

# root,
#
#   Thank you for using RVM!
#   I sincerely hope that RVM helps to make your life easier and
#   more enjoyable!!!
#
# ~Wayne

Vérifions qu'aucune version Ruby n'est installée:

[root@ip-xx ~]# rvm list

rvm rubies


# No rvm rubies installed yet. Try 'rvm help install'.

Maintenant, openssl est déjà installé sur le système mais est incompatible avec la configuration:

[root@ip-xx ~]# openssl version
OpenSSL 1.0.0k-fips 5 Feb 2013

[root@ip-xx ~]# openssl version -d
OPENSSLDIR: "/etc/pki/tls"

Toute tentative d'installation de Ruby2 avec cette version entraînera l'erreur suivante:

[root@ip-xx ~]# rvm install 2.0.0 -- --with-openssl-dir=/etc/pki/tls
Fetching yaml-0.1.4.tar.gz to /usr/local/rvm/archives
######################################################################## 100.0%
Extracting yaml to /usr/local/rvm/src/yaml-0.1.4
Prepare yaml in /usr/local/rvm/src/yaml-0.1.4.
Configuring yaml in /usr/local/rvm/src/yaml-0.1.4.
Compiling yaml in /usr/local/rvm/src/yaml-0.1.4.
Installing yaml to /usr/local/rvm/usr
Installing Ruby from source to: /usr/local/rvm/rubies/Ruby-2.0.0-p0, this may take a while depending on your cpu(s)...
Ruby-2.0.0-p0 - #downloading Ruby-2.0.0-p0, this may take a while depending on your connection...
######################################################################## 100.0%
Ruby-2.0.0-p0 - #extracting Ruby-2.0.0-p0 to /usr/local/rvm/src/Ruby-2.0.0-p0
Ruby-2.0.0-p0 - #extracted to /usr/local/rvm/src/Ruby-2.0.0-p0
Ruby-2.0.0-p0 - #configuring
Ruby-2.0.0-p0 - #compiling
Ruby-2.0.0-p0 - #installing 
Retrieving rubygems-2.0.3
######################################################################## 100.0%
Extracting rubygems-2.0.3 ...
Removing old Rubygems files...
Installing rubygems-2.0.3 for Ruby-2.0.0-p0 ...
Error running 'env GEM_PATH=/usr/local/rvm/gems/Ruby-2.0.0-p0:/usr/local/rvm/gems/Ruby-2.0.0-p0@global:/usr/local/rvm/gems/Ruby-2.0.0-p0:/usr/local/rvm/gems/Ruby-2.0.0-p0@global GEM_HOME=/usr/local/rvm/gems/Ruby-2.0.0-p0 /usr/local/rvm/rubies/Ruby-2.0.0-p0/bin/Ruby /usr/local/rvm/src/rubygems-2.0.3/setup.rb', please read /usr/local/rvm/log/Ruby-2.0.0-p0/rubygems.install.log
Installation of rubygems did not complete successfully.
Saving wrappers to '/usr/local/rvm/bin'.
Ruby-2.0.0-p0 - #adjusting #shebangs for (gem irb erb ri rdoc testrb rake).
cp: overwrite `/usr/local/rvm/rubies/Ruby-2.0.0-p0/bin/gem'? y
cp: overwrite `/usr/local/rvm/rubies/Ruby-2.0.0-p0/bin/irb'? y
cp: overwrite `/usr/local/rvm/rubies/Ruby-2.0.0-p0/bin/erb'? y
cp: overwrite `/usr/local/rvm/rubies/Ruby-2.0.0-p0/bin/ri'? y
cp: overwrite `/usr/local/rvm/rubies/Ruby-2.0.0-p0/bin/rdoc'? y
cp: overwrite `/usr/local/rvm/rubies/Ruby-2.0.0-p0/bin/testrb'? y
cp: overwrite `/usr/local/rvm/rubies/Ruby-2.0.0-p0/bin/rake'? y
Ruby-2.0.0-p0 - #importing default gemsets, this may take time ...
Install of Ruby-2.0.0-p0 - #complete

Bien que vous obtiendrez Ruby2, le "L'installation de rubygems ne s'est pas terminée avec succès" - notez l'avertissement: "Erreur lors de l'exécution de 'env GEM_PATH = ..."

Au lieu de cela, nous obtiendrons RVM installer une copie de openssl pour nous (voir https://rvm.io/packages/openssl/ ). Le package zlib-devel est requis:

[root@ip-xx ~]# yum install zlib-devel
...
Installed:
  zlib-devel.x86_64 0:1.2.5-7.11.amzn1                                                                                  

Complete!
[root@ip-xx ~]# rvm pkg install openssl
Fetching openssl-1.0.1c.tar.gz to /usr/local/rvm/archives
Extracting openssl to /usr/local/rvm/src/openssl-1.0.1c
Configuring openssl in /usr/local/rvm/src/openssl-1.0.1c.
Compiling openssl in /usr/local/rvm/src/openssl-1.0.1c.
Installing openssl to /usr/local/rvm/usr

Please note that it's required to reinstall all rubies:

    rvm reinstall all --force

Updating openssl certificates

Nous pouvons maintenant installer Ruby2:

[root@ip-xx ~]# rvm reinstall 2.0.0 --with-openssl-dir=/usr/local/rvm/usr
Removing /usr/local/rvm/src/Ruby-2.0.0-p0...
Removing /usr/local/rvm/rubies/Ruby-2.0.0-p0...
Installing Ruby from source to: /usr/local/rvm/rubies/Ruby-2.0.0-p0, this may take a while depending on your cpu(s)...
Ruby-2.0.0-p0 - #downloading Ruby-2.0.0-p0, this may take a while depending on your connection...
Ruby-2.0.0-p0 - #extracting Ruby-2.0.0-p0 to /usr/local/rvm/src/Ruby-2.0.0-p0
Ruby-2.0.0-p0 - #extracted to /usr/local/rvm/src/Ruby-2.0.0-p0
Ruby-2.0.0-p0 - #configuring
Ruby-2.0.0-p0 - #compiling
Ruby-2.0.0-p0 - #installing 
Removing old Rubygems files...
Installing rubygems-2.0.3 for Ruby-2.0.0-p0 ...
Installation of rubygems completed successfully.
Saving wrappers to '/usr/local/rvm/bin'.
Ruby-2.0.0-p0 - #adjusting #shebangs for (gem irb erb ri rdoc testrb rake).
cp: overwrite `/usr/local/rvm/rubies/Ruby-2.0.0-p0/bin/gem'? y
cp: overwrite `/usr/local/rvm/rubies/Ruby-2.0.0-p0/bin/irb'? y
cp: overwrite `/usr/local/rvm/rubies/Ruby-2.0.0-p0/bin/erb'? y
cp: overwrite `/usr/local/rvm/rubies/Ruby-2.0.0-p0/bin/ri'? y
cp: overwrite `/usr/local/rvm/rubies/Ruby-2.0.0-p0/bin/rdoc'? y
cp: overwrite `/usr/local/rvm/rubies/Ruby-2.0.0-p0/bin/testrb'? y
cp: overwrite `/usr/local/rvm/rubies/Ruby-2.0.0-p0/bin/rake'? y
Ruby-2.0.0-p0 - #importing default gemsets, this may take time ...
Install of Ruby-2.0.0-p0 - #complete 
Making gemset Ruby-2.0.0-p0 pristine.
Making gemset Ruby-2.0.0-p0@global pristine.

[root@ip-xx ~]# Ruby -v
Ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux]

Et Rails4:

[root@ip-xx ~]# gem install Rails -v 4.0.0beta1
...
28 gems installed
[root@ip-xx ~]# gem list

*** LOCAL GEMS ***

actionmailer (4.0.0.beta1)
actionpack (4.0.0.beta1)
activemodel (4.0.0.beta1)
activerecord (4.0.0.beta1)
activerecord-deprecated_finders (0.0.3)
activesupport (4.0.0.beta1)
arel (4.0.0.beta2)
atomic (1.0.1)
bigdecimal (1.2.0)
builder (3.1.4)
bundler (1.3.4)
erubis (2.7.0)
hike (1.2.1)
i18n (0.6.4)
io-console (0.4.2)
json (1.7.7)
mail (2.5.3)
mime-types (1.21)
minitest (4.3.2)
multi_json (1.7.1)
polyglot (0.3.3)
psych (2.0.0)
rack (1.5.2)
rack-test (0.6.2)
Rails (4.0.0.beta1)
railties (4.0.0.beta1)
rake (10.0.3, 0.9.6)
rdoc (4.0.0, 3.12.2)
rubygems-bundler (1.1.1)
rvm (1.11.3.6)
sprockets (2.9.0)
sprockets-Rails (2.0.0.rc3)
test-unit (2.0.0.0)
thor (0.17.0)
thread_safe (0.1.0)
tilt (1.3.6)
treetop (1.4.12)
tzinfo (0.3.37)

C'est tout le monde!

64
Paul Ardeleanu

Voici une variante avec rbenv.

SSH dans votre toute nouvelle instance:

   __|  __|_  )
   _|  (     /   Amazon Linux AMI
  ___|\___|___|

https://aws.Amazon.com/Amazon-linux-AMI/2012.09-release-notes/
There are 16 security update(s) out of 57 total update(s) available
Run "Sudo yum update" to apply all updates.
Amazon Linux version 2013.03 is available.
[jimjh ~]$ Ruby --version
Ruby 1.9.3p286 (2012-10-12 revision 37165) [x86_64-linux]

Emprunter l'identité de la racine et appliquer les mises à jour du serveur:

$> Sudo su -
$> yum update

Installez quelques packages:

$> yum install git pcre pcre-devel

Clone rbenv :

$> git clone git://github.com/sstephenson/rbenv.git /usr/local/rbenv

Créez le fichier suivant:

# /etc/profile.d/rbenv.sh
export RBENV_ROOT=/usr/local/rbenv
export PATH="${RBENV_ROOT}/bin:$PATH"
eval "$(rbenv init -)"

Installer Ruby-build :

$> . /etc/profile
$> git clone https://github.com/sstephenson/Ruby-build.git /usr/local/rbenv/plugins/Ruby-build

Installez Ruby:

$> rbenv install 2.0.0-p195  # wait ...
$> rbenv global 2.0.0-p195
$> rbenv rehash

Mettre à jour rubygems et installer passager:

$> gem update --system
$> gem install bundler     
$> gem install passenger

Installez nginx par le passager:

$> passenger start

Au moment d'écrire ces lignes, la dernière version de passager est 4.0.0, qui fonctionne avec Ruby 2.0.0.

Elastic Beanstalk Si vous utilisez Elastic Beanstalk, arrêtez le passager

$> Sudo service passenger stop

Initialisez rbenv en ajoutant ce qui suit à /opt/elasticbeanstalk/support/envvars.d/appenv

. /etc/profile.d/rbenv.sh

Démarrer le passager

$> Sudo service passenger start
17
James Lim