読者です 読者をやめる 読者になる 読者になる

Arch のパッケージのリポジトリを作る 発展編

基本編は http://eagletmt.hateblo.jp/entry/2012/12/21/214507 。 基本編で紹介した方法だけでもリポジトリとしての機能を果たせるディレクトリ構成を作れるが、 公式リポジトリと比較して足りないものが3つある。

  1. 署名
  2. pkgfile 用のデータベース
  3. abs 用の tarball

実際にこれらを追加したリポジトリhttp://arch.wanko.cc/vim-latest/ にある。

署名をつける

pacman 4 にメジャーバージョンアップしてから、パッケージとデータベースに署名をつけられるようになった。 2012-06-04 の時点ですべての公式リポジトリのパッケージに署名がつけられ、デフォルトで署名のチェックを強制するようになっている (Arch Linux - News: Having pacman verify packages)。 独自リポジトリでも署名のチェックを強制するには /etc/pacman.conf で SigLevel = Required に設定すればいい。

署名するにはもちろん GPG の鍵が必要なので、最初に用意しておく。自分は以下のサイトを参考にした。

以下の説明では、署名する鍵として実際の自分の鍵である C48DBD97 を用いる。

パッケージに署名をつける

単純に makepkg で作る場合は、/etc/makepkg.conf で GPGKEY を設定して BUILDENV!signsign に変更すればいい。

BUILDENV=(fakeroot !distcc color !ccache check sign)

GPGKEY="C48DBD97"

ただし、基本編に書いたようにきちんとパッケージを作るには makechrootpkg を利用して chroot 環境で作成したほうがいい。 chroot 環境から自分の GPG 鍵は見えないので、makechrootpkg でパッケージを作った後に gpg コマンドで普通に署名を追加するしかない (たぶん)。

例えば vim-latest というパッケージを作る場合、

sudo makechrootpkg -cur ~/chroot-x86_64
gpg --detach-sign -u C48DBD97 vim-latest-7.4.141-1-x86_64.pkg.tar.xz

とする。 あとはパッケージと同じディレクトリに .sig ファイルも置いて公開するだけでいい。

データベースに署名をつける

ついでにデータベースにも署名する。 これは --sign --key C48DBD97 というオプションをつけて repo-add すればいい。 さらに --verify というオプションをつけると、現在のデータベースの署名をチェックしてから新たな署名を生成する。 独自リポジトリを更新していくときは常に --verify をつけておいたほうがいいだろう。

例えば vim-latest というリポジトリの場合、

repo-add --sign --key C48DBD97 --verify vim-latest.db.tar.gz vim-latest-7.4.141-1-x86_64.pkg.tar.xz

とする。 すると vim-latest.db.tar.gz.sig も生成されるので、それぞれ vim-latest.db と vim-latest.db.sig という名前で公開する。

pkgfile 用のデータベースを作る

pkgfile を使うと、あるコマンドやファイルがどのパッケージについているか調べることができる。

% pkgfile -b vim
extra/gvim
extra/vim
vim-latest/vim-latest

この機能は pkgfile -u したときにリポジトリから "#{repo}.files" というデータベースをダウンロードしてくることで達成されている。 この .files というデータベースを作るには repo-add を使う。

repo-add --sign --key C48DBD97 --verify --files vim-latest.files.tar.gz vim-latest-7.4.141-1-x86_64.pkg.tar.xz

これによって生成された vim-latest.files.tar.gz を、 普通のデータベースと同様に vim-latest.files という名前で公開する。 .sig を一緒に公開してもいいけど、pkgfile は特に署名のチェックはしない。 結局、.files はリポジトリのデータベースにファイル一覧をつけただけのファイルなので、リポジトリのデータベースと同様に新たにパッケージを追加する度に repo-add --files して更新する。

abs 用の tarball を作る

これを作っておくと、abs コマンドでソースツリーを保ったり、yaourt -G でソースパッケージを展開したりすることができる。

ただし、これを作るための便利なコマンドというのは用意されていない様子。 なので適当に自分で tarball を作るしかない。

vim-latest/
vim-latest/vim-latest/
vim-latest/vim-latest/PKGBUILD
vim-latest/vim-latest/vim-7.4.035-breakindent.patch

というような構成の tarball を vim-latest.abs.tar.gz という名前でデータベースと同じディレクトリで公開すればいい。

まとめ

最終的に公開するディレクトリの構成はこのようになる。

i686/vim-latest-7.4.141-1-i686.pkg.tar.xz
i686/vim-latest-7.4.141-1-i686.pkg.tar.xz.sig
i686/vim-latest.abs.tar.gz
i686/vim-latest.db
i686/vim-latest.db.sig
i686/vim-latest.files
x86_64/vim-latest-7.4.141-1-x86_64.pkg.tar.xz
x86_64/vim-latest-7.4.141-1-x86_64.pkg.tar.xz.sig
x86_64/vim-latest.abs.tar.gz
x86_64/vim-latest.db
x86_64/vim-latest.db.sig
x86_64/vim-latest.files