mastodon の ruby を 2.4.2 に上げたいと思う人生だった

結論から言うと、現状の最新版である mastodon v1.6.1 をタグリリースのまま運用している場合には .ruby-version の縛りが効いているので ruby 2.4.2-p198 は適用されなかったです。ただ、master の .ruby-version は既に 2.4.2 になっているため、まぁ次のタグリリースの準備をしときましょうね、というオハナシ。

gentoo linux 上で動いている非docker な mastodon v1.6.1 です。

そこそこ余裕を見た容量を確保しておかないと ruby 2.4.2 のインストール時にコケます。

  :
  :
installing rdoc:              /home/mastodon/.rbenv/versions/2.4.2/share/ri/2.4.0/system
/var/tmp/ruby-build.20170923120839.2253/ruby-2.4.2/lib/fileutils.rb:1290:in `initialize': No space left on device @ rb_sysopen - /home/mastodon/.rbenv/versions/2.4.2/share/ri/2.4.0/system/IRB/Notifier/LeveledNotifier/new-c.ri (Errno::ENOSPC)

とりあえずこんくらいあれば大丈夫っぽい。

$ df -h /home/mastodon
Filesystem                           Size  Used Avail Use% Mounted on
/dev/mapper/vg001-lv002              3.9G  2.1G  1.6G  58% /home/mastodon

まず rbenv 自体を更新。

$ cd ~/.rbenv
$ git pull
remote: Counting objects: 18, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 18 (delta 7), reused 9 (delta 7), pack-reused 8
Unpacking objects: 100% (18/18), done.
From https://github.com/rbenv/rbenv
   755c820..2d7cefe  master     -> origin/master
 * [new tag]         v1.1.1     -> v1.1.1
Updating 755c820..2d7cefe
Fast-forward
 README.md               | 122 ++++++++++++++++++++++++++++++------------------
 libexec/rbenv---version |   2 +-
 src/configure           |   6 +--
 3 files changed, 80 insertions(+), 50 deletions(-)

次に ruby-build を更新します。これやらないと ruby 2.4.2 の情報が入ってこないため rbenv install 2.4.2 が通りません。

$ cd ~/.rbenv/plugins/ruby-build/
$ git pull
remote: Counting objects: 201, done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 201 (delta 110), reused 124 (delta 108), pack-reused 73
Receiving objects: 100% (201/201), 101.81 KiB | 861.00 KiB/s, done.
Resolving deltas: 100% (124/124), completed with 44 local objects.
From https://github.com/rbenv/ruby-build
   ccfd27f..ae1f285  master                 -> origin/master
   d74b77e..7884e92  end-to-support-old-rbx -> origin/end-to-support-old-rbx
 * [new tag]         v20170914              -> v20170914
 * [new tag]         v20170726              -> v20170726
Updating ccfd27f..ae1f285
Fast-forward
  :
~以下略~

うちの環境限定ですが、ちょいちょいオマジナイを含めてます。rbenv install 2.4.2 がすんなり通って問題ないならこの環境変数の設定は不要です。

export TMPDIR="/var/tmp"
export RUBY_CFLAGS="-march=sandybridge -O2 -pipe"
export MAKE_OPTS="-j5"

そんなわけで。

$ rbenv install 2.4.2
Downloading ruby-2.4.2.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.2.tar.bz2
Installing ruby-2.4.2...
Installed ruby-2.4.2 to /home/mastodon/.rbenv/versions/2.4.2

この時の細かい進捗状況は ${TMPDIR}/ruby-build.YYYYMMDDHHMMSS.NNN.log とかを tail -f しておくと確認できますね。

ちなみにうちの環境では、前述の TMPDIR を設定してあげないと、こんなエラーが出ます。

ruby-build: TMPDIR=/tmp cannot hold executables (partition possibly mounted with `noexec`)

まず現状。

$ cd ~
$ rbenv versions
* 2.4.1 (set by /home/mastodon/.rbenv/version)
  2.4.2
$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]

rbenv に 2.4.2 環境はできているものの、まだ使用するバージョンは 2.4.1 になってます。これを変更します。

$ rbenv global 2.4.2

そうすると……

$ rbenv versions
  2.4.1
* 2.4.2 (set by /home/mastodon/.rbenv/version)
$ ruby -v
ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux]

ちゃんと変更されてますね。 ただし……

$ cd ~/live
$ rbenv versions
* 2.4.1 (set by /home/mastodon/live/.ruby-version)
  2.4.2
$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]

……てな感じで mastodon のリポジトリに移動するとあいかわらず 2.4.1 がデフォルトになってます。これは rbenv versions のメッセージにもあるとおり .ruby-version が効いているからですね。

$ cat ~/live/.ruby-version
2.4.1

あとは次の mastodon のタグリリースを待ちましょう……別に master者になっても構いませんがw

https://manimani.cc/lib/plugins/linkback/exe/trackback.php/blog:2017:20170923132955_update_ruby_to_2.4.2