- PR -

RPMファイル名からパッケージ名・バージョンを抽出

1
投稿者投稿内容
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-01-18 15:42
お世話になっております。
1年ほど疎遠になっておりましたが、最近またちょくちょく参加させて頂いております。

さて、質問ですが、現在 RedHat Enterprise Linux の RPMファイル名のリストから、パッケージ名とバージョン情報を解析・抽出しようと目論んでいます。
( 実際やりたいのは、RedHat Network上のerrata 情報 → 更新RPMファイル一覧抽出 → 更新パッケージ・バージョンの抽出、という流れでの解析 )

ところが、パッケージ名とバージョンの区切りが曖昧なため、全てのパッケージを網羅する解析ルールがつかめずにいます。
大抵は、Perl正規表現 /^(.*?)-(\d.*?)\.\w+\.rpm$/ ( 初めて「ハイフン-数字」の組み合わせが出たら、そこからがバージョン ) で対処できるのですが、例えば、
 jisksp16-1990-0.1-16.noarch.rpm
というRPMファイルがあったとして、
 パッケージ名:jisksp16 バージョン:1990-0.1-16 … ×
 パッケージ名:jisksp16-1990 バージョン:0.1-16 … ○
となりますから、誤認識を起こしてしまいます。

この辺りのルール等ご存知であったり、何か良いアイデアがあれば、是非ご教示をお願いします。
あるかな
大ベテラン
会議室デビュー日: 2003/11/04
投稿数: 245
投稿日時: 2007-01-18 16:27
こんにちは。

今、更新RPMファイル一覧抽出までやれてないので、rpmfind.netの適当なリストを確認してみましたが、
パッケージ名とバージョン区切りを初回のハイフンではなく、
最初に出現する「メジャーバージョン.マイナーバージョン」の前後で区切るのではどうでしょうか?

angel様風に記載すると、
/^(.*?)-(\d\..*?)\.\w+\.rpm$/
な感じですしょうか。

パッケージ名に「数字.数字」が入っているものがあったらアウトですが。。。
anights
ぬし
会議室デビュー日: 2003/05/22
投稿数: 277
お住まい・勤務地: 東京
投稿日時: 2007-01-18 18:19
引用:

angelさんの書き込み (2007-01-18 15:42) より:
ところが、パッケージ名とバージョンの区切りが曖昧なため、全てのパッケージを網羅する解析ルールがつかめずにいます。


明確なルールってあるんでしょうか?ファイル名だけでは難しい気がします。

やっぱりパッケージ取ってきて
# rpm -q --qf=%{NAME} -p rpmファイル
# rpm -q --qf=%{VERSION} -p rpmファイル
# rpm -q --qf=%{RELEASE} -p rpmファイル
とかやるのが確実かと。
_________________
桃李不言 下自成蹊
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-01-18 20:20
ありがとうございます。
既存のパッケージを全て洗うしかないかな…、と思っていたら、お二人の回答で閃きました。
試したのは Cent4.4 ですが、
コード:
# rpm -qa --dbpath /usr/lib/rpmdb/i386-redhat-linux/CentOS/ --qf=%{NAME}\\n | grep -e '-[0-9]'

fonts-xorg-75dpi
fonts-xorg-ISO8859-9-75dpi
compat-libgcc-296
fonts-ISO8859-2
fonts-xorg-ISO8859-2-100dpi
compat-gcc-32
fonts-ISO8859-2-100dpi
fonts-KOI8-R-75dpi
fonts-xorg-ISO8859-14-75dpi
fonts-xorg-ISO8859-2-75dpi
jisksp16-1990
compat-libstdc++-33
fonts-ISO8859-2-75dpi
fonts-xorg-100dpi
fonts-xorg-ISO8859-15-100dpi
fonts-xorg-ISO8859-9-100dpi
java-1.4.2-gcj-compat
compat-libstdc++-296
fonts-xorg-ISO8859-15-75dpi
java-1.4.2-gcj-compat-devel
compat-gcc-32-c++
fonts-KOI8-R-100dpi
fonts-xorg-ISO8859-14-100dpi


のようになりました。( rpmdb を入れていたので、インストールされていないパッケージの分も調査可能 )
fonts関係、gcc,g++,java(gcj)のcompat関係、jisksp が特殊なようです。
なお、一部のパッケージは、「メジャー番号.マイナー番号」という書式になっていないので、その線も厳しそうです。( tzdata とか )

規則に当てはまらないパッケージだけ、特別扱いするしかない感じですかね…。

[ メッセージ編集済み 編集者: angel 編集日時 2007-01-18 20:32 ]
1

スキルアップ/キャリアアップ(JOB@IT)