DeveloperWiki:クリーンな chroot でビルドする
目次
なぜ?
クリーンな chroot でビルドすると、不要なリンクや PKGBUILD の depend 配列にパッケージが欠落していることが原因で、パッケージ内の依存関係が欠落することがなくなります。また、ユーザーは core-testing または extra-testing のパッケージをインストールしたまま、安定したリポジトリ (core、extra) のパッケージをビルドすることもできます。
便利な方法
それ以上いじることなく、クリーンな chroot でパッケージをすばやくビルドするには、devtools パッケージのヘルパースクリプトを使用できます。
これらのヘルパースクリプトは、makepkg と同様に、PKGBUILD と同じディレクトリで呼び出す必要があります。たとえば、extra-x86_64-build
は、/var/lib/archbuild
内のクリーンな chroot マトリックスから chroot を自動的にセットアップして、更新し、追加のリポジトリ用のパッケージをビルドします。multilib ビルドの場合は、アーキテクチャのない multilib-build
だけが存在します。特定のリポジトリおよびアーキテクチャ向けに構築するときにどのスクリプトを使用するかについては、以下の表を参照してください。
-c
パラメータは chroot マトリックスをリセットします。これは破損した場合に役立ちます。クリーンな chroot でのビルドには必要ありません。
ターゲットリポジトリ | アーキテクチャ | 使用するビルドスクリプト | 使用される Pacman 設定ファイル |
---|---|---|---|
extra | x86_64 | extra-x86_64-build | /usr/share/devtools/pacman.conf.d/extra.conf |
core-testing / extra-testing | x86_64 | extra-testing-x86_64-build | /usr/share/devtools/pacman.conf.d/extra-testing.conf |
core-staging / extra-staging | x86_64 | extra-staging-x86_64-build | /usr/share/devtools/pacman.conf.d/extra-staging.conf |
multilib | x86_64 | multilib-build | /usr/share/devtools/pacman.conf.d/multilib.conf |
multilib-testing | x86_64 | multilib-testing-build | /usr/share/devtools/pacman.conf.d/multilib-testing.conf |
multilib-staging | x86_64 | multilib-staging-build | /usr/share/devtools/pacman.conf.d/multilib-staging.conf |
古典的な方法
chroot のセットアップ
devtools パッケージは、クリーンな chroot 内で作成および設定するためのツールを提供します。まだインストールしていない場合はインストールしてください。
クリーンな chroot を作成するには、chroot が存在するディレクトリを作成します。たとえば、$HOME/chroot
などです。
$ mkdir ~/chroot
CHROOT
変数を定義します:
$ CHROOT=$HOME/chroot
次に、chroot を作成します ($CHROOT
ディレクトリはクリーンな作業コピー用に他のサブディレクトリを取得するため、サブディレクトリ root
が必要です):
$ mkarchroot $CHROOT/root base-devel
~/.makepkg.conf
を編集して、パッケージャー名と make フラグを設定します。また、$CHROOT/root/etc/pacman.d/mirrorlist
の mirrorlist を調整し、{{ic|$CHROOT/ の testing リポジトリを有効にします必要に応じて、root/etc/pacman.conf
を選択します。
pacman.conf をカスタム
あるいは、次のようにカスタムの pacman.conf
と makepkg.conf
を指定します。
$ mkarchroot -C <pacman.conf> -M <makepkg.conf> $CHROOT/root base-devel
chroot でのビルド
まず、ベースの chroot ($CHROOT/root
) が最新であることを確認します:
$ arch-nspawn $CHROOT/root pacman -Syu
次に、PKGBUILD を含むディレクトリで makechrootpkg
を呼び出してパッケージをビルドします:
$ makechrootpkg -c -r $CHROOT
必要なパッケージを事前にインストールする
$CHROOT/root/pacman.conf
で有効になっているリポジトリから利用できない依存関係を含むパッケージをビルドするには、-I package
を使用してそれらを作業中の chroot にプレインストールします。:
$ makechrootpkg -c -r $CHROOT -I build-dependency-1.0-1-x86_64.pkg.tar.xz -I required-package-2.0-2-x86_64.pkg.tar.xz
makepkg に引数を渡す
makepkg に引数を渡すには、オプションの終了マーカー の後に引数をリストします。たとえば、check()
を強制するには:
$ makechrootpkg -c -r $CHROOT -- --check
大規模なリビルドの処理
大規模なリビルドを処理する最もクリーンな方法は、staging リポジトリを使用することです。最初のパッケージを extra に対してビルドし、それを staging にプッシュします。次に、後続のすべてのパッケージを staging に対してリビルドし、そこにプッシュします。
staging を使用できない場合は、次のようなコマンドを使用してカスタムパッケージに対してビルドできます。
# extra-x86_64-build -- -I ~/packages/foobar/foobar-2-1-any.pkg.tar.xz
-I
引数を使用して、インストールする複数のパッケージを指定できます。
大規模なリビルドを処理するより簡単な方法として、ビルドされたすべてのパッケージを chroot にインストールし、決してクリーンアップしない雑な方法もあります。以下を使用して最初のパッケージをビルドします:
# extra-x86_64-build
そして、以下を使用して以下のパッケージをすべてビルドします:
# makechrootpkg -n -r /var/lib/archbuild/extra-x86_64
namcap (-n
引数) を実行すると、chroot にパッケージがインストールされることになります。*-build もデフォルトでこれを行います。
Tips and tricks
Build in tmpfs
If the system has enough RAM, it is possible to specify a tmpfs for the devtools build scripts.
# mount --mkdir -t tmpfs -o defaults,size=20G tmpfs /mnt/chroots/arch # extra-x86_64-build -c -r /mnt/chroots/arch