WSLのUbuntuでRubyGems3.1.2から3.1.4へのUpdate時、operating_system.rbでエラーになる

はじめに
先日ふと思い立って、WindowsでGithub Pagesでウェブページを作ろうと思い、色々と調べているところだった。エラーが発生したのは、こちらの記事を参考に、WSLのUbuntuでJekyllの環境を整えるため、Rubyの環境をインストールしていた時だった。以下コマンドにてエラーが出てしまい、先に進まなくなった。
$ sudo gem install jekyll bundler
エラーが出た時点でのバージョンは以下のような状態だった。
$ ruby -v ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux-gnu] $ gem -v 3.1.2
原因調査
色々調べていった結果、RubyGemsのoperating_system.rbに不具合があるらしく(?)、バージョン3.1.4で修正されてるから、アップデートしてねというイシューを見かけた。しかし、アップデートしてみたところ、それでもエラーになる状態だった。
$ sudo gem update --system
Updating rubygems-update
Successfully installed rubygems-update-3.1.4
Parsing documentation for rubygems-update-3.1.4
Done installing documentation for rubygems-update after 0 seconds
Parsing documentation for rubygems-update-3.1.4
Done installing documentation for rubygems-update after 0 seconds
Installing RubyGems 3.1.4
Traceback (most recent call last):
5: from setup.rb:28:in `<main>'
4: from setup.rb:28:in `require'
3: from /var/lib/gems/2.7.0/gems/rubygems-update-3.1.4/lib/rubygems.rb:1424:in `<top (required)>'
2: from /var/lib/gems/2.7.0/gems/rubygems-update-3.1.4/lib/rubygems.rb:1424:in `require'
1: from /usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:49:in `<top (required)>'
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:50:in `<class:Specification>': undefined method `rubyforge_project=' for class `Gem::Specification' (NameError)
解決方法
さらに検索して、別のイシューにたどり着く。
こちらによると、RubyGems 3.1.4はダメだけど、3.1.3ならいい感じとのことだったので、試してみたら確かにいい感じだった。その後、インストール作業もスムーズに進められた。
$ sudo gem update --system 3.1.3
Updating rubygems-update
Fetching rubygems-update-3.1.3.gem
Successfully installed rubygems-update-3.1.3
Parsing documentation for rubygems-update-3.1.3
Installing ri documentation for rubygems-update-3.1.3
Installing darkfish documentation for rubygems-update-3.1.3
Done installing documentation for rubygems-update after 57 seconds
Parsing documentation for rubygems-update-3.1.3
Done installing documentation for rubygems-update after 0 seconds
Installing RubyGems 3.1.3
Successfully built RubyGem
Name: bundler
Version: 2.1.4
File: bundler-2.1.4.gem
Bundler 2.1.4 installed
RubyGems 3.1.3 installed
Regenerating binstubs
Parsing documentation for rubygems-3.1.3
Installing ri documentation for rubygems-3.1.3
=== 3.1.3 / 2020-05-05
* Fix platform comparison check in #contains_requirable_file?. Pull
request #3495 by Benoit Daloze.
* Improve gzip errors logging. Pull request #3485 by David Rodríguez.
* Fix incorrect `gem uninstall --all` message. Pull request #3483 by David
Rodríguez.
* Fix incorrect bundler version being required. Pull request #3458 by
David Rodríguez.
* Resolver: require NameTuple before use. Pull request #3171 by Olle
Jonsson.
* Use absolute paths with autoload. Pull request #3100 by David Rodríguez.
* Avoid changing $SOURCE_DATE_EPOCH. Pull request #3088 by Ellen Marie
Dash.
* Use Bundler 2.1.4. Pull request #3072 by Hiroshi SHIBATA.
* Fix gem install from a gemdeps file with complex dependencies.
Pull request #3054 by Luis Sagastume.
* Add tests to check if Gem.ruby_version works with ruby git master.
Pull request #3049 by Yusuke Endoh.
------------------------------------------------------------------------------
RubyGems installed the following executables:
/usr/bin/gem2.7
/usr/bin/bundle2.7
Ruby Interactive (ri) documentation was installed. ri is kind of like man
pages for Ruby libraries. You may access it like this:
ri Classname
ri Classname.class_method
ri Classname#instance_method
If you do not wish to install this documentation in the future, use the
--no-document flag, or set it as the default in your ~/.gemrc file. See
'gem help env' for details.
RubyGems system software updated
おわりに
それにしても、こういうインストール作業ってだいたいうまく行かないことが多い。インストールの紹介記事が書かれた時点から、各種パッケージのバージョンなどが目まぐるしくアップデートされて行くから、同じ状態を再現するのが難しいのだろうなとは思う。技術者にはエラーが発生したとき、根気強くそのエラーと付き合っていく能力が必須だとあらためて感じた。
参考
cannot update gem --system · Issue #3701 · rubygems/rubygems · GitHub
`gem update --system` results in dozens of `Gem::Specification#rubyforge_project=` deprecation warnings · Issue #3269 · rubygems/rubygems · GitHub
Bundler: How to troubleshoot RubyGems and Bundler TLS/SSL Issues