ArchLinux のリポジトリを akabei で楽に管理する
Arch のパッケージのリポジトリを作る 発展編 - eagletmt's blog で書いた内容を自動化するために akabei を作った。 さらに S3 の Static Website Hosting を利用する機能も実装して、実際に http://arch.wanko.cc/ を運用してみている。
基本機能
build サブコマンド
akabei build foo --repo-dir repo/x86_64 --repo-name bar --arch x86_64
で、foo/PKGBUILD をもとに repo/x86_64 以下に x86_64 向けのパッケージと、bar リポジトリの ABS tarball とデータベースとファイルリストが生成される。
% akabei build foo --repo-dir repo/x86_64 --repo-name bar --arch x86_64 (snip) % ls repo/x86_64 bar.abs.tar.gz bar.db bar.files foo-1.0.0-1-x86_64.pkg.tar.xz
さらに --repo-key
や --package-key
を指定すると、指定した鍵で署名を行う。署名を行うときは gpg-agent を立ち上げておくと楽。
ビルド時の chroot はデフォルトで毎回最初から作り直す。Arch で破壊的変更があったりすると chroot 環境をメンテするのがめんどくさいので、毎回作り直してもいいと思った。--chroot-dir
オプションで既にある chroot を指定して使わせることもできる。
他にも --pacman-config
、--makepkg-config
、--logdest
、--srcdest
等のオプションを指定できて、詳しくは akabei help build
を参照。
その他のサブコマンド
また、ABS tarball やデータベースやファイルリストを扱うための abs-add
、abs-remove
、repo-add
、repo-remove
、files-add
、files-remove
といったサブコマンドがある。
{repo,files}-{add,remove} は既存の repo-add(8) と同じ機能だけど、余計なファイル出力や symlink が無いのが特徴。
Omakase mode
普通にリポジトリを運用するときに行う操作を自動化した Omakase mode がある。
最初に、akabei omakase init
で設定ファイルを生成する。
% akabei omakase init foo --repo-key $GPGKEY --package-key $GPGKEY create .akabei.yml create foo create sources create logs create PKGBUILDs create etc create etc/makepkg.i686.conf create etc/pacman.i686.conf create etc/makepkg.x86_64.conf create etc/pacman.x86_64.conf Edit etc/makepkg.*.conf and set PACKAGER first! % echo 'PACKAGER="John Doe <john@doe.com>"' >> etc/makepkg.i686.conf % echo 'PACKAGER="John Doe <john@doe.com>"' >> etc/makepkg.x86_64.conf
パッケージを追加するときは、PKGBUILDs/$pkgname
というディレクトリを作ってその中に PKGBUILD を置き、akabei omakase build $pkgname
とする。
するといいかんじに i686/x86_64 用のパッケージが作られ、ABS tarball、データベース、ファイルリストが更新される。
ビルド時にダウンロードしたソースやビルドのログも、それぞれ source ディレクトリと logs ディレクトリに作られる。
% akabei omakase build bar (snip) % tree foo foo `-- os |-- i686 | |-- bar-1.0.0-1-i686.pkg.tar.xz | |-- bar-1.0.0-1-i686.pkg.tar.xz.sig | |-- foo.abs.tar.gz | |-- foo.db | |-- foo.db.sig | `-- foo.files `-- x86_64 |-- bar-1.0.0-1-x86_64.pkg.tar.xz |-- bar-1.0.0-1-x86_64.pkg.tar.xz.sig |-- foo.abs.tar.gz |-- foo.db |-- foo.db.sig `-- foo.files
そして、この foo ディレクトリを Apache なり nginx なりで公開する。
パッケージを更新するときも、PKGBUILD を更新してから同じように akabei omakase build $pkgname
とすればいい。
このとき、古いパッケージファイルは消されずに残る。
これは意図的にそうしている (けど、古いパッケージを消すオプションもあってもいいかもしれない)。
パッケージを削除するときは akabei omakase remove $pkgname
とする。
ただし、これによって消されるのは ABS tarball、データベース、ファイルリスト内のエントリであり、パッケージファイル自体は消されずに残る。
Omakase mode with S3
これは完全に自分の都合で追加した。 S3 上にリポジトリを作るのは便利で楽だと思っていて、実際に http://arch.wanko.cc/ ではそうしてる。
akabei omakase init --s3
とすると S3 の設定を含む .akabei.yml が生成されて、.akabei.yml に S3 用のアクセスキーを設定すれば、あとは同じように akabei omakase build $pkgname
でビルドして公開できる。