「他のディストリビューションのパッケージの作成」の版間の差分
(更新) |
Kusanaginoturugi (トーク | 投稿記録) (→参照: 削除) |
||
(5人の利用者による、間の27版が非表示) | |||
1行目: | 1行目: | ||
[[Category:パッケージ開発]] |
[[Category:パッケージ開発]] |
||
[[en:Creating packages for other distributions]] |
[[en:Creating packages for other distributions]] |
||
+ | [[pt:Creating packages for other distributions]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|パッケージの作成}} |
{{Related|パッケージの作成}} |
||
9行目: | 10行目: | ||
* [[:Category:仮想化|仮想化]]はわかりやすい方法ですが、追加したシステムの管理が必要になります。 |
* [[:Category:仮想化|仮想化]]はわかりやすい方法ですが、追加したシステムの管理が必要になります。 |
||
− | * ディストリビューションごとのパッケージングツールを使う。例: {{Aur|dh-make}}, {{ |
+ | * ディストリビューションごとのパッケージングツールを使う。例: {{Aur|dh-make}}, {{Pkg|dpkg}} (Debian), {{Aur|rpm-tools}} (Fedora)。あまり複雑ではない作業には [https://tldp.org/HOWTO/html_single/Debian-Binary-Package-Building-HOWTO/ dpkg-deb] などのショートカットが適しているかもしれません。 |
− | * [[chroot]] して Arch の中に (別に) ベースシステムを作成する。例: {{ |
+ | * [[chroot]] して Arch の中に (別に) ベースシステムを作成する。例: {{Pkg|debootstrap}} (Debian), {{Aur|dnf}} (Fedora)。最小限の、クリーンな環境を作れるという利点があります。 |
− | * パッケージングツールによる自動的な方法で chroot を使う。例: {{Aur|pbuilder-ubuntu}} (Debian), {{Aur|mock |
+ | * パッケージングツールによる自動的な方法で chroot を使う。例: {{Aur|pbuilder-ubuntu}} (Debian), {{Aur|mock}} (Fedora)。 |
− | * (互換性を失う可能性がある) 依存関係を処理する別の方法として [http://jurjenbokma.com/ApprenticesNotes/getting_statlinked_binaries_on_debian. |
+ | * (互換性を失う可能性がある) 依存関係を処理する別の方法として [http://jurjenbokma.com/ApprenticesNotes/getting_statlinked_binaries_on_debian.xhtml 静的リンク]。ほとんどのディストリビューションはこの方法を認めてないので注意してください。 |
* 使用するディストリビューションに関係なく一般的な原則は適用されます。例えば、[https://bbs.archlinux.org/viewtopic.php?id=67561 パッケージを root でビルドしてはいけません]。 |
* 使用するディストリビューションに関係なく一般的な原則は適用されます。例えば、[https://bbs.archlinux.org/viewtopic.php?id=67561 パッケージを root でビルドしてはいけません]。 |
||
19行目: | 20行目: | ||
[https://www.debian.org/doc/manuals/packaging-tutorial/packaging-tutorial.ja.pdf Debian パッケージングチュートリアル]に基本的なことが説明されています。チュートリアルでは以下のツールの利用について記述しています: |
[https://www.debian.org/doc/manuals/packaging-tutorial/packaging-tutorial.ja.pdf Debian パッケージングチュートリアル]に基本的なことが説明されています。チュートリアルでは以下のツールの利用について記述しています: |
||
− | {{App|cowdancer|pbuilder の copy-on-write ラッパー|https://packages.debian.org/sid/cowdancer|{{Aur|cowdancer}}}} |
+ | * {{App|cowdancer|pbuilder の copy-on-write ラッパー|https://packages.debian.org/sid/cowdancer|{{Aur|cowdancer}}}} |
− | {{App|debootstrap|dpkg や apt が利用できない環境でも、スクラッチから Debian ベースシステムを作成するためのツール。|https://packages.debian.org/sid/debootstrap|{{ |
+ | * {{App|debootstrap|dpkg や apt が利用できない環境でも、スクラッチから Debian ベースシステムを作成するためのツール。|https://packages.debian.org/sid/debootstrap|{{Pkg|debootstrap}}}} |
− | {{App|devscripts|Debian パッケージメンテナの生活を楽にするスクリプト|https://packages.debian.org/sid/devscripts|{{Aur|devscripts}}}} |
+ | * {{App|devscripts|Debian パッケージメンテナの生活を楽にするスクリプト|https://packages.debian.org/sid/devscripts|{{Aur|devscripts}}}} |
− | {{App|dh-autoreconf|autoreconf を実行してビルド後に片付けを行う Debhelper アドオン|https://packages.debian.org/sid/dh-autoreconf|{{Aur|dh-autoreconf}}}} |
+ | * {{App|dh-autoreconf|autoreconf を実行してビルド後に片付けを行う Debhelper アドオン|https://packages.debian.org/sid/dh-autoreconf|{{Aur|dh-autoreconf}}}} |
− | {{App|dh-make|ソースアーカイブを Debian パッケージソースに変換するツール|https://packages.debian.org/sid/dh-make|{{Aur|dh-make}}}} |
+ | * {{App|dh-make|ソースアーカイブを Debian パッケージソースに変換するツール|https://packages.debian.org/sid/dh-make|{{Aur|dh-make}}}} |
− | {{App|[[Wikipedia:ja:dpkg|dpkg]]|Debian パッケージマネージャ|https://packages.debian.org/sid/dpkg|{{ |
+ | * {{App|[[Wikipedia:ja:dpkg|dpkg]]|Debian パッケージマネージャ|https://packages.debian.org/sid/dpkg|{{Pkg|dpkg}}}} |
− | {{App|dput|Debian パッケージのアップロードツール|https://packages.debian.org/sid/dput|{{Aur|dput}}}} |
+ | * {{App|dput|Debian パッケージのアップロードツール|https://packages.debian.org/sid/dput|{{Aur|dput}}}} |
− | {{App| |
+ | * {{App|equivs|Debian パッケージの依存関係を回避するツール|https://launchpad.net/ubuntu/+source/equivs|{{Aur|equivs}}}}* |
− | {{App| |
+ | * {{App|git-buildpackage|Git によるパッケージビルドシステムを統合する Debian のツール|https://honk.sigxcpu.org/piki/projects/git-buildpackage/|{{Aur|git-buildpackage}}}} |
+ | * {{App|pbuilder-ubuntu|Debian パッケージを作成するための Chroot 環境|https://launchpad.net/ubuntu/+source/pbuilder|{{Aur|pbuilder-ubuntu}}}} |
||
− | {{App|[[Wikipedia:Quilt|quilt]]|パッチによる変更を記録して一連のパッチを管理する|http://savannah.nongnu.org/projects/quilt|{{Pkg|quilt}}}} |
||
+ | * {{App|[[Wikipedia:Quilt (software)|quilt]]|パッチによる変更を記録して一連のパッチを管理する|https://savannah.nongnu.org/projects/quilt|{{Pkg|quilt}}}} |
||
− | {{Note|存在しないツール: ''lintian'', ''reprepo |
+ | {{Note|存在しないツール: ''lintian'', ''reprepo'', ''cdbs'', ''svn-buildpackage'', ''javahelper''}} |
+ | === Debian に関するヒントとテクニック === |
||
− | === Tips and Tricks === |
||
==== 依存関係の処理を無視する ==== |
==== 依存関係の処理を無視する ==== |
||
50行目: | 52行目: | ||
dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info |
dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info |
||
+ | {{Note|実行時の依存関係 (とバージョン番号の一致) を {{ic|debian/control}} に手動で追加してください。{{ic|<nowiki>${shlibs:Depends}</nowiki>}} はもはや意味を持ちません。}} |
||
− | {{Note|Any run-time dependencies (and matching version numbers) should be added manually to |
||
− | {{ic|debian/control}}, where {{ic|<nowiki>${shlibs:Depends}</nowiki>}} now has no meaning.}} |
||
+ | {{Warning|たとえこの方法でパッケージをビルドできたとしても、動かなくなってしまうことがないように (chroot などの) クリーンな環境でビルドを行うことを強く推奨します。}} |
||
− | {{Warning|Even ''if'' you manage to successfully build a package this way, it is '''strongly recommended''' to build in a clean environment (such as chroot) to prevent any incompatibilities.}} |
||
==== chroot をセットアップ ==== |
==== chroot をセットアップ ==== |
||
59行目: | 60行目: | ||
''pbuilder-ubuntu'' のイントロダクションとして [https://wiki.ubuntu.com/PbuilderHowto Pbuilder How-To] を見て下さい。[[Wikipedia:ja:コピーオンライト|copy-on-write]] による著しいパフォーマンスの向上がある ''cowdancer'' を合わせて使うことが推奨されています。 |
''pbuilder-ubuntu'' のイントロダクションとして [https://wiki.ubuntu.com/PbuilderHowto Pbuilder How-To] を見て下さい。[[Wikipedia:ja:コピーオンライト|copy-on-write]] による著しいパフォーマンスの向上がある ''cowdancer'' を合わせて使うことが推奨されています。 |
||
− | * [[AUR]] の {{ |
+ | * [[AUR]] の {{Pkg|debian-archive-keyring}}, {{Pkg|ubuntu-keyring}}, {{Aur|gnupg1}} が必要です。 |
− | * ''eatmydata'' は |
+ | * ''eatmydata'' は {{Pkg|libeatmydata}} や {{Aur|lib32-eatmydata}} で入手できます。{{ic|LD_PRELOAD}} エラーが起こらないように、chroot の中と外両方でインストールする必要があります。Arch と Debian ではパスが異なっているため、以下のシンボリックリンクを作成してください: |
# ln -s /usr/lib/libeatmydata.so.1.1.1 /usr/lib/libeatmydata/libeatmydata.so |
# ln -s /usr/lib/libeatmydata.so.1.1.1 /usr/lib/libeatmydata/libeatmydata.so |
||
# ln -s /usr/lib/libeatmydata.so.1.1.1 /usr/lib/libeatmydata/libeatmydata.so.1 |
# ln -s /usr/lib/libeatmydata.so.1.1.1 /usr/lib/libeatmydata/libeatmydata.so.1 |
||
69行目: | 70行目: | ||
=== 参照 === |
=== 参照 === |
||
− | * [ |
+ | * [https://www.debian.or.jp/community/devel/debian-policy-ja/policy.ja.html/ Debian ポリシー] |
* [https://www.debian.org/doc/manuals/maint-guide/index.ja.html 新メンテナーガイド] |
* [https://www.debian.org/doc/manuals/maint-guide/index.ja.html 新メンテナーガイド] |
||
* [http://raphaelhertzog.com/2012/08/08/how-to-use-quilt-to-manage-patches-in-debian-packages/ Quilt in Debian packaging] |
* [http://raphaelhertzog.com/2012/08/08/how-to-use-quilt-to-manage-patches-in-debian-packages/ Quilt in Debian packaging] |
||
77行目: | 78行目: | ||
[https://fedoraproject.org/wiki/How_to_create_an_RPM_package How to create an RPM package] |
[https://fedoraproject.org/wiki/How_to_create_an_RPM_package How to create an RPM package] |
||
− | {{App|rpm- |
+ | * {{App|rpm-tools|RPM.org のフォーク、主要な RPM ディストロで使用されています|http://www.rpm.org/|{{Pkg|rpm-tools}}}} |
− | {{App|mock|ソース RPM を取得して chroot で RPM をビルド| |
+ | * {{App|mock|ソース RPM を取得して chroot で RPM をビルド|https://github.com/rpm-software-management/mock/wiki|{{Aur|mock}}}} |
=== 参照 === |
=== 参照 === |
||
− | *[http://fedoraproject.org/wiki/Projects/Mock Projects/Mock] |
||
*[https://copr.fedoraproject.org/ Copr] |
*[https://copr.fedoraproject.org/ Copr] |
||
96行目: | 96行目: | ||
# [https://build.opensuse.org/] でアカウントを作成。 |
# [https://build.opensuse.org/] でアカウントを作成。 |
||
− | # {{AUR|osc}} パッケージを[[インストール]]。上流のドキュメントは [ |
+ | # {{AUR|osc}} パッケージを[[インストール]]。上流のドキュメントは [https://en.opensuse.org/openSUSE:OSC こちら]。 |
# サンプルプロジェクト {{ic|home:foo}} を作成。 |
# サンプルプロジェクト {{ic|home:foo}} を作成。 |
||
# サンプルサブプロジェクト {{ic|home:foo:bar}} を作成 (任意、ただし推奨)。 |
# サンプルサブプロジェクト {{ic|home:foo:bar}} を作成 (任意、ただし推奨)。 |
||
152行目: | 152行目: | ||
しばらくすると、OBS はパッケージのビルドを開始します。 |
しばらくすると、OBS はパッケージのビルドを開始します。 |
||
+ | ==== openSUSE に関するヒントとテクニック ==== |
||
− | ==== Tips and tricks ==== |
||
* パッケージのビルドの進捗を確認するには、作業ディレクトリに cd してから次を実行: {{ic|osc results}}。 |
* パッケージのビルドの進捗を確認するには、作業ディレクトリに cd してから次を実行: {{ic|osc results}}。 |
||
+ | * Arch:Core と Arch:Extra および Arch:Community リポジトリが存在します。[community] can be appended as a "repository path" after adding the main Arch repository to the project. |
||
− | * 2つのリポジトリが存在します: Arch_Core と Arch_Extra。この文章を書いている時点では [community] はまだ存在しません。そのため、あなたのプロジェクトが [community] のパッケージに依存する場合、サブプロジェクトとしてプロジェクトに (手動で) 含める必要があります。 |
||
− | * 非公式の arch-community リポジトリが [https://build.opensuse.org/project/show/home:roman-neuhauser:arch-community こちら] にあります。{{ic|osc branch home:roman-neuhauser:arch-community/<package-name> home:foo:bar/<package-name>}} でそこからパッケージを複製することが可能です。 |
||
==== ca-certificates-utils パッケージの問題 ==== |
==== ca-certificates-utils パッケージの問題 ==== |
||
163行目: | 162行目: | ||
Prefer: ca-certificates-utils ca-certificates |
Prefer: ca-certificates-utils ca-certificates |
||
− | === 参照 === |
+ | ==== openSUSE についての参照 ==== |
+ | |||
+ | * サンプルリポジトリ: [https://build.opensuse.org/package/show/home:metakcahura/cpu-x-git arch-cpu-x-git] |
||
+ | * [https://en.opensuse.org/openSUSE:Packaging_guidelines openSUSE のパッケージングガイドライン] |
||
+ | * [https://en.opensuse.org/Portal:Packaging Portal:Packaging from openSUSE wiki] |
||
+ | |||
+ | == マルチディストリビューション == |
||
+ | |||
+ | === Pacur === |
||
+ | [https://github.com/pacur/pacur Pacur] のようなツールは、一貫したパッケージ仕様形式で複数の Linux ディストリビューション用のパッケージをビルドすることができます。 |
||
− | * 使用例: [https://build.opensuse.org/project/show/home:metakcahura:arch-deepin arch-deepin] |
||
+ | パッケージ形式は [[PKGBUILD]] に非常に似ているので、既存の PKGBUILD を再利用し、debian や rpm パッケージを容易にビルドできるように、いくつかのディストリビューション固有の変数を追加するのが簡単です。 |
||
− | * [http://en.opensuse.org/openSUSE:Packaging_guidelines openSUSE packaging guidelines] |
||
+ | 素早く PKGBUILD を適応することで、Amazon Linux、Centos、Debian、Oracle Linux、Fedora、およびUbuntu用のパッケージをビルドすることができます。 |
||
− | * [http://en.opensuse.org/Portal:Packaging Portal:Packaging from openSUSE wiki] |
||
== 参照 == |
== 参照 == |
2023年8月8日 (火) 23:00時点における最新版
関連記事
Arch は最高です。しかしながら、時には他のディストリビューションのパッケージを作成したいと思うときもあるでしょう。
目次
一般
- 仮想化はわかりやすい方法ですが、追加したシステムの管理が必要になります。
- ディストリビューションごとのパッケージングツールを使う。例: dh-makeAUR, dpkg (Debian), rpm-toolsAUR (Fedora)。あまり複雑ではない作業には dpkg-deb などのショートカットが適しているかもしれません。
- chroot して Arch の中に (別に) ベースシステムを作成する。例: debootstrap (Debian), dnfAUR (Fedora)。最小限の、クリーンな環境を作れるという利点があります。
- パッケージングツールによる自動的な方法で chroot を使う。例: pbuilder-ubuntuAUR (Debian), mockAUR (Fedora)。
- (互換性を失う可能性がある) 依存関係を処理する別の方法として 静的リンク。ほとんどのディストリビューションはこの方法を認めてないので注意してください。
- 使用するディストリビューションに関係なく一般的な原則は適用されます。例えば、パッケージを root でビルドしてはいけません。
Debian
Debian パッケージングチュートリアルに基本的なことが説明されています。チュートリアルでは以下のツールの利用について記述しています:
- cowdancer — pbuilder の copy-on-write ラッパー
- debootstrap — dpkg や apt が利用できない環境でも、スクラッチから Debian ベースシステムを作成するためのツール。
- devscripts — Debian パッケージメンテナの生活を楽にするスクリプト
- dh-autoreconf — autoreconf を実行してビルド後に片付けを行う Debhelper アドオン
- dh-make — ソースアーカイブを Debian パッケージソースに変換するツール
- dpkg — Debian パッケージマネージャ
- dput — Debian パッケージのアップロードツール
- equivs — Debian パッケージの依存関係を回避するツール
- git-buildpackage — Git によるパッケージビルドシステムを統合する Debian のツール
- pbuilder-ubuntu — Debian パッケージを作成するための Chroot 環境
- quilt — パッチによる変更を記録して一連のパッチを管理する
Debian に関するヒントとテクニック
依存関係の処理を無視する
dpkg は pacman によってインストールされた依存関係を認識しません。そのため dpkg-buildpackage
は以下のようなエラーで失敗することになります:
dpkg-checkbuilddeps: Unmet build dependencies: build-essential:native debhelper (>= 8.0.0) dpkg-buildpackage: warning: build dependencies/conflicts unsatisfied; aborting
これを無視するには、-d フラグを使って下さい:
$ dpkg-buildpackage -d -us -uc
また、以下の行を debian/rules
に追加して dh_shlibdeps
を上書きする必要もあります:
override_dh_shlibdeps: dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info
chroot をセットアップ
pbuilder-ubuntu のイントロダクションとして Pbuilder How-To を見て下さい。copy-on-write による著しいパフォーマンスの向上がある cowdancer を合わせて使うことが推奨されています。
- AUR の debian-archive-keyring, ubuntu-keyring, gnupg1AUR が必要です。
- eatmydata は libeatmydata や lib32-eatmydataAUR で入手できます。
LD_PRELOAD
エラーが起こらないように、chroot の中と外両方でインストールする必要があります。Arch と Debian ではパスが異なっているため、以下のシンボリックリンクを作成してください:
# ln -s /usr/lib/libeatmydata.so.1.1.1 /usr/lib/libeatmydata/libeatmydata.so # ln -s /usr/lib/libeatmydata.so.1.1.1 /usr/lib/libeatmydata/libeatmydata.so.1
- サンプル pbuilderrc
- pbuilder で処理するソースパッケージを作成するには:
$ dpkg-buildpackage -d -us -uc -S
参照
Fedora
- rpm-tools — RPM.org のフォーク、主要な RPM ディストロで使用されています
- mock — ソース RPM を取得して chroot で RPM をビルド
参照
openSUSE
Open Build Service は自動的な、一貫した、再現性のある方法でソースからパッケージを作成・配布するための総合システムです。.deb, .rpm そして Arch パッケージをサポートしています。
OBS と OSC で Arch パッケージを作成
パッケージの作成
- [1] でアカウントを作成。
- oscAUR パッケージをインストール。上流のドキュメントは こちら。
- サンプルプロジェクト
home:foo
を作成。 - サンプルサブプロジェクト
home:foo:bar
を作成 (任意、ただし推奨)。 osc meta pkg -e home:foo:bar ham
で新しいサンプルパッケージham
を作成。作成された XML ファイルを保存して終了。- 新しい作業ディレクトリに切り替えてから作成したプロジェクトをチェックアウト:
osc co home:foo:bar/ham
。 - 次のディレクトリに cd:
cd home:foo:bar/ham
。
パッケージの管理
プロジェクトを管理する方法を決めて下さい。2つの方法が存在します:
- PKGBUILD とヘルパーファイル (*.install スクリプトなど) をバージョン管理システム (git や hg など) で管理して OBS にそれを追跡させる。
- OBS だけでパッケージを全て管理する。
前者の方法のほうが柔軟性があり動的です。設定するには:
- プロジェクトディレクトリから、以下の内容の
_service
ファイルを作成してください:
<services> <service name="tar_scm"> <param name="scm">git</param> <param name="url">git://<your_repo_here></param> <param name="versionformat">git%cd~%h</param> <param name="versionprefix"><your_version_here></param> <param name="filename"><name_of_your_package></param> </service> <service name="recompress"> <param name="file">*.tar</param> <param name="compression">xz</param> </service> <service name="set_version"/> </services>
gimp-gitAUR の例:
<services> <service name="tar_scm"> <param name="scm">git</param> <param name="url">git://git.gnome.org/gimp.git</param> <param name="versionformat">git%cd~%h</param> <param name="versionprefix">2.9.1</param> <param name="filename">gimp-git</param> </service> <service name="recompress"> <param name="file">*.tar</param> <param name="compression">xz</param> </service> <service name="set_version"/> </services>
- OBS に追跡させます:
osc add _service
- リポジトリに含めたい他のファイルが存在する場合、同じように追加してください: プロジェクトディレクトリにファイルを追加して、OBS にファイルを追跡させてください (OBS は基幹の SCM として subversion を使っているため、手順は簡単です)。
- ファイルをリポジトリにチェックイン (アップロード):
osc ci -m "commit message (e.g. bumped package xxx to version yyy"
。
しばらくすると、OBS はパッケージのビルドを開始します。
openSUSE に関するヒントとテクニック
- パッケージのビルドの進捗を確認するには、作業ディレクトリに cd してから次を実行:
osc results
。 - Arch:Core と Arch:Extra および Arch:Community リポジトリが存在します。[community] can be appended as a "repository path" after adding the main Arch repository to the project.
ca-certificates-utils パッケージの問題
OBS のビルドが ca-certificates-utils パッケージのせいで失敗する場合、プロジェクトの設定に以下の行を追加してください (プロジェクトのページから、Advanced -> Project Config を開く):
Prefer: ca-certificates-utils ca-certificates
openSUSE についての参照
マルチディストリビューション
Pacur
Pacur のようなツールは、一貫したパッケージ仕様形式で複数の Linux ディストリビューション用のパッケージをビルドすることができます。 パッケージ形式は PKGBUILD に非常に似ているので、既存の PKGBUILD を再利用し、debian や rpm パッケージを容易にビルドできるように、いくつかのディストリビューション固有の変数を追加するのが簡単です。 素早く PKGBUILD を適応することで、Amazon Linux、Centos、Debian、Oracle Linux、Fedora、およびUbuntu用のパッケージをビルドすることができます。