「DeveloperWiki:クリーンな chroot 内でビルドする」の版間の差分
Blackteahamburger (トーク | 投稿記録) (Fix category) |
|||
(他の1人の利用者による、間の11版が非表示) | |||
1行目: | 1行目: | ||
− | [[Category: |
+ | [[Category: パッケージ開発]] |
+ | [[en:DeveloperWiki:Building in a clean chroot]] |
||
− | [[Category: Package development]] |
||
− | == |
+ | == 導入 == |
− | + | このページは [[:en:DeveloperWiki]] の一部です。 |
|
− | == |
+ | == 理由 == |
+ | クリーンな chroot 内でビルドすることは、望んでいないリンクか PKGBUILD の depends 配列からパッケージが欠けているかに関わらず、パッケージの依存の不足を防ぎます。これを使うことで、[testing] からパッケージをインストールしているときに、安定したリポジトリ (core, extra, community) のパッケージをビルドすることができるようになります。 |
||
− | Building in a clean chroot prevents missing dependencies in packages, whether due to unwanted linking or packages missing in the depends array in the PKGBUILD. It also allows users to build a package for the stable repositories (core, extra, community) while having packages from [testing] installed. |
||
− | == |
+ | == 便利な方法 == |
+ | 余計な操作なしに簡単にクリーンな chroot 内でパッケージをビルドするには、{{Pkg|devtools}} パッケージのヘルパースクリプトを使うことができます。 |
||
− | To quickly build a package in a clean chroot without any further tinkering, one can use the helper scripts from the {{Pkg|devtools}} package. |
||
+ | ヘルパースクリプトは、makepkg と同じように PKGBUILD があるディレクトリで呼ばれる必要があります。具体的には、{{ic|extra-x86_64-build}} は自動的に chroot を {{ic|/var/lib/archbuild}} のクリーンな chroot マトリックスからセットアップし、それをアップデートして、extra リポジトリのパッケージをビルドします。multilib のビルドには、アーキテクチャなしの {{ic|multilib-build}} があります。特定のリポジトリとアーキテクチャにビルドするときにどのスクリプトを使うべきかの情報は下の表を参照してください。 |
||
− | These helper scripts should be called in the same directory where the PKGBUILD is, just like with makepkg. For instance, {{ic|extra-x86_64-build}} automatically sets up a chroot from a clean chroot matrix in {{ic|/var/lib/archbuild}}, updates it, and builds a package for the extra repository. For multilib builds there is just {{ic|multilib-build}} without an architecture. Consult the table below for information on which script to use when building for a specific repository and architecture. |
||
+ | {{ic|-c}} 引数は chroot マトリックスをリセットするため、破損したときに便利です。これはクリーンな chroot 内でビルドするときには必要ありません。 |
||
− | The {{ic|-c}} parameter resets the chroot matrix, which can be useful in case of breakage. It is not needed for building in a clean chroot. |
||
− | {{Note|[core] |
+ | {{Note|[core] にパッケージが入る前に [testing] を通る必要があるため、[core] は省かれています。}} |
+ | {{Note|目的が [core] パッケージをローカルで使うためにビルドすることであれば、testing の代わりに安定したリポジトリを使う方が好ましいかもしれません。この場合は単に extra のビルドスクリプトを使ってください。}} |
||
− | {{Note|If the objective is to build a [core] package for your own local usage, it may be desirable to use the stable repositories instead of the testing. In this case you may simply use the extra build scripts.}} |
||
{| class="wikitable" |
{| class="wikitable" |
||
+ | ! ターゲットのリポジトリ || アーキテクチャ || 使うビルドスクリプト || 使われる pacman 設定ファイル |
||
− | ! Target repository || Architecture || Build script to use || Pacman configuration file used |
||
|- |
|- |
||
| extra / community || x86_64 || extra-x86_64-build || /usr/share/devtools/pacman-extra.conf |
| extra / community || x86_64 || extra-x86_64-build || /usr/share/devtools/pacman-extra.conf |
||
36行目: | 36行目: | ||
|} |
|} |
||
− | == |
+ | == 従来の方法 == |
− | === |
+ | === chroot のセットアップ === |
+ | {{Pkg|devtools}} パッケージはクリーンな chroot 内で作成・ビルドするためのツールを提供します。インストールしていなければインストールしてください。 |
||
− | The {{Pkg|devtools}} package provides tools for creating and building within clean chroots. Install it if not done already. |
||
+ | クリーンな chroot を作るには、chroot が入るディレクトリを作成してください。例えば、{{ic|$HOME/chroot}} です。 |
||
− | To make a clean chroot, create a directory in which the chroot will reside. For example, {{ic|$HOME/chroot}}. |
||
$ mkdir ~/chroot |
$ mkdir ~/chroot |
||
− | + | {{ic|CHROOT}} 変数を定義してください。 |
|
$ CHROOT=$HOME/chroot |
$ CHROOT=$HOME/chroot |
||
+ | chroot を作成します ({{ic|$CHROOT}} ディレクトリにはクリーンなワーキングコピーが入る他のサブディレクトリが作成されるため、サブディレクトリ {{ic|root}} は必須です)。 |
||
− | Now create the chroot (the sub directory {{ic|root}} is required because the {{ic|$CHROOT}} directory will get other sub directories for clean working copies): |
||
$ mkarchroot $CHROOT/root base-devel |
$ mkarchroot $CHROOT/root base-devel |
||
− | {{Note| |
+ | {{Note|同じ場所を繰り返し使う場合は、{{ic|CHROOT}} 変数を export コマンドを使って {{ic|$HOME/.bashrc}} で定義することもできます。}} |
− | {{Note| |
+ | {{Note|[[btrfs]] ディスクでは、chroot はサブボリュームとして作成されるため、削除するには {{ic|# btrfs subvolume delete $CHROOT/root}} を使ってサブボリュームを削除する必要があります。}} |
− | + | {{ic|~/.makepkg.conf}} を編集して、パッケージャ名と makeflags をセットします。必要であれば、{{ic|$CHROOT/root/etc/pacman.d/mirrorlist}} の [[Pacman#リポジトリ|ミラーリスト]] を調整して、{{ic|$CHROOT/root/etc/pacman.conf}} で [[testing]] リポジトリを有効化してください。 |
|
− | {{Note| |
+ | {{Note|{{ic|~}} と {{ic|$HOME}} 変数は ''makechrootpkg'' スクリプトにより {{ic|/root/}} に解決されます (下で説明)。}} |
− | ==== |
+ | ==== pacman.conf のカスタマイズ ==== |
− | + | 代わりに、以下のコマンドでカスタマイズした {{ic|pacman.conf}} と {{ic|makepkg.conf}} を与えることができます。 |
|
$ mkarchroot -C <pacman.conf> -M <makepkg.conf> $CHROOT/root base-devel |
$ mkarchroot -C <pacman.conf> -M <makepkg.conf> $CHROOT/root base-devel |
||
{{Warning| |
{{Warning| |
||
− | + | カスタマイズした {{ic|pacman.conf}} や {{ic|makepkg.conf}} を、初めてクリーンな chroot を作成するときに使用すると、chroot 環境に意図しない調整をもたらす場合があります。''注意して使用してください。''}} |
|
− | === |
+ | === chroot の中でビルドする === |
− | + | 始めに、ベースとなる chroot ({{ic|$CHROOT/root}}) が最新の状態であることを確認してください。 |
|
$ arch-nspawn $CHROOT/root pacman -Syu |
$ arch-nspawn $CHROOT/root pacman -Syu |
||
+ | 次に、[[PKGBUILD]] があるディレクトリで {{ic|makechrootpkg}} を呼んでパッケージをビルドします。 |
||
− | Then, build a package by calling {{ic|makechrootpkg}} in the directory containing its [[PKGBUILD]]: |
||
$ makechrootpkg -c -r $CHROOT |
$ makechrootpkg -c -r $CHROOT |
||
− | {{Note| |
+ | {{Note|{{ic|makechrootpkg}} に {{ic|-c}} フラグを渡すことで、使用している chroot ({{ic|$CHROOT/$USER}}) がビルドの前に確実にクリーンアップされるようにできます。}} |
+ | ==== 必要なパッケージを事前にインストールする ==== |
||
− | ==== Pre-install required packages ==== |
||
+ | {{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#使用方法|makepkg]] に引数を渡すには、[http://wiki.bash-hackers.org/dict/terms/end_of_options オプションの終了マーカー] の後に並べます。例えば、check() を強制するには以下のようにします。 |
|
$ makechrootpkg -c -r $CHROOT -- --check |
$ makechrootpkg -c -r $CHROOT -- --check |
||
+ | == 一般的なリビルドを扱う == |
||
− | == Handling major rebuilds == |
||
+ | 一般的なリビルドを扱う一番クリーンな方法は、[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. |
||
+ | == ヒントとテクニック == |
||
− | == Tips and tricks == |
||
− | === |
+ | === 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 内でビルドするときには必要ありません。
ターゲットのリポジトリ | アーキテクチャ | 使うビルドスクリプト | 使われる 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
~/.makepkg.conf
を編集して、パッケージャ名と makeflags をセットします。必要であれば、$CHROOT/root/etc/pacman.d/mirrorlist
の ミラーリスト を調整して、$CHROOT/root/etc/pacman.conf
で testing リポジトリを有効化してください。
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] に 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