torutkのブログ

ソフトウェア・エンジニアのブログ

yumの更新サイト複数アクセス時、同じ名前のパッケージは隠蔽される?

RHEL5/CentOS 5には標準でdoxygen-1.4.7が提供されています。しかし、UTF-8環境で使うには、UTF-8対応したdoxygen-1.5.2以降が欲しくなります。


そこで、doxygenソースをダウンロードし、RPMパッケージを作成して自分用yum更新サイトに置いたのですが、yumで一覧を見てもdoxygenの1.5.xが見えません。
一方、同時に置いたdoxygen-debuginfoは見えているので、どうやらCentOSのbase/updateにあるdoxygenパッケージと同名(でバージョン番号だけ異なる)パッケージを別なサイトに置いても隠れてしまうようです。

回避手段

yumのオプション --disablerepo=* --enablerepo=xxx の様に、隠れてしまったパッケージを置いたxxxサイトだけ有効にする方法はあります。但し、無効にしたCentOS標準サイトに依存するパッケージがあると厄介です。エラーになったパッケージを先に入れてから・・・とyumのメリットが失われてしまいます。


パッケージ名を変えて作成するのがよいのかなぁ。。。

追記(11/9)

doxygenの場合、CentOS 5の標準パッケージdoxygen-1.4.7-1.1.i386.rpmは、Epochと呼ばれる特殊なバージョン指定が付加されています。Epochはあちこちの文献で「使用すべきでない」と言われている仕組みなのですが・・・

そこで、Epoch番号を明示的に指定して最新doxygenパッケージを作成するのが解決策として適していると思います。

Epochを含めたバージョン番号

通常一覧で見る限り、Epoch番号は隠れています。--providesオプションで見ることができます。

$ rpm -q doxygen
doxygen-1.4.7-1.1
$ rpm -q --provides doxygen
doxygen = 1:1.4.7-1.1
$

Epoch番号が指定されていないRPMパッケージは、Epoch=0と見なされます。rpmのバージョン番号の比較では、最初にEpoch番号の大小比較で新旧がチェックされます。

  1. 1:1.4.7-1.1 (Epoch=1, Version=1.4.7, Release=1.1)
  2. 1.5.6-1 (Epoch=0[未指定のデフォルト], Version=1.5.6, Release=1)

上記の2つのバージョンは、前者が新しいバージョンと認識されてしまいます。

このため、CentOSの標準パッケージにあるdoxygen(1:1.4.7-1.1)と、自分の更新サイトにあるdoxygen(0:1.5.6-1)をyumが読み込んだ際に新しいバージョンと見なしたCentOS標準パッケージのdoxygen-1.4.7-1.1を表示していたようです。

CentOSdoxygen-1.4.7-1.1のdoxygen.specファイルのバージョン設定

ソースRPMパッケージからspecファイルを抜くと以下のバージョン番号を持っていました。

Version: 1.4.7
Release: 1.1
Epoch: 1