「DeveloperWiki:クリーンな chroot 内でビルドする」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(Fix category)
 
(他の1人の利用者による、間の4版が非表示)
1行目: 1行目:
[[Category: DeveloperWiki]]
 
 
[[Category: パッケージ開発]]
 
[[Category: パッケージ開発]]
 
[[en:DeveloperWiki:Building in a clean chroot]]
 
[[en:DeveloperWiki:Building in a clean chroot]]
84行目: 83行目:
 
==== 必要なパッケージを事前にインストールする ====
 
==== 必要なパッケージを事前にインストールする ====
   
  +
{{ic|$CHROOT/root/pacman.conf}} で有効化しているリポジトリから利用できない依存のあるパッケージをビルドするには、{{ic|-I <package>}} を使って作業中の chroot に事前にインストールしておきます。
To build a package with dependencies unavailable from the repositories enabled in {{ic|$CHROOT/root/pacman.conf}}, pre-install them to the working chroot with {{ic|-I <package>}}:
 
   
 
$ 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
 
$ 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 に引数を渡す ====
To pass arguments to [[Makepkg#Usage|makepkg]], list them after an [http://wiki.bash-hackers.org/dict/terms/end_of_options end-of-options marker]; e.g., to force a check():
+
[[Makepkg#使用方法|makepkg]] に引数を渡すには、[http://wiki.bash-hackers.org/dict/terms/end_of_options オプションの終了マーカー] の後に並べます。例えば、check() を強制するには以下のようにします。
   
 
$ makechrootpkg -c -r $CHROOT -- --check
 
$ makechrootpkg -c -r $CHROOT -- --check
95行目: 94行目:
 
== 一般的なリビルドを扱う ==
 
== 一般的なリビルドを扱う ==
   
  +
一般的なリビルドを扱う一番クリーンな方法は、[staging] リポジトリを使うことです。始めのパッケージを [extra] に対してビルドして、[staging] に push します。その後、続く全てのパッケージを [staging] に対してリビルドして push します。
The cleanest way to handle a major rebuild is to use the [staging] repositories. Build the first package against [extra] and push it to [staging]. Then rebuild all following packages against [staging] and push them there.
 
   
  +
[staging] を使うことができない場合、以下のようなコマンドを使用してカスタマイズしたパッケージに対してビルドすることができます。
If you can't use [staging], you can build against custom packages using a command like this:
 
   
 
# extra-x86_64-build -- -I ~/packages/foobar/foobar-2-1-any.pkg.tar.xz
 
# extra-x86_64-build -- -I ~/packages/foobar/foobar-2-1-any.pkg.tar.xz
   
  +
複数の -I 引数を使うことで、インストールしておくパッケージを複数指定することもできます。
You can specify more than one package to be installed using multiple -I arguments.
 
   
  +
よりシンプルできれいではない方法として、全てのビルドしたパッケージを chroot にインストールして、クリーンアップしないこともできます。始めのパッケージを以下のコマンドを使ってビルドします。
A simpler, but dirtier way to handle a major rebuild is to install all built packages in the chroot, never cleaning it. Build the first package using:
 
   
 
# extra-x86_64-build
 
# extra-x86_64-build
   
  +
そして続く全てのパッケージを以下のコマンドを使ってビルドします。
And build all following packages using:
 
   
 
# makechrootpkg -n -r /var/lib/archbuild/extra-x86_64
 
# makechrootpkg -n -r /var/lib/archbuild/extra-x86_64
   
  +
namcap の実行 (-n 引数) は chroot へのパッケージのインストールを暗示します。*-build はデフォルトでこれを実行します。
Running namcap (the -n argument) implies installing the package in the chroot. *-build also does this by default.
 
   
 
== ヒントとテクニック ==
 
== ヒントとテクニック ==
117行目: 116行目:
 
=== tmpfs 内でビルドする ===
 
=== tmpfs 内でビルドする ===
   
  +
システムに十分な RAM がある場合、{{Pkg|devtools}} ビルドスクリプトに [[tmpfs]] を指定することもできます。
If the system has enough RAM, it is possible to specify a [[tmpfs]] for the {{Pkg|devtools}} build scripts.
 
   
 
# mkdir -p /mnt/chroots/arch
 
# mkdir -p /mnt/chroots/arch

2020年8月9日 (日) 10:38時点における最新版

導入

このページは 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