yumリポジトリ作成

自分のパッケージリポジトリをセットアップする方法について説明します。 時に、あなたがrpmパッケージをひとまとめにして1つの箇所に置き、 それらがyumが実行出来るあなたのシステム上から利用可能にしたいといったケースがあるかもしれません。 これを行うのは非常に簡単です。

概要

yumによって使用されるパッケージリポジトリは1つ以上のRPMと、 yumによって簡単にRPMへの情報(依存関係、ファイルリスト、他)にアクセス可能とする幾つかの"メタ情報"を含むシンプルなディレクトリになります。 これにより、このディレクトリにftp/httpまたはfile URI(NFS等)でアクセスすることが可能です。

手順

  • パッケージを集めて、1つのパッケージに一緒にします。 必要に応じて、複数のサブディレクトリを作成することが可能ですが、 それらは全てその場所でのトップレベルディレクティブである必要があります。 ここまで出来たら、次から自分達のリポジトリを作成していきます。
  • yumはその作業を行うために、各RPMに格納されている情報の要約を使用します。 この情報は'createrepo'プログラムを使用して作成されます。 もしcreaterepoがインストールされていなければ、下記のようにしてインストールすることが可能です。

    yum install createrepo
    

    もし、RPMを使用せずにマシン上にリポジトリを生成するのであれば、 http://createrepo.baseurl.org/からcreaterepoをダウンロードし、 ビルド/インストールを手動で行うことが可能です。

    createrepoをインストールしたら、それを実行する必要があります。 必要となる引数はリポジトリデータをその中に生成したいディレクトリの指定のみです。 そのため、もしパッケージディレクトリをこの手順1で/srv/my/repoに作るのであれば、下記のように実行します。

    createrepo /srv/my/repo
    

    様々な内容が表示されますが、これはエラー無しで完了する必要があります。 完了すると、/srv/my/repo/repodataというディレクトリと、その中に少なくとも4つのファイルが作成されているはずです。

  • このリポジトリをyumに知らせるために、.repoファイルをyumの設定に加える必要があります。 このリポジトリを使用したいシステム上で、/etc/yum.repos.d/内に新しいファイルを作成する必要があります。 このファイルには任意の名前を付けることが出来ます、ファイルの拡張子は.repoにしなければいけません。 この1つを'myrepo.repo'としてみましょう。

    このファイル内には、下記のように記述する必要があるだけです。

    [myrepo]
     name = This is my repo
     baseurl = url://to/get/to/srv/my/repo/
    

    ファイル内で行う必要があることは、これが全てです。 'baseurl'の行は、マシンがリポジトリを取得するのに使用するパスになります。 もし、マシン上から直接アクセス出来る、またはそれをファイルシステムにマウントしているのであれば、 baseurl行は次のようにすることが可能です。

    baseurl = file:///srv/my/repo/
    

    注意:2つではなく、3つのスラッシュ(/)の後にファイルが続いていますが、これは正しい指定です。

    もし、httpまたはhttpsサーバーを介してこのファイルにアクセスするのであれば、 下記のように書くことになるでしょう。

    baseurl = http://servername/my/repo
    

    クライアントサイドのリポジトリ設定の詳細については、yum.confのmanページを参照してください。

  • 修正、削除、または新しいRPMパッケージを/srv/my/repoに追加する際には、 リポジトリのメタデータを再作成する必要があります。 これは手順2で行ったのと同じ方法で、createrepoを実行することによって行います。

概要

createrepoの動作について説明してきましたが、一般的には拡張オプションを追加する最適化が行われており、 もし新しいyumクライアントを立てるのであれば、これを推奨します。

--database
これは、時間節約(翻訳に自信なし)のためクライアント毎に、サーバ上に.sqliteデータベースを作成します。 古いバージョンでのyumでは、.sqliteファイルは無視して.xmlファイルを取得しますが、これによるマイナス効果はありません。
--unique-md-filenames
これは全てのメタデータファイルが一意であることを意味し、 ミラーリングを使用する際に非常に有用になります。 yumの3.2.10バージョン以前では、正しくクリーンアップしてくれません。
--changelog-limit
ダウンロード時間を節約するために、changelogへの入力を制限します。
--deltas --oldpackagedirs
これは増分情報を作成し、ダウンロード時間を節約します。 クライアントは、このデータのメリットを享受するために、yum-prestoをインストールしなければいけません。

概要

createrepo --update

場合によってはリポジトリに多くのパッケージを持つことになり、少量のパッケージの追加または変更のために、 各パッケージのメタデータの再作成が必要になり、多くの時間を費やすことになるかもしれません。 --updateはこれを手軽にしてくれます。 前述したcreaterepoを実行しますが、この時に--updateフラグを次のように渡します。

createrepo --update /srv/my/repo

これにより、createrepoはメタデータが作成された最終時刻から、 変更、追加、削除された項目のみを更新するようになります。

createrepo -x package_file_name

リポジトリのディレクトリに、アクセスしてくる人に参照されたくない少量のパッケージを持つとします。 このようなパッケージをcreaterepoを使用して、簡単に除外する事が可能です。

createrepo -x filename -x filename2 -x filename* /srv/my/repo
実行され作成された後に、リポジトリに署名することが可能
gpg --detach-sign --armor repodata/repomd.xml

これは比較的新しいバージョンのyumでのrepodataディレクトリ内に、repomd.xml.ascファイルを作成し、 yumにリポジトリのメタデータがgpgキーgpgキーのオーナーからのものであるかの検証を行わせます。

内部で使用するチェックサムチェックサムの変更が可能
createrepo --checksum /srv/my/repo

これはrepodataを作成するマシンのPythonのバージョンが、 クライアントのものより新しい場合(またはpython-hashlibがインストールされている)場合にのみ必要となります。

もし、createrepoを使用した自分自身のパッケージリポジトリの作成と保守について更に詳しく学びたいのであれば、 createrepoのmanページ、またはこのドキュメントの他のページを参照してください。

 Back to top

© 2010 - 2017 STUDIO KINGDOM