2009年11月現在、メジャーなLinuxディストリビューションではyumやaptが整備されているとはいえ、ある程度はRPMを触れないと楽しくないので、自分用にメモ。
技術/Linux/RPMコマンドメモ(入門レベル) でも簡単にまとめているが、もう少し詳細にまとめておく。
CentOS5.2, RPM 4.4.2 で動作確認しており、本文も同左のmanページを元にしている。
基本形:
rpm {-q|--query} [select-options] [query-options]
インストール済パッケージ名が分かっている場合は、次のようにselect-optionsをスキップしてOK。
rpm {-q|--query} [query-options] パッケージ名
情報を取り出したいパッケージを検索 or 選択する為のオプション。日常的に使うのは以下の三つ。
インストールされている全てのパッケージを検索する。grepと組み合わせて使う。
rpm -qa | grep foobar
"FILE"を所有するパッケージを検索する。which/whereとの組み合わせで使う。
$ which rpm /bin/rpm $ rpm -qf /bin/rpm rpm-4.4.2-48.el5
RPMパッケージファイル PACKAGE_FILE を選択する。PACKAGE_FILEはローカルでも、HTTPでもFTP上のファイルでも指定できる。
なおパッケージファイル名/URLを改行で区切って並べたテキストファイルを指定することも可能。
$ rpm -qp rpmforge-release-0.3.6-1.el5.rf.i386.rpm $ rpm -qp -i rpmforge-release-0.3.6-1.el5.rf.i386.rpm
名前は"検索オプション"だが、元の"query-options"が示すとおり、パッケージからどの情報を取得するかを指定するオプション。
常連オプションは "-i", "-l", "-R" だが、ごく希にインストール/アンインストールスクリプトを確認したい時に "--scripts" も使う。
$ rpm -qi rpm
$ rpm -ql rpm
$ rpm -qR rpm
$ rpm -qc coreutils /etc/DIR_COLORS /etc/DIR_COLORS.256color /etc/DIR_COLORS.lightbgcolor ...
$ rpm -q --changelog postgresql-libs
$ rpm -q --scripts rpm preinstall scriptlet (using /bin/sh): ... postinstall scriptlet (using /bin/sh): ... postuninstall scriptlet (using /bin/sh): ...
なお、複数のquery-optionsを一気に指定する事も出来る。
$rpm -qilR --scripts --changelog rpm
ただし、全てのquery-optionsに対する出力が何の区切りも無しにずらずら表示するだけなので、殆ど使わない。"-iR"の組み合わせくらい。
また、"-qp" とすればインストール済みパッケージでなくRPMファイルを指定して情報を表示することが出来る。
参考:
基本形:
rpm {-i|--install} [install-options] PACKAGE_FILE ... rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... rpm {-e|--erase} [delete-options] PACKAGE_NAME ...
良く使う他のオプション:
他、"-i"/"-U"では進捗状況を表示する為、"-v", "-h"を組み合わせる事が多い。
rpm -ivh foobar.rpm rpm -Uvh foobar.rpm
rpmパッケージに含まれている"rpm2cpio"コマンドを使うと、引数 or 標準入力から読み込まれたrpmファイルをcpioアーカイブ形式に変換して、標準出力に出力する。cpioアーカイブ形式については 技術/UNIX/cpio 参照(*1)。
引数でRPMファイルを指定:
$ rpm2cpio rpmforge-release-0.3.6-1.el5.rf.i386.rpm | cpio -t ./etc/apt ./etc/apt/sources.list.d ... 36 blocks
引数に"-"を指定し、標準入力でRPMファイルを読み込ませる:
$ rpm2cpio - < rpmforge-release-0.3.6-1.el5.rf.i386.rpm | cpio -t ./etc/apt ./etc/apt/sources.list.d ... 36 blocks
以下余談:
数年ぶりにrpmのmanページを漁ってみたら、やけに読みやすいな~と感じた。それは恐らく、RPMのビルド関連のオプション記述がごっそり削られたからだろう。ビルド機能がrpmbuildに分離されたおかげだろう。公式ドキュメントにしても、rpmの本家サイトでTracを使って書かれていたりして随分と分かりやすくなったようである。
最後にRPMにどっぷりはまり、必要に迫られてローカルで使うRPMパッケージを作ったりしたのが2002-2003年頃で、隔世の感がある。