さくらのレンタルサーバでRubyを使いたい。
$ ruby -v
ruby 1.8.7 (2012-10-12 patchlevel 371) [amd64-freebsd9]
えぇ…
rbenv使って自前で入れます。
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
$ mkdir -p ~/.rbenv/plugins
$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
これでrbenvとruby-buildの準備ができました。
$ rbenv install 2.6.1
ruby-build: TMPDIR=/tmp cannot hold executables (partition possibly mounted with `noexec`)
(バージョン番号は適宜読み替えてください)
/tmp
に実行権限がないと怒られました。レンタルサーバーだししょうがないね。
$ mkdir tmp
$ TMPDIR=~/tmp rbenv install 2.6.1
Downloading ruby-2.6.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.1.tar.bz2
Installing ruby-2.6.1...
BUILD FAILED (FreeBSD 9.1-RELEASE-p24 using ruby-build 20190130)
Inspect or clean up the working tree at /home/example/tmp/ruby-build.00000000000000.00000
Results logged to /home/example/tmp/ruby-build.00000000000000.00000.log
Last 10 log lines:
xmlrpc 0.3.0
installing rdoc: /home/example/.rbenv/versions/2.6.1/share/ri/2.6.0/system
installing html-docs: /home/example/.rbenv/versions/2.6.1/share/doc/ruby
installing capi-docs: /home/example/.rbenv/versions/2.6.1/share/doc/ruby
The Ruby openssl extension was not compiled.
ERROR: Ruby install aborted due to missing extensions
Configure options used:
--prefix=/home/example/.rbenv/versions/2.6.1
LDFLAGS=-L/home/example/.rbenv/versions/2.6.1/lib
CPPFLAGS=-I/home/example/.rbenv/versions/2.6.1/include
つらい。
OpenSSLを自前ビルドします。(バージョン番号は適宜読み替えてください)
$ mkdir -p openssl/src
$ cd openssl/src
$ wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz
$ tar -zxvf openssl-1.1.1a.tar.gz
$ cd openssl-1.1.1a
$ ./config --prefix=~/openssl/openssl
$ make
$ make test
$ make install
いざ。
$ TMPDIR=~/tmp RUBY_CONFIGURE_OPTS=--with-openssl-dir=~/openssl/openssl rbenv install 2.6.1
Downloading ruby-2.6.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.1.tar.bz2
Installing ruby-2.6.1...
Installed ruby-2.6.1 to /home/example/.rbenv/versions/2.6.1
長く苦しい戦いだった…
$ rbenv shell 2.6.1
$ ruby -v
ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-freebsd9.1]
ちなみにRuby2.4までならOpenSSL自前で用意しなくてもビルドが通るんだけど、gem install
が落ちる。
$ rbenv shell 2.4.5
$ ruby -v
ruby 2.4.5p335 (2018-10-18 revision 65137) [x86_64-freebsd9.1]
$ gem install bundle
ERROR: Could not find a valid gem 'bundle' (>= 0), here is why:
Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: tlsv1 alert protocol version (https://api.rubygems.org/specs.4.8.gz)
なぜなのか
$ rbenv shell 2.4.5
$ ruby -ropenssl -e "p OpenSSL::OPENSSL_VERSION"
"OpenSSL 0.9.8zf 19 Mar 2015"
つらい
参考文献
- Home · rbenv/ruby-build Wiki · GitHub:ruby-buildのオプションとかはこのへんに書いてある
-
openssl/INSTALL at master · openssl/openssl · GitHub:OpenSSLのconfigure optionsとかはtarballの
INSTALL
に書いてある - Bundler: How to troubleshoot RubyGems and Bundler TLS/SSL Issues