RPM には次の 5 つの基本操作モードがあります (パッケージの作成は含みません)。インストール、アンインストール、アップグレード、クエリ、および検証。このセクションでは各モードの概要を説明します。詳細とオプションについては、rpm --help を試してみてください。RPM の詳細については 「 その他の RPM の資源 」 を参照してください。
RPM パッケージの典型的なファイル名は foo-1.0-1.i386.rpm のようになっています。この名前には、パッケージ名(foo)、バージョン (1.0)、リリース (1)、およびアーキテクチャ (i386) が含まれます。パッケージのインストールは以下のように簡単です。
# rpm -ivh foo-1.0-1.i386.rpm foo #################################### # |
見て分かるように、RPM はパッケージの名前 (必ずしもファイル名 1.rpm と同じではありません) を出力し、パッケージのインストール中には連続するハッシュマークを進行メーターとして出力します。
パッケージのインストールは単純になるように設計されていますが、エラーが発生することもあります。
パッケージがすでにインストールされている場合は、以下のメッセージが表示されます。
# rpm -ivh foo-1.0-1.i386.rpm foo package foo-1.0-1 is already installed error: foo-1.0-1.i386.rpm cannot be installed # |
そのパッケージを本当にインストールしたい場合は、コマンドライン上で --replacepkgs を使用すれば、RPM にエラーを無視するように指示することができます。
# rpm -ivh --replacepkgs foo-1.0-1.i386.rpm foo #################################### # |
別のパッケージによってインストールされたファイルを含むパッケージをインストールしようとすると、以下のメッセージが表示されます。
# rpm -ivh foo-1.0-1.i386.rpm foo /usr/bin/foo conflicts with file from bar-1.0-1 error: foo-1.0-1.i386.rpm cannot be installed # |
このエラーを RPM に無視するように指示するには、コマンドライン上で、--replacefiles を使用します。
# rpm -ivh --replacefiles foo-1.0-1.i386.rpm foo #################################### # |
RPM パッケージは他のパッケージに 「依存」 することができます。つまり、ある RPM パッケージが正しく動作するために他のパッケージのインストールが必要になることがあります。未解決の依存関係を持つパッケージをインストールしようとすると、以下のようなメッセージが表示されます。
# rpm -ivh bar-1.0-1.i386.rpm failed dependencies: foo is needed by bar-1.0-1 # |
このエラーに対処するためには、要求されたパッケージをインストールする必要があります。インストールを強行したい場合 (おそらくそのパッケージは正しく動作しないので良い考えではありません) には、コマンドライン上で --nodeps を使用します。
パッケージのアンインストールはインストールと同様に簡単です。
# rpm -e foo # |
使用したのはパッケージの名前 「foo」 であって、元のパッケージのファイル 「foo-1.0-1.i386.rpm」 ではないことに注意してください。
削除しようとしているパッケージに依存したパッケージがある場合には、依存関係エラーが発生することがあります。たとえば、
# rpm -e foo removing these packages would break dependencies: foo is needed by bar-1.0-1 # |
RPM にこのエラーを無視させ、パッケージのアンインストールを強行するには (おそらく依存しているパッケージが正しく動作しなくなるのでこれも良い考えではありません)、コマンドライン上で --nodeps を使用します。
パッケージのアップグレードはインストールと似ています。
# rpm -Uvh foo-2.0-1.i386.rpm foo #################################### # |
上記のメッセージを見ても分からないことは、RPM が古いバージョンのfoo パッケージを自動的にアンインストールしたことです。実際には、常に -U を使用してパッケージをインストールするのが良いかもしれません。なぜならば、古いバージョンのパッケージがない場合であっても正しく動作するからです。
RPM は設定ファイルを使用した賢いパッケージのアップグレードを行うので、以下のようなメッセージが表示されることもあります。
saving /etc/foo.conf as /etc/foo.conf.rpmsave |
これは、既存の設定ファイルに対して行った変更の内容が、パッケージに含まれる新しい設定ファイルとの 「上位互換性」 を持たない可能性があるため、RPM は元のファイルを保存してから新しいファイルをインストールすることを意味しています。できる限り早期に 2 つのファイルの間の違いを調査、解決することで、引き続きシステムが正しく動作することを確認する必要があります。
実際にはアップグレードがアンインストールとインストールの組み合わせであるため、どちらかでエラーが発生する可能性があり、さらに次のような場合もあります。古いバージョン番号を持ったパッケージへのアップグレードが行われようとしていることを RPM が認識すると、以下のようなメッセージが表示されます。
# rpm -Uvh foo-1.0-1.i386.rpm foo package foo-2.0-1 (which is newer) is already installed error: foo-1.0-1.i386.rpm cannot be installed # |
RPM に 「アップグレード」 を強行させるには、コマンドライン上で、--oldpackage を使用します。
# rpm -Uvh --oldpackage foo-1.0-1.i386.rpm foo #################################### # |
パッケージを最新にするのはアップグレードと似ています。
# rpm -Fvh foo-1.2-1.i386.rpm foo #################################### # |
RPM の freshen オプションは、コマンドライン上で指定されたパッケージのバージョンと、すでにシステム上にインストールされているパッケージのバージョンを照合します。インストール済パッケージの新しいバージョンを RPM の freshen オプションによって処理すると、そのパッケージは新しいバージョンへとアップグレードされます。ただし、同一名のパッケージがインストールされていなかった場合、RPM の freshen オプションはそのパッケージをインストールしません。これは RPM のアップグレードオプションと異なっています。アップグレードでは、パッケージの古いバージョンがインストールされているか否かとは無関係にパッケージがインストールされます。
RPM の freshen オプションを単一パッケージまたはパッケージのグループに対して使用することができます。これは、多数のパッケージをダウンロードした後で、システムにインストール済のパッケージのみをアップグレードしたい場合に特に便利です。freshen オプションを使用すると、RPM を使用する前に、ダウンロードしたパッケージの中から不要なパッケージを選択して削除する作業を行う必要がありません。
この場合は、単純に以下のコマンドを発行するだけで済みます。
# rpm -Fvh *.rpm |
RPM はインストール済のパッケージのみを自動的にアップグレードします。
インストール済パッケージのデータベースに対するクエリを行うには、rpm -q を使用します。簡単な使用法は rpm -q foo であり、この場合はインストール済のパッケージ foo のパッケージ名、バージョン、およびリリース番号が出力されます。
# rpm -q foo foo-2.0-1 # |
パッケージ名を指定する代わりに、-q コマンドで以下のオプションを使用することで、クエリ対象のパッケージを指定することができます。それらはパッケージ指定オプションと呼ばれます。
-a 現時点でインストール済のすべてのパッケージをクエリします。
-f <file> <file> を含むパッケージをクエリします。
-p <packagefile> パッケージ<packagefile> をクエリします。
クエリ対象パッケージについて照会する情報を指定する方法はたくさんあります。以下のオプションは、検索する情報のタイプを選択するために使用されます。それらは情報選択オプションと呼ばれます。
-i 名前、説明、リリース、サイズ、ビルド日付、インストール日付、ベンダ、およびその他の多様な情報などのパッケージ情報が表示されます。
-l パッケージが 「所有する」 ファイルの一覧が表示されます。
-s パッケージに含まれるすべてのファイルの状態が表示されます。
-d 文書 (man ページ、info ページ、README、など) のマークが付いたファイルの一覧が表示されます。
-c 設定ファイルのマークが付いたファイルの一覧が表示されます。インストール後に、システムに合わせてパッケージを調整するために変更することのできるファイルがあります (sendmail.cf、passwd、Inittab、など)。
ファイル一覧を表示するオプションの場合、コマンドラインに -v を追加すると通常使用している ls -l 形式で一覧を取得することができます。
パッケージの検証では、パッケージからインストールされたファイルに関する情報と、元のパッケージに含まれるファイルに関する同一情報が比較されます。特に、各ファイルのサイズ、MD5 チェックサム、権限、タイプ、所有者、およびグループが比較されます。
コマンド rpm -V はパッケージを検証します。クエリ用にリストした任意のパッケージ選択オプションを使用することで、検証したいパッケージを指定することができます。簡単な使用法は rpm -V foo であり、この場合は foo パッケージに含まれるすべてのファイルが、インストール時のものと同じであるかどうかが検証されます。例えば、
特定ファイルを含むパッケージを検証するには、
rpm -Vf /bin/vi |
インストール済のすべてのパッケージを検証するには、
rpm -Va |
インストール済のパッケージを RPM パッケージファイルと照合するには、
rpm -Vp foo-1.0-1.i386.rpm |
すべてが正常に検証された場合は何も出力されません。矛盾があった場合は、それが表示されます。出力のフォーマットは 8 字の文字列であり、「c」 は設定ファイルを表し、ファイル名が続きます。8 文字の各文字は、ファイルの属性と RPM データベースに記録されたその属性の値を比較した結果を表します。単一の 「.」 (ピリオド) はテストに合格したことを表します。以下の文字は、何らかのテストで不合格になったことを表します。
5 -- MD5 チェックサム
S - ファイルサイズ
L - シンボリックリンク
T - ファイル修正時刻
D - デバイス
U - ユーザ
G - グループ
M - モード (権限とファイルタイプを含む)
情報が出力された場合は、良く考えて、パッケージを削除するのか、再インストールするのか、または問題を修正するのかを判断してください。