AUR リポジトリが提供するのは PKGBUILD、つまり実行可能なパッケージメタデータであり、バイナリパッケージや依存関係リゾルバーではありません。そのため、パッケージを安全にビルドするには、ビルドを可能にする依存関係と、生成されたシステムにインストールされる依存関係を区別する必要があります。
PKGBUILD における依存関係の分類
#
PKGBUILD(5) では、存続期間の異なる依存関係配列が定義されています。
dependsは、インストールされたパッケージの実行に必要なパッケージを宣言します。makedependsは、ビルド中にのみ必要なツールとライブラリを宣言します。checkdependsは、check()に必要なパッケージを宣言します。
バージョン制約には pacman の依存関係構文を使用します。たとえば、depends=('libfoo>=2') のように記述します。分割パッケージには、package_client() { depends=('libclient') } のような、パッケージ固有の依存関係配列を指定できます。
パッケージがそれなしでもビルドできるという理由だけで、ランタイムライブラリを makedepends に移してはいけません。逆に、インストールされたファイルが必要としない場合は、コンパイラーを depends に残してはいけません。正確な配列を指定することで、pacman はアップグレードと削除を正しく計画できます。
makepkg がビルドし、pacman がインストールする
#
makepkg は権限のないユーザーとして実行します。makepkg はソースをダウンロードして検証し、依存関係を確認し、prepare()、build()、check()、package() を実行して、pacman 用のアーカイブを作成します。makepkg -i はビルドが成功した後にのみ、そのアーカイブをインストールします。インストールを実行するのは pacman です。
git clone https://aur.archlinux.org/example.git
cd example
makepkg --cleanbuild --syncdeps
sudo pacman -U ./*.pkg.tar.zst--syncdeps は、不足している依存関係を pacman にインストールさせます。したがって、解決できるのは設定済みのバイナリリポジトリで利用可能なパッケージだけです。AUR はリポジトリパッケージではなくビルドレシピを配布しているため、AUR の依存関係を取得することはできません。
--nodeps は避け、makepkg を sudo で実行してはいけません。依存関係チェックを回避すると、正しくリンクされていないパッケージが生成される可能性があります。また、root としてレビューしていない PKGBUILD のシェルコードを、不要な権限で実行することになります。
AUR 依存関係チェーンをビルドする #
AUR の依存関係は、依存関係の順序に従って解決します。すべてのレシピを実行前に確認し、末端のパッケージから先にビルドして、生成されたアーカイブをインストールします。これにより、次のパッケージの依存関係テストが成功します。
# Build and install the AUR dependency first.
git clone https://aur.archlinux.org/example-library.git
cd example-library
makepkg --cleanbuild --syncdeps
sudo pacman -U ./*.pkg.tar.zst
# Then build the dependent package.
cd ../example
makepkg --cleanbuild --syncdepsAUR ヘルパーはグラフの走査を自動化できますが、レビューの代わりにはなりません。各 PKGBUILD、.SRCINFO、ソース URL、パッチ、インストールスクリプトは、信頼するビルド入力の一部です。ビルド前に、チェーン全体でバージョン制約を確認してください。
再現性のためにクリーンな chroot を使用する #
ホストにインストールされたパッケージによって、宣言されていない依存関係が隠れることがあります。クリーンな chroot は、定義済みの Arch ベースから開始するため、不足している makedepends と checkdepends が明らかになります。devtools を設定した状態で、パッケージディレクトリから次を実行します。
extra-x86_64-build前提となる AUR パッケージはローカルリポジトリにビルドするか、検証済みのアーカイブを依存パッケージのビルド前に chroot へインストールします。依存関係チェーンをテストするときは、chroot を意図的に再作成または更新し、調査用にビルドログとパッケージアーカイブを保持します。クリーンな chroot でのビルド成功は、宣言されたビルド入力を実証しますが、レシピやアップストリームのソースが安全であることを証明するものではありません。
コメント
GitHub で閲覧・コメントする(投稿にはログインが必要です)