Vine Linux Magazine
apt リポジトリの作り方(基礎)

筆者: daisuke
発行日: 2010,06,19

ここではapt-rpmのリポジトリ作成方法の基本の基本を紹介します。公式リポジトリには 投入しないパッケージやしたくないパッケージ、テスト用に仮につくったパッケージ、 個人/企業/学校用にカスタマイズしたパッケージなどを apt からアクセスできるリポジ トリとして用意することができます。
apt-pinningのためのリポジトリの細かな設定などについては今回は省略しています。

標準的な構成の設定

基本的な APT-RPM 用リポジトリの作成方法:

[daisuke@hoge /home/ftp/pub]$ find .
.
./Test/SRPMS.main
./Test/SRPMS.main/hoge-1.0-0vl1.src.rpm
./Test/i386/RPMS.main
./Test/i386/RPMS.main/hoge-1.0-0vl1.i386.rpm
[daisuke@hoge /home/ftp/pub]$ genbasedir /home/ftp/pub/Test/i386
Creating base directory... done 
Components: main
Processing pkglists... main [done] 
Processing srclists... main [done]
Creating component releases... main [done] 
Creating global release file... [done] 
Appending MD5Sum... main [done] 
All your base are belong to us!!! 
[daisuke@hoge /home/ftp/pub]$ find .
.
./Test/i386/base
./Test/i386/base/pkglist.main
./Test/i386/base/pkglist.main.bz2
./Test/i386/base/release.main
./Test/i386/base/release
./Test/i386/base/srclist.main
./Test/i386/base/srclist.main.bz2
./Test/i386/RPMS.main
./Test/i386/RPMS.main/hoge-1.0-0vl1.i386.rpm
./Test/SRPMS.main
./Test/SRPMS.main/hoge-1.0-0vl1.src.rpm

これで APT-RPM でアクセス可能なリポジトリが生成されます。ここで注意するのは、 通常はバイナリを置くディレクトリ RPMS.main とソースパッケージを置くディレクトリ SRPMS.main は階層が違うということです。SRPMS.xxx はバイナリよりも1段上の ディレクトリに置くことに注意しましょう。 このリポジトリを APT に認識させるためには、以下のような apt-line を /etc/apt/sources.list または /etc/apt/sources.list.d/test-repository.conf などに追加記述しましょう。

rpm file:/home/ftp/pub Test/i386 main
rpm-src file:/home/ftp/pub Test/i386 main

HTTP でアクセスができるようになっている場合は /home/ftp が DocumentRoot の 場合には、以下のようにすることもできます。(FTPなども同様)

rpm http://hostname/pub Test/i386 main
rpm-src http://hostname/pub Test/i386 main

フラットなディレクトリ構成

1つのアーキテクチャのバイナリしか置かない場合には、 バイナリパッケージディレクトリ RPMS.main とソースパッケージディレクトリ SRPMS.main を置く階層を同一にすることもできます。 この場合は、以下のように "--flat" オプションをつけることで同一階層にすることができます。

[daisuke@hoge /home/ftp/pub]$ find .
.
./Test/SRPMS.main
./Test/SRPMS.main/hoge-1.0-0vl1.src.rpm
./Test/RPMS.main
./Test/RPMS.main/hoge-1.0-0vl1.i386.rpm
[daisuke@hoge /home/ftp/pub]$ genbasedir --flat /home/ftp/pub/Test
Creating base directory... done 
Components: main
Processing pkglists... main [done] 
Processing srclists... main [done]
Creating component releases... main [done] 
Creating global release file... [done] 
Appending MD5Sum... main [done] 
All your base are belong to us!!! 
[daisuke@hoge /home/ftp/pub]$ find .
.
./Test/base
./Test/base/pkglist.main
./Test/base/pkglist.main.bz2
./Test/base/release.main
./Test/base/release
./Test/base/srclist.main
./Test/base/srclist.main.bz2
./Test/RPMS.main
./Test/RPMS.main/hoge-1.0-0vl1.i386.rpm
./Test/SRPMS.main
./Test/SRPMS.main/hoge-1.0-0vl1.src.rpm

ユーザとして見た場合は、apt-line にはアーキテクチャを指定しないため、 以下のような設定になります。

rpm file:/home/ftp/pub Test main
rpm-src file:/home/ftp/pub Test main

複数コンポーネントによる構成

コンポーネント ( Vine Linux でいう main や plus など) を複数用意したい場合は ディレクトリを複数用意しましょう。 genbasedir コマンドは自動的にすべてのコンポーネントを見付けてリポジトリを構築してくれます。 suffix にコンポーネント名を付けることに注意しましょう。

[daisuke@hoge /home/ftp/pub]$ find .
.
./Test/SRPMS.main
./Test/SRPMS.main/hoge-1.0-0vl1.src.rpm
./Test/SRPMS.test
./Test/SRPMS.test/fuga-1.0-0vl1.src.rpm
./Test/RPMS.main
./Test/RPMS.main/hoge-1.0-0vl1.i386.rpm
./Test/RPMS.test
./Test/RPMS.test/fuga-1.0-0vl1.i386.rpm
[daisuke@hoge /home/ftp/pub]$ genbasedir --flat /home/ftp/pub/Test
Creating base directory... done 
Components: main
Processing pkglists... main test [done] 
Processing srclists... main test [done]
Creating component releases... main test [done] 
Creating global release file... [done] 
Appending MD5Sum... main test [done] 
All your base are belong to us!!! 
[daisuke@hoge /home/ftp/pub]$ find .
.
./Test/base
./Test/base/pkglist.main
./Test/base/pkglist.main.bz2
./Test/base/pkglist.test
./Test/base/pkglist.test.bz2
./Test/base/release.main
./Test/base/release.test
./Test/base/release
./Test/base/srclist.main
./Test/base/srclist.main.bz2
./Test/base/srclist.test
./Test/base/srclist.test.bz2
./Test/SRPMS.main
./Test/SRPMS.main/hoge-1.0-0vl1.src.rpm
./Test/SRPMS.test
./Test/SRPMS.test/fuga-1.0-0vl1.src.rpm
./Test/RPMS.main
./Test/RPMS.main/hoge-1.0-0vl1.i386.rpm
./Test/RPMS.test
./Test/RPMS.test/fuga-1.0-0vl1.i386.rpm

ここでは main と test の2つのコンポーネントを用意してみました。 apt-line では以下のように記述します。

rpm file:/home/ftp/pub Test/i386 main test
rpm-src file:/home/ftp/pub Test/i386 main test

その他のオプション

genbasedir には他にも以下のようなオプションがあります。 いくつか簡単に紹介しておきましょう。

-s, --sign

リポジトリに GnuPG で署名する。使用する鍵IDは "--default-key=ID" オプションで指定します。署名されたリポジトリにアクセスするには、 apt-line に、

rpm [vine] file:/home/ftp/pub Test/i386 main

等と指定し、/etc/apt/vendors.list に fingerprint と ID との対応を 記述します。

--hashonly
hash ファイルのみ更新する。
--listonly
pkglists と srclists のみを作成する。
--bz2only
pkglist/srclist/release ファイルを bzip2 圧縮されたもののみを作成します。 通常このオプションを指定しておいて問題ないでしょう。
--progress
リポジトリ作成過程のプログレスバーを表示する。
--bloat
リポジトリのパッケージデータに完全なファイルリストを収録します。 ファイル依存の解決に必要な場合がありますが、Vine Linux では推奨していません。