「DeveloperWiki:クリーンな chroot でビルドする」の版間の差分
(→Convenience way: 翻訳) |
(→Classic way: 翻訳) |
||
37行目: | 37行目: | ||
{{Tip|{{ic|pkgctl build}} は、クリーンな chroot でビルドするための適切なビルドスクリプトを自動的に選択します。}} |
{{Tip|{{ic|pkgctl build}} は、クリーンな chroot でビルドするための適切なビルドスクリプトを自動的に選択します。}} |
||
− | == |
+ | == 古典的な方法 == |
− | === |
+ | === 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|$HOME/.bashrc}} で {{ic|CHROOT}} 変数を定義することもできます。 |
||
− | * One can also define the {{ic|CHROOT}} variable in {{ic|$HOME/.bashrc}} using the export command if the location is to be repeatedly used. |
||
− | * |
+ | * [[btrfs]] では、chroot はサブボリュームとして作成されるので、root 権限で {{ic|btrfs subvolume delete $CHROOT/root}} を実行してサブボリュームを削除することで chroot を削除する必要があります。 |
}} |
}} |
||
− | + | {{ic|~/.makepkg.conf}} を編集して、パッケージャー名と make フラグを設定します。また、{{ic|$CHROOT/root/etc/pacman.d/mirrorlist}} の [[Pacman#Repositories and Mirrors|mirrorlist]] を調整し、{{ic|$CHROOT/ の [[testing]] リポジトリを有効にします必要に応じて、{{ic|root/etc/pacman.conf}} を選択します。 |
|
− | {{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|クリーンな chroot の最初の作成中にカスタムの {{ic|pacman.conf}} または {{ic|makepkg.conf}} を使用すると、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|-c}} フラグを {{ic|makechrootpkg}} に渡すと、作業中の 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]] に引数を渡すには、[https://wiki.bash-hackers.org/dict/terms/end_of_options オプションの終了マーカー] の後に引数をリストします。たとえば、{{ic|check()}} を強制するには: |
|
$ makechrootpkg -c -r $CHROOT -- --check |
$ makechrootpkg -c -r $CHROOT -- --check |
2023年12月23日 (土) 14:36時点における版
目次
なぜ?
クリーンな 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
Handling major rebuilds
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.
If you cannot 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
You can specify more than one package to be installed using multiple -I
arguments.
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
And build all following packages using:
# makechrootpkg -n -r /var/lib/archbuild/extra-x86_64
Running namcap (the -n
argument) implies installing the package in the chroot. *-build also does this by default.
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