2008年11月13日木曜日

パッケージ管理

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
rpm+yumでおおよそ満足(70点)くらいなのだが、いろいろと。

rpm+yum

  • distribution標準

  • 依存性解析が遅いときがある

  • 大量(100>)にupdateするとおかしくなることがある。とくにyum自身が書き換わる場合。さきにyum update yumすべし。

  • プラットフォーム依存

  • binary生成が簡単とはいえ手動、rpmbuild -taなど

  • 何も考えなくていいので楽

  • build済みなので速い、とくに台数が多いときは有利だろう

  • yumのサーバ(createrepo + http)を立てて、そこを参照すればかなり自由にできる



setuptools/easy install(python)

  • pythonの世界、でもまあ、setup.py bdist_rpmで回避可能なことも。

  • プラットフォーム依存していない

  • 依存性管理がタコな時がある。rpmでいれたpackageがversion管理用のfile(egg-info
    )を持っていないときなど

  • package serverの立て方は?(知らないだけだとおもうが・・・)



macportsの不満点

  • 標準じゃない(finkも同じ)

  • 作り方不明

  • 依存解析が遅い

  • buildに失敗することがある。

  • buildするので時間が掛かる。作業台数が多いときはひどい目に遭いそう。


う~んこれだけ書いただけでもこなれてない感じがする。
redhatに乗っかっているcentosと比較するのが間違いだが。


しかしなんでどいつもこいつも依存解析が遅いのだろう?naiveにはsatisfiedとrequestedの辞書を持っていて、

最初は両者とも空
requestedにインストール要求されたpackageが入る

while requested:
requestedからpackageを取り出す。
packageが依存するpackageでa)かつb)なものをrequestedに追加する。
  a)satisfiedに存在しない
b)systemに存在しない
取り出したものをsatisfiedに入れる。
assert requestedは空
satisfiedに残ったものをインストールする。

とかになるとおもう。なんでこれが遅いんだか。

本当はrpmbuildに必要なデータを取ってくる方法を記述したfileを用意してそれに対してrpmbuildが走り、rpmがcacheされるような仕組みがいいんですけどね。portsとrpmのいいとこ取りみたいな。
fileにsourceをgetする方法を記述しておけば(たとえばsvn updateなりgit pullなり)、
勝手にversion番号を打ってくれて、rpbuild。あとはyumでウマーな仕組み。

0 件のコメント: