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 を投げた。