5.7. RubyGems パッケージ
本セクションでは、RubyGems パッケージの概要と、RPM への再パッケージ化方法を説明します。
5.7.1. RubyGems の概要
Ruby は、ダイナミックなインタープリター言語で、反映的なオブジェクト指向の汎用プログラミング言語です。
Ruby で書かれたプログラムは、特定の Ruby パッケージ形式を提供する RubyGems プロジェクトを使用してパッケージ化されます。
RubyGems で作成したパッケージは gems と呼ばれ、RPM に再パッケージ化することもできます。
本書は、gem
接頭辞とともに RubyGems の概念に関する用語を参照します。たとえば、.gemspec は gem specification
に使用され、RPM に関連する用語は非修飾になります。
5.7.2. RubyGems が RPM に関連している仕組み
RubyGems は、Ruby 独自のパッケージ形式を表します。ただし、RubyGems には RPM が必要とするメタデータと同様のものが含まれ、RubyGems から RPM への変換が可能になります。
Ruby Packaging Guidelines では、以下の方法で RubyGems パッケージを RPM に再パッケージ化できます。
- このような RPM は、残りすべてのディストリビューションに適合します。
- RPM パッケージ化された正しい gem をインストールすると、エンドユーザーで gem の依存関係を満たすことができます。
RubyGems では、spec
ファイル、パッケージ名、依存関係、その他の項目など、RPM と同様の用語を使用します。
残りの RHEL RPM ディストリビューションに合わせるには、RubyGems で作成したパッケージが以下の規則に従う必要があります。
gems の名前は以下のパターンに従います。
rubygem-%{gem_name}
シバンの行を実装するには、以下の文字列を使用する必要があります。
#!/usr/bin/ruby
5.7.3. RubyGems パッケージからの RPM パッケージの作成
RubyGems パッケージのソース RPM を作成するには、以下のファイルが必要です。
- gem ファイル
-
RPM
spec
ファイル
次のセクションでは、RubyGems が作成したパッケージから RPM パッケージを作成する方法を説明します。
5.7.3.1. RubyGems spec ファイルの規則
RubyGems spec
ファイルは、次の規則を満たしている必要があります。
-
gem の仕様の名前である
%{gem_name}
の定義が含まれる。 - パッケージのソースは、リリースされた gem アーカイブの完全な URL であること。パッケージのバージョンは、gem のバージョンであること。
ビルドに必要なマクロをプルできるように、以下のように定義された
BuildRequires:
ディレクティブが含まれる。BuildRequires:rubygems-devel
-
RubyGems
Requires
またはProvides
は自動生成されるため、含まれません。 Ruby バージョンの互換性を明示的に指定しない限り、以下のように定義された
BuildRequires:
ディレクティブは含まれません。Requires: ruby(release)
RubyGems で自動生成された依存関係 (
Requires:ruby (rubygems)
) で十分です。
5.7.3.2. RubyGems マクロ
以下の表は、RubyGems で作成したパッケージで役に立つマクロをリスト表示します。これらのマクロは、rubygems-devel
パッケージで提供されています。
マクロ名 | 拡張パス | 用途 |
---|---|---|
%{gem_dir} | /usr/share/gems | gem 構造のトップディレクトリー。 |
%{gem_instdir} | %{gem_dir}/gems/%{gem_name}-%{version} | gem の実際のコンテンツが含まれるディレクトリー。 |
%{gem_libdir} | %{gem_instdir}/lib | gem のライブラリーディレクトリー。 |
%{gem_cache} | %{gem_dir}/cache/%{gem_name}-%{version}.gem | キャッシュした gem。 |
%{gem_spec} | %{gem_dir}/specifications/%{gem_name}-%{version}.gemspec | gem 仕様ファイル。 |
%{gem_docdir} | %{gem_dir}/doc/%{gem_name}-%{version} | gem の RDoc ドキュメンテーション。 |
%{gem_extdir_mri} | %{_libdir}/gems/ruby/%{gem_name}-%{version} | gem 拡張のディレクトリー。 |
5.7.3.3. RubyGems spec ファイルの例
以下に、gem をビルドするための spec
ファイルの例と、その特定のセクションの説明を示します。
RubyGems spec ファイルの例
%prep %setup -q -n %{gem_name}-%{version} # Modify the gemspec if necessary # Also apply patches to code if necessary %patch0 -p1 %build # Create the gem as gem install only works on a gem file gem build ../%{gem_name}-%{version}.gemspec # %%gem_install compiles any C extensions and installs the gem into ./%%gem_dir # by default, so that we can move it into the buildroot in %%install %gem_install %install mkdir -p %{buildroot}%{gem_dir} cp -a ./%{gem_dir}/* %{buildroot}%{gem_dir}/ # If there were programs installed: mkdir -p %{buildroot}%{_bindir} cp -a ./%{_bindir}/* %{buildroot}%{_bindir} # If there are C extensions, copy them to the extdir. mkdir -p %{buildroot}%{gem_extdir_mri} cp -a .%{gem_extdir_mri}/{gem.build_complete,*.so} %{buildroot}%{gem_extdir_mri}/
次の表は、RubyGems spec
ファイルに含まれる特定の項目の詳細を説明しています。
ディレクティブ | RubyGems の詳細 |
---|---|
%prep |
RPM は gem アーカイブを直接デプロイメントできるため、 |
%build |
このディレクティブには、ソフトウェアをマシンコードに構築するためのコマンドまたは一連のコマンドが含まれます。
|
%install |
インストールは、 |
関連情報
5.7.3.4. gem2rpm を使用して RubyGems パッケージを RPM spec ファイルに変換する
gem2rpm
ユーティリティーは、RubyGems パッケージを RPM spec
ファイルに変換します。
以下のセクションでは、次の方法を説明します。
-
gem2rpm
ユーティリティーのインストール -
すべての
gem2rpm
オプションの表示 -
gem2rpm
を使用して RubyGems パッケージを RPMspec
ファイルに変換する -
gem2rpm
テンプレートの変更
5.7.3.4.1. GFS2 のインストール
以下の手順では、gem2rpm
ユーティリティーのインストール方法を説明します。
手順
-
RubyGems.org から
gem2rpm
にインストールするには、以下のコマンドを実行します。
$ gem install gem2rpm
5.7.3.4.2. gem2rpm のすべてのオプションの表示
以下の手順では、gem2rpm
ユーティリティーのすべてのオプションを表示する方法を説明します。
手順
gem2rpm
のすべてのオプションを表示するには、以下を実行してください。$ gem2rpm --help
5.7.3.4.3. gem2rpm を使用して RubyGems パッケージを RPM spec ファイルに変換する
次の手順では、gem2rpm
ユーティリティーを使用して RubyGems パッケージを RPM spec
ファイルに変換する方法について説明します。
手順
最新バージョンの gem をダウンロードし、この gem の RPM
spec
ファイルを生成します。$ gem2rpm --fetch <gem_name> > <gem_name>.spec
上記の手順では、gem のメタデータで提供される情報に基づいて RPM spec
ファイルを作成します。ただし、gem は、通常 RPM (ライセンスや変更ログなど) で提供される重要な情報に欠けています。したがって、生成された spec
ファイルを編集する必要があります。
5.7.3.4.4. gem2rpm テンプレート
gem2rpm
テンプレートとは、次の表に示す変数を含む標準の埋め込み Ruby (ERB) ファイルです。
変数 | 説明 |
---|---|
package |
gem の |
spec |
gem の |
config |
仕様のテンプレートヘルパーで使用されるデフォルトのマクロまたはルールを再定義できる |
runtime_dependencies |
パッケージランタイム依存関係のリストを示す |
development_dependencies |
パッケージ開発依存関係のリストを示す |
tests |
実行を許可するテストフレームワークのリストを示す |
files |
パッケージ内のファイルにフィルターが適用されていないリストを示す |
main_files |
メインパッケージに適したファイルのリストを提供する |
doc_files |
|
format |
gem の |
5.7.3.4.5. 利用可能な gem2rpm テンプレートのリスト表示
以下の手順では、利用可能な gem2rpm
テンプレートのリストを表示する方法を説明します。
手順
利用可能なテンプレートをすべて表示するには、以下を実行します。
$ gem2rpm --templates
5.7.3.4.6. gem2rpm テンプレートの編集
生成された spec
ファイルを編集する代わりに、RPM spec
ファイルの生成元のテンプレートを編集できます。
gem2rpm
のテンプレートを変更する場合は、以下の手順を行います。
手順
デフォルトのテンプレートを保存します。
$ gem2rpm -T > rubygem-<gem_name>.spec.template
- 必要に応じてテンプレートを編集します。
編集したテンプレートを使用して
spec
ファイルを生成します。$ gem2rpm -t rubygem-<gem_name>.spec.template <gem_name>-<latest_version.gem > <gem_name>-GEM.spec
これで、RPM のビルド の説明に従って、編集したテンプレートを使用して RPM パッケージをビルドできるようになりました。