「DeveloperWiki:クリーンな chroot 内でビルドする」の版間の差分
(→理由: 訳出) |
(→便利な方法: 訳出) |
||
11行目: | 11行目: | ||
== 便利な方法 == |
== 便利な方法 == |
||
+ | 余計な操作なしに簡単にクリーンな 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 |
2020年5月26日 (火) 13:55時点における版
目次
導入
このページは 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 のセットアップ
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 repository in $CHROOT/root/etc/pacman.conf
, if desired.
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
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
必要なパッケージを事前にインストールする
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
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
一般的なリビルドを扱う
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 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
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.
ヒントとテクニック
tmpfs 内でビルドする
If the system has enough RAM, it is possible to specify a tmpfs for the devtools build scripts.
# mkdir -p /mnt/chroots/arch # mount -t tmpfs -o defaults,size=20G /mnt/chroots/arch # extra-x86_64-build -c -r /mnt/chroots/arch