MSYS2のpacman経由で取得したパッケージをデバッグするまで

昨日, MSYS2環境下で自分のプロジェクトをビルドするため, pacman経由で取得した mingw-w64-x86_64-angleproject-git を利用している途中 原因の掴めないライブラリエラーが発生して, 調査をしていました.

調査のためにまずpacman経由で取得したパッケージのビルド環境を再現しようと思い どういった手順を取れば良いのか試行錯誤していたので, 今回はその時行った手順をまとめました.

1. インストールしたパッケージのソースを探してくる

MSYS2のリポジトリ から ビルド環境を再現したいパッケージのソースを探してきます.

例えば, 今回調査したかったangpleproject-gitのソースは, http://repo.msys2.org/mingw/sources/ 以下にありました.

検証作業はソース内で行うため, ソースをローカルにダウンロードした後, 解凍してカレントディレクトリに設定しておきます.

2. gitのrefを固定

ソースを解凍してそのまま使おうとすると, PKGBUILDの書き方次第では, 実際にビルドされた当時のリビジョン以外を チェックアウトしてくることがあります.

そこで解凍したソース内を検索して, ビルド当時のコミットが判明したらPKGBUILDを編集して チェックアウトするリビジョンを固定しておきます.

vim PKGBUILD

gitの場合は source にあるリポジトリURLの末尾に #commit=コミットのリビジョン番号 を追加すればOKでした.

3. パッケージをビルドテスト, 出来上がったらローカルインストール

ArchWikiのパッケージテストにあるようにパッケージのビルドと テストのためのインストールを行います.

makepkg
pacman -U pkgname-pkgver.pkg.tar.xz

makepkg時に依存しているパッケージが不足している場合はエラーで停止してくれるため, 不足しているパッケージは都度 pacman -S で環境にインストールしていきます.

あとは, ローカルでPKGBUILDやビルドに使用する各ファイルを調査/修正を行い 再度 makepkg を行えば, 何回でもビルドを検証することができます.

これで, 原因を特定する足がかりにできそうです.

4. 最後の後始末

検証用でビルドしたパッケージをインストールしたままだと 後々面倒になるので, 作業が完了したらpacman経由で再インストールしておきましょう.

Written on August 24, 2017