2010,06,19 daisuke apt リポジトリの作り方(基礎) <description> ここではapt-rpmのリポジトリ作成方法の基本の基本を紹介します。公式リポジトリには 投入しないパッケージやしたくないパッケージ、テスト用に仮につくったパッケージ、 個人/企業/学校用にカスタマイズしたパッケージなどを apt からアクセスできるリポジ トリとして用意することができます。 <br/> apt-pinningのためのリポジトリの細かな設定などについては今回は省略しています。 <h2>標準的な構成の設定</h2> <p>基本的な APT-RPM 用リポジトリの作成方法:</p> <pre class="screen"> [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 </pre> <pre class="screen"> [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!!! </pre> <pre class="screen"> [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 </pre> <p> これで APT-RPM でアクセス可能なリポジトリが生成されます。ここで注意するのは、 通常はバイナリを置くディレクトリ RPMS.main とソースパッケージを置くディレクトリ SRPMS.main は階層が違うということです。SRPMS.xxx はバイナリよりも1段上の ディレクトリに置くことに注意しましょう。 このリポジトリを APT に認識させるためには、以下のような apt-line を /etc/apt/sources.list または /etc/apt/sources.list.d/test-repository.conf などに追加記述しましょう。 </p> <pre class="screen"> rpm file:/home/ftp/pub Test/i386 main rpm-src file:/home/ftp/pub Test/i386 main </pre> <p> HTTP でアクセスができるようになっている場合は /home/ftp が DocumentRoot の 場合には、以下のようにすることもできます。(FTPなども同様) </p> <pre class="screen"> rpm http://hostname/pub Test/i386 main rpm-src http://hostname/pub Test/i386 main </pre> <h2>フラットなディレクトリ構成</h2> <p> 1つのアーキテクチャのバイナリしか置かない場合には、 バイナリパッケージディレクトリ RPMS.main とソースパッケージディレクトリ SRPMS.main を置く階層を同一にすることもできます。 この場合は、以下のように "--flat" オプションをつけることで同一階層にすることができます。</p> <pre class="screen"> [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 </pre> <pre class="screen"> [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!!! </pre> <pre class="screen"> [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 </pre> <p> ユーザとして見た場合は、apt-line にはアーキテクチャを指定しないため、 以下のような設定になります。 </p> <pre class="screen"> rpm file:/home/ftp/pub Test main rpm-src file:/home/ftp/pub Test main </pre> <h2>複数コンポーネントによる構成</h2> <p> コンポーネント ( Vine Linux でいう main や plus など) を複数用意したい場合は ディレクトリを複数用意しましょう。 genbasedir コマンドは自動的にすべてのコンポーネントを見付けてリポジトリを構築してくれます。 suffix にコンポーネント名を付けることに注意しましょう。 </p> <pre class="screen"> [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 </pre> <pre class="screen"> [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!!! </pre> <pre class="screen"> [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 </pre> <p> ここでは main と test の2つのコンポーネントを用意してみました。 apt-line では以下のように記述します。 </p> <pre class="screen"> rpm file:/home/ftp/pub Test/i386 main test rpm-src file:/home/ftp/pub Test/i386 main test </pre> <h2>その他のオプション</h2> <p> genbasedir には他にも以下のようなオプションがあります。 いくつか簡単に紹介しておきましょう。 </p> <dl> <dt>-s, --sign</dt> <dd> <p> リポジトリに GnuPG で署名する。使用する鍵IDは "--default-key=ID" オプションで指定します。署名されたリポジトリにアクセスするには、 apt-line に、</p> <pre class="screen">rpm [vine] file:/home/ftp/pub Test/i386 main</pre> <p>等と指定し、/etc/apt/vendors.list に fingerprint と ID との対応を 記述します。 </p> </dd> <dt>--hashonly</dt> <dd> hash ファイルのみ更新する。 </dd> <dt>--listonly</dt> <dd> pkglists と srclists のみを作成する。 </dd> <dt>--bz2only</dt> <dd> pkglist/srclist/release ファイルを bzip2 圧縮されたもののみを作成します。 通常このオプションを指定しておいて問題ないでしょう。 </dd> <dt>--progress</dt> <dd> リポジトリ作成過程のプログレスバーを表示する。 </dd> <dt>--bloat</dt> <dd> リポジトリのパッケージデータに完全なファイルリストを収録します。 ファイル依存の解決に必要な場合がありますが、Vine Linux では推奨していません。 </dd> </dl>