Arch Build System(ABS)はArchLinuxのためのビルドシステムである.

Arch LinuxでArchBulidSystem(ABS)を使う方法。

リポジトリから PKGBUILD ファイルを取得する

今回はNeovimをビルドする。AspはABSのためのツールでリポジトリへの操作をする。1asp exportgitリポジトリからPKGBUILDいりのディレクトリを取得してくれる。

asp export neovim
cd neovim

設定の変更

ビルドするパッケージにグループ名"modified"を指定する。pacmanの設定で更新対象からこのグループを無視(ignore)する。

  • PKGBUILD
groups=('modified')
  • /etc/pacman.conf
IgnoreGroup = modified

パッケージャに自ユーザ名を指定。

  • /etc/makepkg.conf
PACKAGER="`${USER}` <{MAIL_ADDRESS}>`

ビルド

makepkgを利用

依存するソフトウェアのインストール(-S)とビルド後の依存ソフトウェアの削除(-r)を指定してパッケージを作成する。

makepkg -Sr

chroot 環境

公式のPKGBUILDはクリーンなchroot環境でビルトする想定している4。chroot環境でビルドを行うには旧来の方法とヘルプスクリプトを使う方法の2種類がある。

従来の方法

devtoolsパッケージのmkarchrootでchroot環境を作成する。CHROOT変数をエクスポートしmkarchrootbase-develパッケージグループをインストールする。

mkdir ~/chroot
export CHROOT=${HOME}/chroot
mkarchroot -C <pacman.conf> -M <makepkg.conf> $CHROOT/root base-devel

環境のパッケージを最新にしmakechrootpkgでビルドを実行。完了するとカレントデイレクトリに neovim-x.x.x-x-x86_64.pkg.tar.zst が作成される。

arch-nspawn $CHROOT/root pacman -Syu
makechrootpkg -c -r  $CHROOT

ヘルパースクリプトを使う

devtoolsのヘルパースクリプトを使ってビルドする。パッケージがArch Linuxの公式のどのリポジポジトリに属しているかによって実行するスクリプトが決まる。5

extra-x86_64-build -c 

インストール

作成したパッケージをPacmanでインストールする。

pacman -U neovim-x.x.x.x86_64.pkg.taar.zst

インストールしたパッケージの詳細を確認する

pacman -Qi neovim
Name            : neovim
Version         : x.x.x-x
<...snip...>
Groups          : modified
<...snip...>

expacでパケージャを確認する。

expac "%n %p" | grep neovim
neovim gnit <{MAIL_ADDRESS}>


  1. asp は 以前の管理ツール abs の後継。 ↩︎

  2. Portsはソースコードからソフトウェアのビルドを自動化するのに BSD (Berkley Software Disribution) による仕組み。ソフトウェアをダウンロード・解凍・パッチ適用・コンパイル・インストールしてくれる。ソフトウェアと同名のディレクトリにビルドからインストールまでの手順のファイルが含まれているのでディレクトリ内で make または make install と入力するだけでソフトウェアをインストールできる。 ↩︎

  3. svngit のリポジトリーが用意されています。 ↩︎

  4. (ArchWiki DeveloperWiki:Building in a clean chrootより)作りたての chroot 環境は 意図せぬリンクファイル・見つからない依存パッケージが原因でとなるビルド失敗を防いでくれる。また[testing]リポジトリのパッケージをインストールしてからstableなリポジトリ(core, extra, community)でのビルドをすることができる。 ↩︎

  5. 用意されたスクリプトとpacman.conf (スクリプトによって使われうpacman.confが決まる)

    リポジトリ スクリプト pacman.conf
    extra/community extra-x86_64-build /usr/share/devtools/pacman-extra.conf
    testing/community-testing testing-x86_64-build /usr/share/devtools/pacman-testing.conf
    staging/community-staging staging-x86_64-build /usr/share/devtools/pacman-staging.conf
    multilib multilib-x86_64-build /usr/share/devtools/pacman-multilib.conf
    multilib-testing multilib-testing-build /usr/share/devtools/pacman-multilib-testing.conf
    multilib-staging multilib-staging-build /usr/share/devtools/pacman-multilib-staging.conf
     ↩︎