Help us understand the problem. What is going on with this article?

Ubuntu 16.04 に Ruby 1.8.5 をインストールする

More than 3 years have passed since last update.

年末なので Ubuntu 16.04 に Ruby 1.8.5 をインストールして動かしてみます。

必要なライブラリをインストールする

Ruby 1.8.5 をビルドするにあたって必要となるライブラリをインストールします。
ここで一つ問題になるのが、OpenSSL0.9.8を要求される点です。
OpenSSL1.0系ではビルドに失敗します。

OpenSSL0.9.8をインストールするために古いリポジトリを使います。

$ echo 'deb http://old-releases.ubuntu.com/ubuntu lucid-security main' | sudo tee /etc/apt/sources.list.d/lucid-security.list
$ sudo apt-get update

準備ができたのでインストールします。

$ sudo apt-get install zlib1g-dev
$ sudo apt-get install -t lucid-security libssl-dev

その他必要となるライブラリをインストールします。

$ sudo apt-get install build-essential libyaml-dev libxml2-dev libxslt1-dev libreadline-dev

ruby-build をインストールする

この辺は公式のドキュメントそのままです。
https://github.com/rbenv/ruby-build#installing-as-a-standalone-program-advanced

$ git clone https://github.com/rbenv/ruby-build.git
$ cd ruby-build
$ sudo ./install.sh

Ruby 1.8.5 をインストールする

さて ruby-build には ruby 1.8.5 の definition がいくつか用意されていますが、これはそのままでは使えません。
※ わかってるなら Pull-Request しろという話ですがすいませんとりあえずそのまま進みます。

以下は Ruby 1.8.5-p231 をインストールした際のログです。

$ ruby-build 1.8.5-p231 ~/ruby-1.8.5
Downloading ruby-1.8.5-p231.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/1.8/ruby-1.8.5-p231.tar.bz2
Installing ruby-1.8.5-p231...

WARNING: ruby-1.8.5-p231 is past its end of life and is now unsupported.
It no longer receives bug fixes or critical security updates.

Installed ruby-1.8.5-p231 to /home/yono/ruby-1.8.5

Downloading rubygems-1.3.7.tgz...
-> https://dqw8nmjcqpjn7.cloudfront.net/388b90ae6273f655507b10c8ba6bee9ea72e7d49c3e610025531cb8c3ba67c9d
Installing rubygems-1.3.7...

BUILD FAILED (Ubuntu 16.04 using ruby-build 20160913)

Inspect or clean up the working tree at /tmp/ruby-build.20161104233606.31970
Results logged to /tmp/ruby-build.20161104233606.31970.log

Last 10 log lines:
Last-Modified: Fri, 23 May 2014 08:48:13 GMT
ETag: "e85cfadd025ff6ab689375adbf344bbe"
Accept-Ranges: bytes
Server: AmazonS3
X-Cache: Miss from cloudfront
Via: 1.1 96275b125ac8a1ca0365ff6f864de90c.cloudfront.net (CloudFront)
X-Amz-Cf-Id: vCBUe9FY2sEYl9REEnO8B3qa17peFB7nYlqidlOnoNr37jn7rCdMHQ==

/tmp/ruby-build.20161104233606.31970/rubygems-1.3.7 /tmp/ruby-build.20161104233606.31970 ~
ERROR:  Expected Ruby version >= 1.8.6, is 1.8.5.231

rubygems のインストールに失敗しています。何故かと言うと、インストールしようとしている rubygems 1.3.7 が Ruby 1.8.6 以上を要求しているからです。

https://github.com/rubygems/rubygems/blob/v1.3.7/lib/rubygems/commands/setup_command.rb#L59-L64

    required_version = Gem::Requirement.new '>= 1.8.6'

    unless required_version.satisfied_by? Gem.ruby_version then
      alert_error "Expected Ruby version #{required_version}, is #{Gem.ruby_version}"
      terminate_interaction 1
    end

rubygems 1.3.7 未満で Ruby 1.8.6 以上を要求しないバージョンを探してみると、rubygems 1.3.5 が該当しました。
ruby-build には Custom Definition という仕組みがあるのでそれを使って rubygems 1.3.5 をインストールするように変更してみましょう。
https://github.com/rbenv/ruby-build#custom-definitions

叩き台となる Ruby 1.8.5-p231 の definition を手元にコピーします。

$ cp ruby-build/share/ruby-build/1.8.5-p231 .

