基本編は http://eagletmt.hateblo.jp/entry/2012/12/21/214507 。 基本編で紹介した方法だけでもリポジトリとしての機能を果たせるディレクトリ構成を作れるが、 公式リポジトリと比較して足りないものが3つある。
実際にこれらを追加したリポジトリが 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
の !sign
を sign
に変更すればいい。
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
をつけておいたほうがいいだろう。
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