「DeveloperWiki:クリーンな chroot でビルドする」の版間の差分
(→Why: 翻訳) |
(→Convenience way: 翻訳) |
||
6行目: | 6行目: | ||
クリーンな chroot でビルドすると、不要なリンクや PKGBUILD の depend 配列にパッケージが欠落していることが原因で、パッケージ内の依存関係が欠落することがなくなります。また、ユーザーは [[公式リポジトリ#core-testing|core-testing]] または [[公式リポジトリ#extra-testing|extra-testing]] のパッケージをインストールしたまま、安定したリポジトリ ([[core]]、[[extra]]) のパッケージをビルドすることもできます。 |
クリーンな chroot でビルドすると、不要なリンクや PKGBUILD の depend 配列にパッケージが欠落していることが原因で、パッケージ内の依存関係が欠落することがなくなります。また、ユーザーは [[公式リポジトリ#core-testing|core-testing]] または [[公式リポジトリ#extra-testing|extra-testing]] のパッケージをインストールしたまま、安定したリポジトリ ([[core]]、[[extra]]) のパッケージをビルドすることもできます。 |
||
− | == |
+ | == 便利な方法 == |
+ | それ以上いじることなく、クリーンな 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}} は、{{ic|/var/lib/archbuild}} 内のクリーンな chroot マトリックスから chroot を自動的にセットアップして、更新し、追加のリポジトリ用のパッケージをビルドします。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| |
{{Note| |
||
+ | * これらのパッケージは ''core'' に入る前にまず ''core-testing'' を通過する必要があるため、''core'' は省略されています。 |
||
− | * ''core'' is omitted because those packages are required to go through ''core-testing'' first before landing in ''core''. |
||
+ | * ''core'' パッケージをビルドしてローカルで使用するのが目的であれば、テスト用リポジトリではなく安定版リポジトリを使用するのが望ましいでしょう。この場合、追加のビルドスクリプトを使うだけです。 |
||
− | * 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 ones. 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 || x86_64 || extra-x86_64-build || /usr/share/devtools/pacman.conf.d/extra.conf |
| extra || x86_64 || extra-x86_64-build || /usr/share/devtools/pacman.conf.d/extra.conf |
||
35行目: | 35行目: | ||
|} |
|} |
||
+ | {{Tip|{{ic|pkgctl build}} は、クリーンな chroot でビルドするための適切なビルドスクリプトを自動的に選択します。}} |
||
− | {{Tip|{{ic|pkgctl build}} automatically chooses the right build script to build in a clean chroot.}} |
||
== Classic way == |
== Classic way == |
2023年12月23日 (土) 14:22時点における版
目次
なぜ?
クリーンな 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 |
Classic way
Setting up a chroot
The devtools package provides tools for creating and building within clean chroots. Install it if not done already.
To make a clean chroot, create a directory in which the chroot will reside. For example, $HOME/chroot
.
$ mkdir ~/chroot
Define the CHROOT
variable:
$ CHROOT=$HOME/chroot
Now create the chroot (the sub directory root
is required because the $CHROOT
directory will get other sub directories for clean working copies):
$ mkarchroot $CHROOT/root base-devel
Edit ~/.makepkg.conf
to set the packager name and any makeflags. Also adjust the mirrorlist in $CHROOT/root/etc/pacman.d/mirrorlist
and enable the testing repositories in $CHROOT/root/etc/pacman.conf
, if desired.
Custom pacman.conf
Alternatively, provide a custom pacman.conf
and makepkg.conf
with the following:
$ mkarchroot -C <pacman.conf> -M <makepkg.conf> $CHROOT/root base-devel
Building in the chroot
Firstly, make sure the base chroot ($CHROOT/root
) is up to date:
$ arch-nspawn $CHROOT/root pacman -Syu
Then, build a package by calling makechrootpkg
in the directory containing its PKGBUILD:
$ makechrootpkg -c -r $CHROOT
Pre-install required packages
To build a package with dependencies unavailable from the repositories enabled in $CHROOT/root/pacman.conf
, pre-install them to the working chroot with -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
Passing arguments to makepkg
To pass arguments to makepkg, list them after an end-of-options marker; e.g., to force a 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