「Ruby Gem パッケージガイドライン」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎ノート: 翻訳)
12行目: 12行目:
   
 
====バージョン付きパッケージ====
 
====バージョン付きパッケージ====
If you need to add a versioned package then use {{Ic|ruby-$gemname-$version}}, e.g. {{Ic|ruby-builder-3.2.1}}. So rubygem dependency {{Ic|builder=3.2.1}} will turn into {{Ic|ruby-builder-3.2.1}} Arch package.
+
バージョン管理されたパッケージを追加する必要がある場合は、{{ic|ruby-$gemname-$version}} 例えば {{ic|ruby-builder-3.2.1}} を使用してください。したがって、rubygem の依存性は {{ic|builder=3.2.1}} {{ic|ruby-builder-3.2.1}} Arch パッケージになります。
   
  +
依存関係を解決する必要がある場合、パッケージは最後の部分を含まないバージョンを使用しなければなりません。もしくは「大きい」例えば、rubygem dependency builder~>3.2.1 は ruby-builder-3.2.2 になります。このルールの例外は、依存関係が gem の最新バージョンと一致するか「大きい」場合です-この場合、新しいバージョンのパッケージを導入するのを避け、代わりに ruby-$gemname (HEADバージョン) を使用してください。
In case if you need to resolve "approximately greater" dependency {{Ic|~>}} then package should use version without the last part, e.g. rubygem dependency {{Ic|builder~>3.2.1}} will turn into {{Ic|ruby-builder-3.2}}. An exception for this rule is when "approximately greater" dependency matches the latest version of the gem - in this case avoid introducing a new versioned package and use just {{Ic|ruby-$gemname}} instead (the HEAD version).
 
   
  +
バージョン付きパッケージのもう1つの問題は、他のバージョンと競合する可能性があることです。 パッケージは同じファイルを {{ic|/usr/bin}} にインストールするためです。 この問題の1つの解決策は、バージョン管理されたパッケージがそのようなファイルをインストールしないようにすることです。これを実行できるのは HEAD バージョンのパッケージのみです。
Another problem with versioned packages is that it can conflict with other versions, e.g. because the packages install the same files in {{ic|/usr/bin}}. One solution for this problem is that versioned packages should not install such files - only HEAD version package can do this.
 
   
 
== サンプル ==
 
== サンプル ==

2020年9月9日 (水) 02:18時点における版

Ruby で書かれたソフトウェアの PKGBUILD の書き方。

パッケージの命名規則

ライブラリの場合、ruby-$gemname を使って下さい。アプリケーションの場合、プログラムの名前を使って下さい。どちらの場合でも名前は小文字である必要があります。

たとえ $gemnameruby が含まれている場合でも ruby- を最初に付けるようにしてください。後で gem の名前が短くなったときに困らないようにするためです。また、ツールによって簡単に名前を解析できるようにするためでもあります (PKGBUILD ジェネレータやバージョン・依存関係チェッカーなど)。

バージョン付きパッケージ

バージョン管理されたパッケージを追加する必要がある場合は、ruby-$gemname-$version 例えば ruby-builder-3.2.1 を使用してください。したがって、rubygem の依存性は builder=3.2.1ruby-builder-3.2.1 Arch パッケージになります。

依存関係を解決する必要がある場合、パッケージは最後の部分を含まないバージョンを使用しなければなりません。もしくは「大きい」例えば、rubygem dependency builder~>3.2.1 は ruby-builder-3.2.2 になります。このルールの例外は、依存関係が gem の最新バージョンと一致するか「大きい」場合です-この場合、新しいバージョンのパッケージを導入するのを避け、代わりに ruby-$gemname (HEADバージョン) を使用してください。

バージョン付きパッケージのもう1つの問題は、他のバージョンと競合する可能性があることです。 パッケージは同じファイルを /usr/bin にインストールするためです。 この問題の1つの解決策は、バージョン管理されたパッケージがそのようなファイルをインストールしないようにすることです。これを実行できるのは HEAD バージョンのパッケージのみです。

サンプル

ruby-json_pureAURruby-hpricot などを見てください。

ノート

問題が発生した場合に追加情報を受け取るには、--verbosegem の引数に追加します。

ノート: 最新版の Ruby では gem--no-user-install 引数の使用が必須になっています (詳しくは FS#28681 を参照)。

Quarry

手動で gemfile を管理するかわりに、ビルド済みの Arch バイナリパッケージの非公式リポジトリである quarry を使うことができます。詳しくは Quarry を参照。

配慮事項

Package contains reference to $pkgdir

たまにパッケージのビルド時に WARNING: Package contains reference to $pkgdir という警告が表示されることがあります。パッケージ化したファイルの中にパッケージをビルドしたディレクトリの絶対パスが含まれています。問題のファイルを探すために cd pkg && grep -R "$(pwd)" . を実行してください。ほとんどの場合、.../ext/Makefile 内にハードコードされたパスが原因です。

ノート: フォルダー ext には、通常Cで書かれたネイティブ拡張コードが含まれています。パッケージのインストール中に、rubygems は mkmf ライブラリを使用して Makefile を生成します。 次に make が呼び出され、共有ライブラリがコンパイルされ lib gem ディレクトリにコピーされます。

gem install が完了したら Makefile は不要です。package() 関数に rm -rf "$pkgdir/$_gemdir/gems/$_gemname-$pkgver/ext" を追加することで ext のファイルを完全に削除できます。

自動化

pacgemAUR ツールを使うことで gem のインストールは完全に自動化できます。一時的な PKGBUILD が作成され、makepkgnamcap が実行されます。作成されたパッケージは pacman でインストールされます。

Ruby gem の PKGBUILD を自動的に作成するツールとして gem2archAUR も存在します。生成後は PKGBUILD を手動で確認してください。