wiki:PackagingPolicy/Ruby

Ruby 関連パッケージポリシー

Ruby 関連(ライブラリ)のパッケージングポリシーを定めます。

本体のパッケージング

Ruby 本体は、原則としてその時点で選択した Matz CRuby の安定版を1種類のみ rpm パッケージで用意する ものとします。(2012/10/26現在のVineSeedでは1.9.3.286) それ以外のバージョンや別実装などはパッケージでは用意しません。必要に応じて、rbenvやrvm などで個別に導入管理してもらうものとします。(rbenv,ruby-build,rbenv-gemsetはパッケージ で用意しています)

ライブラリのパッケージング

gem から生成するライブラリ以外は vendorlib/vendorarch にいれ、ruby-* や *-ruby といった パッケージ名となります。べつのツールやライブラリ等の言語バインディング系も同様です。

gem から生成するパッケージは rubygem-* というパッケージ名とします。これは後述の gem_dir に入れることになります。ただし、何らかの重要な ruby ベースのソフトウエアをパッケージング する際に必要である という場合を除いて、rubygem-*.rpm パッケージは作らず、ユーザが gemや bundler等で管理するほうが望ましいと考えます。(rubygemsをrpmで網羅し管理することは現実的 ではないため)

各種マクロ (Vine7/ruby-1.9.3)

原則としてRPMパッケージでいれる標準以外のrubyライブラリ(rubygems系以外)は、 マクロ定義されている %ruby_vendorlibdir または %ruby_vendorarchdir に配置するものとします。 (ruby_libdir/ruby_archdirは標準ライブラリ用)

/usr/local/lib/site_ruby はパッケージ外で(gem以外で)インストールされるライブラリのための場所 となります。RPMでは管理しません。

  • /etc/rpm/macros.ruby に ruby package に関するマクロ
  • /etc/rpm/macros.rubygems に rubygem package に関するマクロ

Ruby 標準ライブラリ

  • %ruby_libdir %{_datadir}/ruby/1.9.1
  • %ruby_libarchdir %{_libdir}/ruby/1.9.1

Ruby ベンダ提供ライブラリ(rpm管理パッケージ)

  • %ruby_vendordir vendor_ruby
  • %ruby_vendorlibdir %{_datadir}/ruby/%{ruby_vendordir}/1.9.1
  • %ruby_vendorarchdir %{_libdir}/ruby/%{ruby_vendordir}/1.9.1

Ruby サイトローカルライブラリ(rpm管理外)

  • %ruby_sitedir site_ruby
  • %ruby_sitelibdir %{_prefix}/local/share/ruby/%{ruby_sitedir}/1.9.1
  • %ruby_sitearchdir %{_prefix}/local/%{_lib}/ruby/%{ruby_sitedir}/1.9.1

Rubygems パッケージ用マクロ

  • %gem_dir /usr/share/gems/1.9.1
  • %gem_instdir %{gem_dir}/gems/%{gem_name}-%{version}
  • %gem_extdir %{_libdir}/gems/1.9.1/exts/%{gem_name}-%{version}
  • %gem_libdir %{gem_instdir}/lib
  • %gem_cache %{gem_dir}/cache/%{gem_name}-%{version}.gem
  • %gem_spec %{gem_dir}/specifications/%{gem_name}-%{version}.gemspec
  • %gem_docdir %{gem_dir}/doc/%{gem_name}-%{version}

各種マクロ (Vine6/ruby-1.8.7)

以下は、Vine 6 以前のポリシーです。

原則としてRPMパッケージでいれるrubyライブラリは、マクロ定義されている %rlibdir または %rarchdir に配置するものとします。

/usr/local/lib/site_ruby はパッケージ外で(gem以外で)インストールされるライブラリのための場所となります。

/usr/lib/rpm/macrosで定義

  • %ruby /usr/bin/ruby
  • %__ruby /usr/bin/ruby
  • %rbindir %(%{ruby} -r rbconfig -e 'print Config::CONFIG["bindir"]')
    • /usr/bin
  • %rlibdir %(%{ruby} -r rbconfig -e 'print Config::CONFIG["rubylibdir"]')
    • /usr/lib/ruby/1.8
  • %rarchdir %(%{ruby} -r rbconfig -e 'print Config::CONFIG["archdir"]')
    • /usr/lib/ruby/1.8/i686-linux
    • /usr/lib64/ruby/1.8/x86_64-linux
    • /usr/lib/ruby/1.8/powerpc-linux
  • %rslibdir %(%{ruby} -r rbconfig -e 'print Config::CONFIG["sitelibdir"]')
    • /usr/local/lib/site_ruby/1.8
  • %rsarchdir %(%{ruby} -r rbconfig -e 'print Config::CONFIG["sitearchdir"]')
    • /usr/local/lib/site_ruby/1.8/i686-linux
    • /usr/local/lib64/site_ruby/1.8/x86_64-linux
    • /usr/local/lib/site_ruby/1.8/powerpc-linux

rubygems

gem でいれたものは上記とはべつに /var/lib/gem で管理される。