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

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎Why: 翻訳)
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]]) のパッケージをビルドすることもできます。
   
== Convenience way ==
+
== 便利な方法 ==
   
  +
それ以上いじることなく、クリーンな 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 のパッケージをインストールしたまま、安定したリポジトリ (coreextra) のパッケージをビルドすることもできます。

便利な方法

それ以上いじることなく、クリーンな chroot でパッケージをすばやくビルドするには、devtools パッケージのヘルパースクリプトを使用できます。

これらのヘルパースクリプトは、makepkg と同様に、PKGBUILD と同じディレクトリで呼び出す必要があります。たとえば、extra-x86_64-build は、/var/lib/archbuild 内のクリーンな chroot マトリックスから chroot を自動的にセットアップして、更新し、追加のリポジトリ用のパッケージをビルドします。multilib ビルドの場合は、アーキテクチャのない multilib-build だけが存在します。特定のリポジトリおよびアーキテクチャ向けに構築するときにどのスクリプトを使用するかについては、以下の表を参照してください。

-c パラメータは chroot マトリックスをリセットします。これは破損した場合に役立ちます。クリーンな chroot でのビルドには必要ありません。

ノート:
  • これらのパッケージは core に入る前にまず core-testing を通過する必要があるため、core は省略されています。
  • core パッケージをビルドしてローカルで使用するのが目的であれば、テスト用リポジトリではなく安定版リポジトリを使用するのが望ましいでしょう。この場合、追加のビルドスクリプトを使うだけです。
ターゲットリポジトリ アーキテクチャ 使用するビルドスクリプト 使用される 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
ヒント: pkgctl build は、クリーンな chroot でビルドするための適切なビルドスクリプトを自動的に選択します。

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
ノート:
  • One can also define the CHROOT variable in $HOME/.bashrc using the export command if the location is to be repeatedly used.
  • On btrfs, the chroot is created as a subvolume, so you have to remove it by removing the subvolume by running btrfs subvolume delete $CHROOT/root as root.

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.

ノート: The ~ and $HOME variable are resolved to /root/ by the makechrootpkg script (described below).

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
警告: Using a custom pacman.conf or makepkg.conf during the initial creation of clean chroot can result in unintended custom adjustments to the chroot environment. Use with caution.

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
ノート: Passing the -c flag to makechrootpkg ensures that the working chroot ($CHROOT/$USER) is cleaned before building.

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