Creating packages for other distributions (日本語) - ArchWiki

# Creating packages for other distributions (日本語)

関連記事

- パッケージの作成

Arch は最高です。しかしながら、時には他のディストリビューションのパッケージを作成したいと思うときもあるでしょう。

## 一般

- 仮想化はわかりやすい方法ですが、追加したシステムの管理が必要になります。
- ディストリビューションごとのパッケージングツールを使う。例: dh_make[broken link: package not found], dpkg (Debian), rpm-org (Fedora)。あまり複雑ではない作業には dpkg-deb や checkinstall などのショートカットが適しているかもしれません。
- Chroot して Arch の中に (別に) ベースシステムを作成する。例: debootstrap (Debian), febootstrap (Fedora)。最小限の、クリーンな環境を作れるという利点があります。
- パッケージングツールによる自動的な方法で chroot を使う。例: pbuilder-ubuntu (Debian), mock-git (Fedora)。
- (互換性を失う可能性がある) 依存関係を処理する別の方法として 静的リンク。ほとんどのディストリビューションはこの方法を認めてないので注意してください。
- 使用するディストリビューションに関係なく一般的な原則は適用されます。例えば、パッケージを root でビルドしてはいけません。

## Debian

Debian パッケージングチュートリアルに基本的なことが説明されています。チュートリアルでは以下のツールの利用について記述しています (ほとんどが AUR から利用可能です):

cowdancer — pbuilder の copy-on-write ラッパー

  https://packages.debian.org/sid/cowdancer || cowdancer

debootstrap — dpkg や apt が利用できない環境でも、スクラッチから Debian ベースシステムを作成するためのツール。

  https://packages.debian.org/sid/debootstrap || debootstrap

devscripts — Debian パッケージメンテナの生活を楽にするスクリプト

  https://packages.debian.org/sid/devscripts || devscripts

dh-autoreconf — autoreconf を実行してビルド後に片付けを行う Debhelper アドオン

  https://packages.debian.org/sid/dh-autoreconf || dh-autoreconf

dh-make — ソースアーカイブを Debian パッケージソースに変換するツール

  https://packages.debian.org/sid/dh-make || dh-make

dpkg — Debian パッケージマネージャ

  https://packages.debian.org/sid/dpkg || dpkg

dput — Debian パッケージのアップロードツール

  https://packages.debian.org/sid/dput || dput

git-buildpackage — Git によるパッケージビルドシステムを統合する Debian のツール

  https://honk.sigxcpu.org/piki/projects/git-buildpackage/ || git-buildpackage

pbuilder-ubuntu — Debian パッケージを作成するための Chroot 環境

  https://launchpad.net/ubuntu/+source/pbuilder || pbuilder-ubuntu

quilt — パッチによる変更を記録して一連のパッチを管理する

  http://savannah.nongnu.org/projects/quilt || quilt

Note: 存在しないツール: lintian, reprepo, equivs, cdbs, svn-buildpackage, javahelper

### Tips and Tricks

#### 依存関係の処理を無視する

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

Note: Any run-time dependencies (and matching version numbers) should be added manually to `debian/control`, where `${shlibs:Depends}` now has no meaning.
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 をセットアップ

pbuilder-ubuntu のイントロダクションとして Pbuilder How-To を見て下さい。copy-on-write による著しいパフォーマンスの向上がある cowdancer を合わせて使うことが推奨されています。

- AUR の debian-archive-keyring, ubuntu-keyring, gnupg1 が必要です。
- eatmydata は AUR の libeatmydata や lib32-libeatmydata で入手できます。`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

### 参照

- Debian ポリシー
- 新メンテナーガイド
- Quilt in Debian packaging

## Fedora

How to create an RPM package

rpm-org — RPM.org のフォーク、主要な RPM ディストロで使用されています

  http://www.rpm.org/ || rpm-org

mock — ソース RPM を取得して chroot で RPM をビルド

  http://fedoraproject.org/wiki/Projects/Mock || mock-git

### 参照

- Projects/Mock

## openSUSE

- openSUSE Portal:Packaging
- Open Build Service - 自動的な、一貫した、再現性のある方法でソースからパッケージを作成・配布するための総合システム。
- openSUSE packaging guidelines

## 参照

- BBS - PKGBUILD equivalents for other distros
- BBS - Original discussion

Category:

- Package development (日本語)