web-dev-qa-db-ja.com

異なるDebianベースのディストリビューション用に同じソースパッケージをビルドする

異なるバージョンとディストリビューション用に同じソースから複数の.debパッケージをビルドしたいと思っています。ソースコードがまったく同じであっても、依存関係とディストリビューション名が異なるため、debianフォルダー内の一部のファイルを共有できません。

そのため、バージョン/ディストリビューションごとに複数の「debian」ディレクトリを作成し、パッケージをビルドするときに検索する場所を指定したいと思います。出来ますか?

参考までに、debuildコマンドを使用して.debパッケージをビルドしています。

6
xylosper

異なるブランチを使用することは1つのアプローチであり、適切と思われる場合は@mestiaの回答の編集を提案できます(ただし、読み進めてください...)。

別のアプローチは、異なるファイルを並べて保持することです。この例については、 Solaar を参照してください。

ただし、これらのアプローチには両方とも重大な欠点があります。DebianまたはUbuntu(またはおそらく他の派生物)のパッケージには適していません。いつかパッケージをディストリビューションに入れる予定がある場合は、同じファイルのセットがさまざまなディストリビューションで正しい結果を生成するようにパッケージ化する必要があります。

この例については、 Solaar用のDebianパッケージ (完全な開示:パッケージを作成しました)をご覧ください。

一般的な考え方は、dpkg-vendorに配布とは何かを尋ねることです。したがって、DebianとUbuntuで異なる依存関係を持つSolaarの場合、debian/rules

derives_from_ubuntu := $(Shell (dpkg-vendor --derives-from Ubuntu && echo "yes") || echo "no")

さらに、dh_gencontrolのオーバーライドを下に移動して、必要に応じて「substvars」を入力します。

override_dh_gencontrol:
ifeq ($(derives_from_ubuntu),yes)
        dh_gencontrol -- '-Vsolaar:Desktop-Icon-Theme=gnome-icon-theme-full | oxygen-icon-theme-complete' -Vsolaar:Gnome-Icon-Theme=gnome-icon-theme-full
else
        dh_gencontrol -- '-Vsolaar:Desktop-Icon-Theme=gnome-icon-theme | oxygen-icon-theme' -Vsolaar:Gnome-Icon-Theme=gnome-icon-theme
endif

これにより、debian/controlに適切な変数が入力されます。

Package: solaar
Architecture: all
Depends: ${misc:Depends}, ${debconf:Depends}, udev (>= 175), passwd | adduser,
 ${python:Depends}, python-pyudev (>= 0.13), python-gi (>= 3.2), gir1.2-gtk-3.0 (>= 3.4),
 ${solaar:Desktop-Icon-Theme}

そして

Package: solaar-gnome3
Architecture: all
Section: gnome
Depends: ${misc:Depends}, solaar (= ${source:Version}),
 gir1.2-appindicator3-0.1, gnome-Shell (>= 3.4) | unity (>= 5.10),
 ${solaar:Gnome-Icon-Theme}

debian/rulesのテストを使用して、メイクファイルで実行できるアクションを制御できます。つまり、これを代替ファイルと組み合わせて、たとえば、パッケージビルドで使用される直前に適切なファイルをリンクできます。 。

4
Stephen Kitt

おそらく、git-buildpackageを使用して、さまざまなdebianディレクトリをさまざまなブランチに保持することができます。

1
mestia