ruby.cygport を読み解くだけだと、よくわからないところがあったため rubygems.cygport も読み解いてた。
ruby.cygport でダミールートにインストールすると、gem 群が /usr/share/ruby/3.2/gems/にインストールされる。
しかし cygwin のパッケージルール (現時点で公式から配布されている ruby-2.6.4-1) では /usr/share/gems に入ってる。
どうして? と思っていたら rubygem.cygport の追加ファイルの operating_system.rb がいい感じにしてくれるようだった。
システムによってパスなどの挙動を変えたい時は defaults 配下に operating_system.rb を置くのか...。
— いけむらさん (@fd0) 2023年4月14日
rubygems/rubygems.rb at v3.4.12 · rubygems/rubygems https://t.co/QEWqFaD7j8
operating_system.rb の中身を見ると、:gem_dir => File.join(path, RbConfig::CONFIG['datadir'].split(File::SEPARATOR).last, 'gems') あたりで上記のパスになっているっぽい。
ここまで調べて、もしかして rubygems を先にアップデート (とインストール) しないといけないのでは? と思った。
ruby をパッケージにする時に同梱の gem を使うけど、ダミールートにインストールする時に削除するため、そのあとの cygport 側の処理の一部 (pkg_info) が動かないことがわかっていて、そこらへんを上手く動かすにもとりあえずは rubygems を何とかした方が良さそうというのが今の所の見解。
`RubyGems' were not loaded.
-e:1:in `<main>': undefined method `default_dirs' for Gem:Module (NoMethodError)
print Gem.default_dirs[:system][:gem_dir]
^^^^^^^^^^^^^
というわけで rubygem を最新にする ITA を投げた。