Arch Build System(ABS)はArchLinuxのためのビルドシステムである.
Arch LinuxでArchBulidSystem(ABS)を使う方法。
リポジトリから PKGBUILD ファイルを取得する
今回はNeovimをビルドする。AspはABSのためのツールでリポジトリへの操作をする。1asp export
でgitリポジトリから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
変数をエクスポートしmkarchroot
でbase-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}>
-
asp は 以前の管理ツール abs の後継。 ↩︎
-
Portsはソースコードからソフトウェアのビルドを自動化するのに BSD (Berkley Software Disribution) による仕組み。ソフトウェアをダウンロード・解凍・パッチ適用・コンパイル・インストールしてくれる。ソフトウェアと同名のディレクトリにビルドからインストールまでの手順のファイルが含まれているのでディレクトリ内で make または make install と入力するだけでソフトウェアをインストールできる。 ↩︎
-
(ArchWiki DeveloperWiki:Building in a clean chrootより)作りたての chroot 環境は 意図せぬリンクファイル・見つからない依存パッケージが原因でとなるビルド失敗を防いでくれる。また[testing]リポジトリのパッケージをインストールしてからstableなリポジトリ(core, extra, community)でのビルドをすることができる。 ↩︎
-
用意されたスクリプトと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