RPMTweetこんにちは、亀本です。ブログはだいぶご無沙汰となりました。気が付いたらもう春ですね。アシアルにも新入社員が入ってきたりして、なんだか少しずつ環境の変化を感じる今日この頃です。リポジトリを立ててしまおう!というお話です。・・+独自リポジトリの参照といった内容について紹介します。yumリポジトリを立てる事のモチベーション管理するサーバの台数が少ないうちはいいのですが、管理規模がどんどん多くなっていったり、頻繁に新しいOSをインストールしたりするような場合、OSのパッケージ管理に気を配る必要が出てきます。updateでメタデータを更新するのにかかるネットワークコストを考えると、なんだかげんなりします。updateぐらいなら別に我慢しててもいいんですが、サーバを何台も何台もセットアップする、となった場合には、パッケージのダウンロードだけで結構時間も食われますし、そもそも提供リポジトリサーバに対して失礼な感じですよね。それに、様々なシステムの構築をしていると、ディストリビュージョンが提供してくれている様々なライブラリ群だけでは物足りなくなって、サードパーティーリポジトリに手を出したりしますよね。サードパーティーのリポジトリにあるぐらいならまだいいんですが、その中にもないようなものを使おうとすると、もうソースからインストールするしかありません。管理する規模が小さいうちは「なんだそのくらい」という話になるところですが、ある程度管理するサーバの台数が増えてくると、正直パッケージ管理できないと再利用性もないしバージョンの追随もつらいし、管理が煩雑になってしまって参っちゃいます。いや、実際にはできるかもしれませんが、なんかそういうことを心配するだけで疲れます。いうデメリットを回避するために、ソースパッケージをrpmパッケージにしちゃってからインストールすると少しは効率良くなるのですが、rpmも依存性を自分で補完しなきゃいけないし、あんまり頭良くありません。そんな諸々の事情をすっきり解決しようと思うと、一番いいのが自前でリポジトリサーバを立ててしまうこと、というわけです。ローカルミラーリポジトリの作成まずは、ローカルのミラーリポジトリを作成する方法です。これには色々な方法がありますが、ここでは「ネットワークコストを減らす」ということを目的として必要なリポジトリをミラーリングしてくる形をとります。HTTPベースでのリポジトリのミラーリングであれば、実はそれほど特別なことをしなくても、簡単にミラーサーバを立てることができます。やることはいたって単純で、「他のミラーサーバをまるっとコピーする」というだけです。実行する処理は、以下の通り。url)パスは適宜環境に合わせて読み変えてください。2通りの方法を紹介しましたが、いずれも既にあるミラーから差分を見つけ、更新のあったパッケージのみをダウンロードしてきます。-X(lftp)で指定した名前のディレクトリはダウンロードされませんので、ローカルに不要なisosなどのパッケージは除外しておきましょう。これを深夜に1日1回程度の頻度でcronで回してやれば、手軽にローカルのリポジトリを獲得することができます。あとは、ここでDLしてきたパッケージ群をHTTPDの見えるところに置いてやり、公開するようにhttpd.confを設定してやれば完了です。いったファイルを以下のような内容で作成してやればよいでしょう。192.168.0.0/16</Directory>これでhttpdをreloadしてやれば、公開完了です。シンボリックリンクを張っておくとよいでしょう。しておけば、リンクを張り直してやるだけで常にcentos/5のパスから最新のパッケージを取得できるようになるからです。これらと同じ階層に、GPG-keyもダウンロードして置いておくとよりよいと思います。(なくても話は通りますが。url)/path/to/centos/RPM-GPG-KEY-CentOS-5なお、rsyncでもlftpでもどちらでも可能なのですが、ダウンロード元のサーバ負荷を考えると、lftpでやることをお勧めします。rsyncは、更新があったかどうかを確認するために両者のサーバで対象ファイルを細かいブロックに分割し、そのブロックごとにチェックサムを計算して必要な部分だけをダウンロードしてきます。そのためダウンロード効率はいいのですが、ファイルサイズが大きくなればなるほど、チェックサムの計算に大きなCPU負荷を強いられる場合があります。(DBのdumpデータなどをrsyncしようとしたことのある方は、経験があるのではないでしょうか。)対して、lftpのmirrorは、単純にファイルごとの更新時刻を見て判断し、ファイルを丸ごとダウンロードしてきます。このような事情があるため、rsyncでのミラーリングを定期cronで回すのは結構な負荷を強いることになります。善意で公開してくれているリポジトリサーバに余計な負荷をかけないためにも、特別な理由がなければlftpを使うようにしましょう。ローカルマシンに、作成したミラーリポジトリを使うように設定するせっかくミラーリポジトリを作っても、ローカル側でそれを利用するように指定してやらなければ、意味がありません。いうわけで、今作ったリポジトリを、ローカルマシンから指定するようにします。やることは単純で、.repoファイルの指定先URLを今公開しているサーバに向けるだけです。等の内容を、以下のように編集します。&repo=addonsbaseurl=http://(myrepo_name)/centos/$releasever/addons/$basearch/gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5...やっている事は、mirrorlistのコメントアウトと、独自リポジトリURLの指定(baseurl=....)です。これを行うだけで、ローカルのリポジトリサーバを使うように指定することができます。パッケージ管理をもっとちゃんとしたシステムとして組む場合なら、baseurlを指定するのではなく、ミラーリストファイルを独自に作成するとよいでしょう。mirrorlistの指定先としてそのファイルを見るように指定してやれば、仮に独自ミラーが死んだとしても更新は止まらずに済みます。独自yumリポジトリの作成さて、今までの話でローカルにミラーを構築・それを利用することはできるようになりました。リポジトリを作成していきましょう。...と、大仰な言い方をしては見ましたが、これもやはりサクッとやってしまうことができます。リポジトリ作成に使うcreaterepoコマンドをインストールします。createrepo次に、公開したいパッケージを、httpdが見えるようなところに集めます。...そして、このパッケージを配置したディレクトリに対して、createrepoコマンドを実行し、メタデータを作成します。asial/5/x86_64すると、同ディレクトリ内にrepodataディレクトリができ、その中にメタデータが記録されたファイルが配置されます。あとは、このディレクトリを先ほどと同様に公開してやれば、独自リポジトリが使えるようになります。独自リポジトリを指定するあとは、呼び出し側でこのリポジトリを利用するように指定してやればOKです。いったファイルを、以下のような内容で作成します。additionalbaseurl=http://(myrepo_name)/asial/5/$basearch/enabled=1gpgcheck=0あとはこれで、yumを利用してやれば、他のリポジトリまで参照しながら依存関係をきちんと解決してくれます。以下は社内で作成したflareパッケージをインストールしようとしているところですが、きちんとasialリポジトリにあるflareが、baseにあるboostパッケージに依存している事を正しく判断しているのがわかります。このように、独自のyumリポジトリ作成は極めて簡単に行えることが分かってもらえたと思います。効率化できるメリットはとても大きいです。この機会にぜひ、リポジトリ作成にトライしてみてください。byスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。