中身は以下のようになっています。

$ cat 1.8.5-p231
require_gcc
install_package "ruby-1.8.5-p231" "https://cache.ruby-lang.org/pub/ruby/1.8/ruby-1.8.5-p231.tar.bz2#b31a8db0a3b538c28bca1c9b08a07eb55a39547fdaad00c045f073851019639c" warn_eol auto_tcltk standard
install_package "rubygems-1.3.7" "https://rubygems.org/rubygems/rubygems-1.3.7.tgz#388b90ae6273f655507b10c8ba6bee9ea72e7d49c3e610025531cb8c3ba67c9d" ruby

なんとなく3行目の rubygems-1.3.7rubygems-1.3.5 に変えるとよさそうです。末尾にハッシュ値が付いてるのでそれも記載する必要があります。

$ wget https://rubygems.org/rubygems/rubygems-1.3.5.tgz
$ sha256sum rubygems-1.3.5.tgz
c0928cc1ae54dedfb5f57ad3829882c1f90e42bc17bf50491aa6f93a937546ac  rubygems-1.3.5.tgz

これを元にして 1.8.5-p231 を修正します。

$ cat 1.8.5-p231
require_gcc
install_package "ruby-1.8.5-p231" "https://cache.ruby-lang.org/pub/ruby/1.8/ruby-1.8.5-p231.tar.bz2#b31a8db0a3b538c28bca1c9b08a07eb55a39547fdaad00c045f073851019639c" warn_eol auto_tcltk standard
install_package "rubygems-1.3.5" "https://rubygems.org/rubygems/rubygems-1.3.5.tgz#c0928cc1ae54dedfb5f57ad3829882c1f90e42bc17bf50491aa6f93a937546ac" ruby

修正した 1.8.5-p231 を使って Ruby 1.8.5 をインストールします。 ruby-build の引数にファイルを指定すると、そのファイルの記述を元にしてインストールが進みます。

$ ruby-build ./1.8.5-p231 ~/ruby-1.8.5

ですがこのままだとエラーが出ます。

Downloading ruby-1.8.5-p231.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/1.8/ruby-1.8.5-p231.tar.bz2
Installing ruby-1.8.5-p231...

WARNING: ruby-1.8.5-p231 is past its end of life and is now unsupported.
It no longer receives bug fixes or critical security updates.


BUILD FAILED (Ubuntu 16.04 using ruby-build 20160913)

Inspect or clean up the working tree at /tmp/ruby-build.20161115225857.13675
Results logged to /tmp/ruby-build.20161115225857.13675.log

Last 10 log lines:
                 from ossl.h:45,
                 from ossl_cipher.c:11:
/usr/include/openssl/bn.h:412:5: note: previous declaration of ‘BN_pseudo_rand_range’ was here
 int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range);
     ^
Makefile:176: ターゲット 'ossl_cipher.o' のレシピで失敗しました
make[1]: *** [ossl_cipher.o] エラー 1
make[1]: ディレクトリ '/tmp/ruby-build.20161115225857.13675/ruby-1.8.5-p231/ext/openssl' から出ます
Makefile:241: ターゲット 'all' のレシピで失敗しました
make: *** [all] エラー 1

半ば強引ですが openssl のヘッダファイルに手を加えます。
/usr/include/openssl/bn.h の411行目と412行目をコメントアウトします。

$ diff /usr/include/openssl/bn.h ./bn.h 
411,412c411,412
< int   BN_rand_range(BIGNUM *rnd, const BIGNUM *range);
< int   BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range);
---
> //int BN_rand_range(BIGNUM *rnd, const BIGNUM *range);
> //int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range);

これでビルドが通るようになりました。

$ ruby-build ./1.8.5-p231 ~/ruby-1.8.5
Downloading ruby-1.8.5-p231.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/1.8/ruby-1.8.5-p231.tar.bz2
Installing ruby-1.8.5-p231...

WARNING: ruby-1.8.5-p231 is past its end of life and is now unsupported.
It no longer receives bug fixes or critical security updates.

Installed ruby-1.8.5-p231 to /home/yono/ruby-1.8.5

Downloading rubygems-1.3.5.tgz...
-> https://rubygems.org/rubygems/rubygems-1.3.5.tgz
Installing rubygems-1.3.5...
Installed rubygems-1.3.5 to /home/yono/ruby-1.8.5

試しに動かしてみます。

