web-dev-qa-db-ja.com

アップストリームソースアーカイブを指定してDebianパッケージで2つのパッケージを生成するにはどうすればよいですか?

私はPPA用に何かを包装しています。アップストリームソースは、Makefileベースの.tar.gzアーカイブです。

このパッケージにはアーキテクチャに依存しない大量のデータがあるため、ビルドスクリプトで2つのパッケージを生成することをお勧めします。

  • パッケージ
  • パッケージ-データ

これを設定するにはどうすればよいですか? Debian controlファイルを編集して2つのパッケージを生成しましたが、適切なファイルを適切なパッケージに取得する方法がわかりません。

現在、データファイルはすべてMakefileを介してインストールされているため、ここで紛失しました。

14
Nathan Osman

これは、ドキュメントが不足していることを常に見つけてきた場所です。私はこれが他のパッケージでどのように行われるかを見て、これがどのように機能するかをほとんど学びました。 Debianパッケージングのほとんどのものと同様に、これを行う方法がいくつかあります。最も簡単な方法は、debian/package.installファイルを使用することです。これが私が取り組んだパッケージの例です imagination(bzr branch)

まず、パッケージを debian/control で作成する必要があります。現在、3つのスタンザがあります。 1つはソースパッケージ用で、もう1つは各バイナリパッケージ用です。 foo-dataパッケージはArchitecture: allでなければなりません。また、想像力はimagination-common (= ${source:Version})に依存することに注意してください。

次に、debian/imagination.installファイルを作成します。これには、想像パッケージに含める特定のファイルまたはパスが含まれます。このパッケージには、すべてのアーキテクチャ依存ファイルが必要です。デスクトップファイルは、Exec:行で呼び出すバイナリと言う必要があるため、含まれています。

usr/bin/
usr/lib/
/usr/share/applications/imagination.desktop

debian/imagination-common.installファイルを作成する必要があります。これには、アーキテクチャに依存しないすべてのファイル、画像、翻訳、ドキュメントなどが含まれます。

/usr/share/doc/
/usr/share/icons/
/usr/share/imagination/
/usr/share/locale/

man dh_installは、実際にここで何が起こっているかを説明しています。

多分、あなたは複数のバイナリパッケージをビルドする大きなパッケージを持っているでしょう。アップストリームMakefileを使用してすべてをdebian/tmpにインストールし、dh_installを使用してそこからディレクトリとファイルを適切なパッケージビルドディレクトリにコピーします。

「適切なパッケージビルドディレクトリ」とは、ビルドプロセスの終わりまでに、結果のfoo.debにあるすべてのものがsrc/debian/fooにあることを意味します。 foo-data.debで終わるファイルはsrc/debian/foo-dataにあります。 debian/rulesは本質的に単なるMakefileであるため、同じ結果を得る他の方法を想像することができます。

14
andrewsomething