DeveloperWiki:クリーンな chroot 内でビルドする

提供: ArchWiki
2020年8月9日 (日) 10:38時点におけるBlackteahamburger (トーク | 投稿記録)による版 (Fix category)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

導入

このページは en:DeveloperWiki の一部です。

理由

クリーンな chroot 内でビルドすることは、望んでいないリンクか PKGBUILD の depends 配列からパッケージが欠けているかに関わらず、パッケージの依存の不足を防ぎます。これを使うことで、[testing] からパッケージをインストールしているときに、安定したリポジトリ (core, extra, community) のパッケージをビルドすることができるようになります。

便利な方法

余計な操作なしに簡単にクリーンな chroot 内でパッケージをビルドするには、devtools パッケージのヘルパースクリプトを使うことができます。

ヘルパースクリプトは、makepkg と同じように PKGBUILD があるディレクトリで呼ばれる必要があります。具体的には、extra-x86_64-build は自動的に chroot を /var/lib/archbuild のクリーンな chroot マトリックスからセットアップし、それをアップデートして、extra リポジトリのパッケージをビルドします。multilib のビルドには、アーキテクチャなしの multilib-build があります。特定のリポジトリとアーキテクチャにビルドするときにどのスクリプトを使うべきかの情報は下の表を参照してください。

-c 引数は chroot マトリックスをリセットするため、破損したときに便利です。これはクリーンな chroot 内でビルドするときには必要ありません。

ノート: [core] にパッケージが入る前に [testing] を通る必要があるため、[core] は省かれています。
ノート: 目的が [core] パッケージをローカルで使うためにビルドすることであれば、testing の代わりに安定したリポジトリを使う方が好ましいかもしれません。この場合は単に extra のビルドスクリプトを使ってください。
ターゲットのリポジトリ アーキテクチャ 使うビルドスクリプト 使われる pacman 設定ファイル
extra / community x86_64 extra-x86_64-build /usr/share/devtools/pacman-extra.conf
testing / community-testing x86_64 testing-x86_64-build /usr/share/devtools/pacman-testing.conf
staging / community-staging x86_64 staging-x86_64-build /usr/share/devtools/pacman-staging.conf
multilib x86_64 multilib-build /usr/share/devtools/pacman-multilib.conf
multilib-testing x86_64 multilib-testing-build /usr/share/devtools/pacman-multilib-testing.conf
multilib-staging x86_64 multilib-staging-build /usr/share/devtools/pacman-multilib-staging.conf

従来の方法

chroot のセットアップ

devtools パッケージはクリーンな chroot 内で作成・ビルドするためのツールを提供します。インストールしていなければインストールしてください。

クリーンな chroot を作るには、chroot が入るディレクトリを作成してください。例えば、$HOME/chroot です。

$ mkdir ~/chroot

CHROOT 変数を定義してください。

$ CHROOT=$HOME/chroot

chroot を作成します ($CHROOT ディレクトリにはクリーンなワーキングコピーが入る他のサブディレクトリが作成されるため、サブディレクトリ root は必須です)。

$ mkarchroot $CHROOT/root base-devel
ノート: 同じ場所を繰り返し使う場合は、CHROOT 変数を export コマンドを使って $HOME/.bashrc で定義することもできます。
ノート: btrfs ディスクでは、chroot はサブボリュームとして作成されるため、削除するには # btrfs subvolume delete $CHROOT/root を使ってサブボリュームを削除する必要があります。

~/.makepkg.conf を編集して、パッケージャ名と makeflags をセットします。必要であれば、$CHROOT/root/etc/pacman.d/mirrorlistミラーリスト を調整して、$CHROOT/root/etc/pacman.conftesting リポジトリを有効化してください。

ノート: ~$HOME 変数は makechrootpkg スクリプトにより /root/ に解決されます (下で説明)。

pacman.conf のカスタマイズ

代わりに、以下のコマンドでカスタマイズした pacman.confmakepkg.conf を与えることができます。

$ mkarchroot -C <pacman.conf> -M <makepkg.conf> $CHROOT/root base-devel
警告: カスタマイズした pacman.confmakepkg.conf を、初めてクリーンな chroot を作成するときに使用すると、chroot 環境に意図しない調整をもたらす場合があります。注意して使用してください。

chroot の中でビルドする

始めに、ベースとなる chroot ($CHROOT/root) が最新の状態であることを確認してください。

$ arch-nspawn $CHROOT/root pacman -Syu

次に、PKGBUILD があるディレクトリで makechrootpkg を呼んでパッケージをビルドします。

$ makechrootpkg -c -r $CHROOT
ノート: makechrootpkg-c フラグを渡すことで、使用している chroot ($CHROOT/$USER) がビルドの前に確実にクリーンアップされるようにできます。

必要なパッケージを事前にインストールする

$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] に push します。その後、続く全てのパッケージを [staging] に対してリビルドして push します。

[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 はデフォルトでこれを実行します。

ヒントとテクニック

tmpfs 内でビルドする

システムに十分な RAM がある場合、devtools ビルドスクリプトに tmpfs を指定することもできます。

# mkdir -p /mnt/chroots/arch
# mount -t tmpfs -o defaults,size=20G /mnt/chroots/arch
# extra-x86_64-build -c -r /mnt/chroots/arch