$ ./ruby-1.8.5/bin/ruby -v
ruby 1.8.5 (2008-06-20 patchlevel 231) [x86_64-linux]

はい。

$ ./ruby-1.8.5/bin/irb
irb(main):001:0> newstyle_hash = {key: 'value'}
SyntaxError: compile error
(irb):1: odd number list for Hash
newstyle_hash = {key: 'value'}
                     ^
(irb):1: syntax error, unexpected ':', expecting '}'
newstyle_hash = {key: 'value'}
                     ^
(irb):1: syntax error, unexpected '}', expecting $end
    from (irb):1
    from :0

そうですね。

irb(main):002:0> oldstyle_hash = {:key => 'value'}
=> {:key=>"value"}

よっしゃ。

$ ./ruby-1.8.5/bin/gem source --list
*** CURRENT SOURCES ***

http://gems.rubyforge.org/

アッ。

$ ./ruby-1.8.5/bin/gem source --add https://rubygems.org/
https://rubygems.org/ added to sources
$ ./ruby-1.8.5/bin/gem source --remove http://gems.rubyforge.org/
http://gems.rubyforge.org/ removed from sources

ハイ。

$ ./ruby-1.8.5/bin/gem install -r rake -v 0.8.0
Successfully installed rake-0.8.0
1 gem installed
Installing ri documentation for rake-0.8.0...
Installing RDoc documentation for rake-0.8.0...

$ ./ruby-1.8.5/bin/gem install -r rails -v 1.2.6
Successfully installed activesupport-1.4.4
Successfully installed activerecord-1.15.6
Successfully installed actionpack-1.13.6
Successfully installed actionmailer-1.3.6
Successfully installed actionwebservice-1.2.6
Successfully installed rails-1.2.6
6 gems installed
Installing ri documentation for activesupport-1.4.4...
Installing ri documentation for activerecord-1.15.6...
Installing ri documentation for actionpack-1.13.6...
Installing ri documentation for actionmailer-1.3.6...
Installing ri documentation for actionwebservice-1.2.6...
Installing ri documentation for rails-1.2.6...
Installing RDoc documentation for activesupport-1.4.4...
Installing RDoc documentation for activerecord-1.15.6...
Installing RDoc documentation for actionpack-1.13.6...
Installing RDoc documentation for actionmailer-1.3.6...
Installing RDoc documentation for actionwebservice-1.2.6...
Installing RDoc documentation for rails-1.2.6...

こうして。

$ ./ruby-1.8.5/bin/rails blog
      create  
      create  app/controllers
      create  app/helpers
      create  app/models
      create  app/views/layouts
      create  config/environments
      create  components
      create  db
      create  doc
      create  lib
      create  lib/tasks
      create  log
      create  public/images
      create  public/javascripts
      create  public/stylesheets
      create  script/performance
      create  script/process
      create  test/fixtures
      create  test/functional
      create  test/integration
      create  test/mocks/development
      create  test/mocks/test
      create  test/unit
      create  vendor
      create  vendor/plugins
      create  tmp/sessions
      create  tmp/sockets
      create  tmp/cache
      create  tmp/pids
      create  Rakefile
      create  README
      create  app/controllers/application.rb
      create  app/helpers/application_helper.rb
      create  test/test_helper.rb
      create  config/database.yml
      create  config/routes.rb
      create  public/.htaccess
      create  config/boot.rb
      create  config/environment.rb
      create  config/environments/production.rb
      create  config/environments/development.rb
      create  config/environments/test.rb
      create  script/about
      create  script/breakpointer
      create  script/console
      create  script/destroy
      create  script/generate
      create  script/performance/benchmarker
      create  script/performance/profiler
      create  script/process/reaper
      create  script/process/spawner
      create  script/process/inspector
      create  script/runner
      create  script/server
      create  script/plugin
      create  public/dispatch.rb
      create  public/dispatch.cgi
      create  public/dispatch.fcgi
      create  public/404.html
      create  public/500.html
      create  public/index.html
      create  public/favicon.ico
      create  public/robots.txt
      create  public/images/rails.png
      create  public/javascripts/prototype.js
      create  public/javascripts/effects.js
      create  public/javascripts/dragdrop.js
      create  public/javascripts/controls.js
      create  public/javascripts/application.js
      create  doc/README_FOR_APP
      create  log/server.log
      create  log/production.log
      create  log/development.log
      create  log/test.log

こうじゃ。

長くなりそうなのでここまでにします。
こちらからは以上です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした