「DeveloperWiki:クリーンな chroot でビルドする」の版間の差分
(英語版から転載) |
(→Why: 翻訳) |
||
2行目: | 2行目: | ||
[[Category:DeveloperWiki]] |
[[Category:DeveloperWiki]] |
||
[[en:DeveloperWiki:Building in a clean chroot]] |
[[en:DeveloperWiki:Building in a clean chroot]] |
||
− | == |
+ | == なぜ? == |
+ | クリーンな chroot でビルドすると、不要なリンクや PKGBUILD の depend 配列にパッケージが欠落していることが原因で、パッケージ内の依存関係が欠落することがなくなります。また、ユーザーは [[公式リポジトリ#core-testing|core-testing]] または [[公式リポジトリ#extra-testing|extra-testing]] のパッケージをインストールしたまま、安定したリポジトリ ([[core]]、[[extra]]) のパッケージをビルドすることもできます。 |
||
− | 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]]) while having packages from [[core-testing]] or [[extra-testing]] installed. |
||
== Convenience way == |
== Convenience way == |
2023年12月23日 (土) 14:17時点における版
目次
なぜ?
クリーンな chroot でビルドすると、不要なリンクや PKGBUILD の depend 配列にパッケージが欠落していることが原因で、パッケージ内の依存関係が欠落することがなくなります。また、ユーザーは core-testing または extra-testing のパッケージをインストールしたまま、安定したリポジトリ (core、extra) のパッケージをビルドすることもできます。
Convenience way
To quickly build a package in a clean chroot without any further tinkering, one can use the helper scripts from the devtools package.
These helper scripts should be called in the same directory where the PKGBUILD is, just like with makepkg. For instance, extra-x86_64-build
automatically sets up a chroot from a clean chroot matrix in /var/lib/archbuild
, updates it, and builds a package for the extra repository. For multilib builds there is just multilib-build
without an architecture. Consult the table below for information on which script to use when building for a specific repository and architecture.
The -c
parameter resets the chroot matrix, which can be useful in case of breakage. It is not needed for building in a clean chroot.
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 |
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