オフィシャルサイト: rpm.org

RPM

パッケージマネージャ rpm と、RPMパッケージ作成ユーティリティ rpmbuild の使い方。

Table of Contents

rpmコマンド

問い合わせ系

未インストールの RPMファイル自体を対象にする場合には、以下の -q-qp に変えてコマンドする。

rpm -q PACKAGE
パッケージ名 (バージョンなどを含む) を表示。
rpm -q --qf '%{NAME}\n' PACKAGE
出力フォーマットをマクロタグで指定したかたち。この例はバージョンなしのパッケージ名だけを表示する。他にも %{VERSION}, %{RELEASE}, %{ARCH} などたくさんのタグがある。通用するマクロタグのリストを知りたい時には `rpm --querytags` で調べられる。
rpm -qa | grep STRING
正確なパッケージ名が分からない時は -qa (すべてのパッケージ) を指定して grep で出力をフィルタリングするのが常套手段。
rpm -qi PACKAGE
そのパッケージの詳細な情報を表示。
rpm -ql PACKAGE
そのパッケージによってインストールされるファイルやディレクトリ全てを表示。
rpm -qd PACKAGE
そのパッケージによってインストールされるドキュメントをリストアップ。
rpm -qc PACKAGE
そのパッケージによってインストールされる設定ファイルをリストアップ。
rpm -q --whatprovides /FILE_OR_DIR
ファイルまたはディレクトリ /FILE_OR_DIR が何というパッケージによってインストールされるか調べる。/FILE_OR_DIR はフルパスでなければならない。
rpm -q --provides PACKAGE
そのパッケージの提供するファイルや機能を表示する。
rpm -q --requires PACKAGE
そのパッケージのインストールや動作に必要な、依存パッケージや依存ファイルを調べる。
rpm -q --whatrequires /FILE_OR_DIR
/FILE_OR_DIR に依存するパッケージを調べる。/FILE_OR_DIR はフルパスで。

インストール系

基本的に、インストールは -i, 入れ替え(アップデート) は -U-h を追加すると進行を示す ### メータを表示、-v は冗長表示。

rpm -ivh /PACKAGE_FILE
インストール。
rpm -Uvh /PACKAGE_FILE
既にインストールされているものをアップデート。インストールされていない場合は -ivh と同じ効果となる。
rpm -ivh --test /PACKAGE_FILE
実際にインストールは行わず、試すだけ。依存関係などの衝突を事前に調べておきたい時使用。
rpm -Uvh --oldpackage /PACKAGE_FILE
古いバージョンへ戻したい時。つまり「ダウンデート」。
rpm -ivh --replacepkgs /PACKAGE_FILE
同一バージョンの再インストール。既にそのパッケージがインストールされていてもインストールを行う。
rpm -ivh --replacefiles /PACKAGE_FILE
既に他のパッケージによってインストールされているファイルがあっても強制的にインストールする。
rpm -ivh --nosignature /PACKAGE_FILE
インストールに先立つシグネチャの検査を行わない。

アンインストール系

rpm -ev PACKAGE
アンインストール。
rpm -ev --nodeps PACKAGE
そのパッケージに依存する他のパッケージがあっても強制的にそのパッケージだけアンインストール
rpm -ev --nopostun PACKAGE
アンインストール後の %{postun} マクロを実行しない。パッケージで定義されている %{postun} マクロには、インストール時に作成したユーザの削除や、スタートアップ外し (chkconfig SERVICE off) などが含まれていることが多い。

 

RPMビルド

パッケージを作成したり再構成するためのコマンド rpmbuild の使い方。古くは `rpm --build' だったが、現在では rpmbuild という専用コマンドを使用すべきである。

一般ユーザでのビルド

root権限でビルドを行うと、SPECファイルの間違いなどによって、重要なシステムディレクトリを根こそぎ削除することも簡単に起こりうる。 RHEL や Fedora Core で標準で用意されているビルドツリーは /usr/src/redhat/ だが、そこは root の所有になっていて一般ユーザは書き込みができない。正しくは、ビルドを行いたいユーザのホームディレクトリ下に別途ビルドツリーを用意し、そのユーザの権限でビルドするべきだ。標準ビルドツリーはユーザでも読み込みはできるので、以下のようにしてユーザのホームディレクトリ下へコピーすればよい。

hoge$ cp -dR /usr/src/redhat ~hoge/

もう少し凝るなら、fedora-rpmdevtools というツールもある。これは、ビルドツリー構造を作成する fedora-buildrpmtree コマンド、SPECファイルのひな形を作る fedora-newrpmspec コマンドなどから成る便利なツール集だ。下記URLから入手できる;

http://rpmfind.net/linux/rpm2html/search.php?query=fedora-rpmdevtools

さて、ビルドツリーはできたが、作っただけでは rpmbuild コマンドがそこを利用してくれない。そこで必要なのが、 ~/.rpmmacros ファイル。このマクロファイルは rpm および rpmbuild コマンドに対する基本的な環境マクロを定義する。最低限必要な項目を記述したサンプルファイルがこれ;

dot.rpmmacros

%_tmpdir%_tmppath は、指定するとビルドできない SPECファイルも存在するためコメントアウトしてある。

rpmbuildの主なコマンド

rpmbuild -bb /SPEC_FILE
バイナリパッケージをビルドする。通常はこれを使う。
rpmbuild -bs /SPEC_FILE
ソースパッケージをビルドする。
rpmbuild -ba /SPEC_FILE
バイナリパッケージとソースパッケージの両方をビルド。
rpmbuild -tb /TAR_BALL
SPECファイルを内蔵している tar(.gz) アーカイブからバイナリパッケージをビルド (-ts, -ta もあり上記同様)。
rpmbuild --clean /SPEC_FILE
ビルド時に BUILD/ 下に展開されたファイルを、削除する。 -b* と同時に指定することも可能。
rpmbuild --rmsource /SPEC_FILE
SOURCE/ 下のファイルを削除する。 -b* と同時に指定することも可能。
rpmbuild --rebuild /SRPM_FILE
ソースRPM SRPM_FILE をビルドディレクトリへ展開し、バイナリパッケージをビルドし、ビルドできたらビルドディレクトリ下のソースを掃除する。オプション `-bb --clean --rmsource --rmspec' がこの一言で済むわけだ。引数が SPECファイルでなく SRPM である点に注意。
rpmbuild --showrc
ビルド時に使用されるであろうマクロ定義を列挙する。prefixmanpath などがどこになっているのか確認する際に便利。