Product SiteDocumentation Site

15.3. APT 用のパッケージリポジトリの作成

Falcot Corp のメンテナンスする Debian パッケージの数は次第に増えました。この中には既存のパッケージから手元で修正したパッケージや、内部データとプログラムを配布するために最初から作成したパッケージなどがあります。
パッケージの配備を簡単にするために、管理者はこれらのパッケージを APT から直接使うことが可能なパッケージアーカイブに組み込みたいと思っています。明らかなメンテナンス上の理由により、管理者は内部パッケージと手元で再ビルドしたパッケージを別にしたいと思っています。すなわち、最終的に /etc/apt/sources.list.d/falcot.list ファイル内のエントリを以下のようにしたいと思っています。
deb http://packages.falcot.com/ updates/
deb http://packages.falcot.com/ internal/
このため、管理者は内部 HTTP サーバ上に仮想ホストを設定して、APT リポジトリのルートとして /srv/vhosts/packages/ を割り当てます。パッケージアーカイブ自体の管理は mini-dinstall コマンド (同名のパッケージに含まれます) に委託されます。mini-dinstall ツールは incoming/ ディレクトリ (今回の場合、/srv/vhosts/packages/mini-dinstall/incoming/) を監視して、新しいパッケージがこのディレクトリにアップロードされることを待ちます。そしてパッケージがアップロードされたら、mini-dinstall/srv/vhosts/packages/ のパッケージアーカイブにパッケージをインストールします。mini-dinstall コマンドは Debian パッケージが生成された時に作成される *.changes ファイルを読みます。*.changes ファイルには、パッケージのバージョンに対応するその他のファイル (*.deb*.dsc*.diff.gz/*.debian.tar.gz*.orig.tar.gz、その他の圧縮ツールを使った場合の同等ファイル) のリストが書かれており、mini-dinstall はこのリストに従ってインストールするファイルを把握します。さらに *.changes ファイルの Distribution ヘッダフィールドには、debian/changelog ファイル内の最新エントリに書かれた対象ディストリビューションの名前 (通常 unstable) が書かれており、mini-dinstall はこの名前に従ってパッケージのインストール先を決めます。このため、管理者は対象パッケージをビルドする前に debian/changelog ファイル内の最新エントリに書かれた対象ディストリビューションの名前を必ず変更し、対象パッケージのインストール先に従ってその名前を internal または updates に設定しなければいけません。この後、mini-dinstall は APT が必要とする Packages.gz などのファイルを生成します。
mini-dinstall を設定するには、~/.mini-dinstall.conf ファイルをセットアップする必要があります。Falcot Corp では以下の通り設定しました。
[DEFAULT]
archive_style = flat
archivedir = /srv/vhosts/packages

verify_sigs = 0
mail_to = [email protected]

generate_release = 1
release_origin = Falcot Corp
release_codename = stable

[updates]
release_label = Recompiled Debian Packages

[internal]
release_label = Internal Packages
各パッケージアーカイブに対して Release ファイルを作成することに決めた点は注目に値します。これは /etc/apt/preferences 設定ファイルを使ってパッケージインストール優先度を管理する場合に役立ちます (詳細は第 6.2.5 節「パッケージ優先度の管理」を参照してください)。
mini-dinstall を実行すると、バックグラウンドでデーモンが開始されます。mini-dinstall デーモンが実行されている限り、デーモンは 30 分ごとに incoming/ ディレクトリにアップロードされた新しいパッケージを確認します。そして新しいパッケージがアップロードされると、パッケージはパッケージアーカイブに移動され、適切な Packages.gzSources.gz ファイルが再生成されます。デーモンの実行に問題がある場合、incoming/ ディレクトリにパッケージをアップロードしたら毎回、手作業で mini-dinstall をバッチモードで実行します (-b オプションを付けます)。mini-dinstall 他の使い方は mini-dinstall(1) マニュアルページで説明されています。