32.2. RPMの使用法

RPM には、次の5つの基本的作動モードがあります(パッケージの 構築はカウントしません)。インストール、アンインストール、 アップグレード、照会、検証の5つです。このセクションでは、 各モードの概要を説明します。詳細な説明やオプションについては rpm --helpをご覧ください。RPM の詳細に ついては項32.5を 参照してください。

32.2.1. RPM パッケージの検索

RPM を使用する前に、それがどこにあるかを調べる必要が あります。インターネットを検索すると数多くのRPM リポジトリ が見つかりますが、Red Hat製のRPM パッケージは以下の場所に あります。

32.2.2. インストール

RPM パッケージには概してfoo-1.0-1.i386.rpm というようなファイル名が付けられています。 このファイル名は、パッケージ名(foo )、バージョン(1.0)、 リリース(1)、アーキテクチャ (i386)で構成されています。 パッケージのインストールは、rootでログインするのと 同様に簡単です。シェルプロンプトで以下のようにコマンド を入力します。

rpm -Uvh foo-1.0-1.i386.rpm

インストールが正常に進行すると、以下のような表示がでます。

Preparing...                ########################################### [100%]
   1:foo                    ########################################### [100%]

RPMはパッケージ名を出力し、 パッケージのインストール状況をシャープ記号を使って 表示します。

RPMバージョン4.1から始まったことですが、パッケージの 署名はパッケージのインストール時やアップグレード時に チェックされます。署名の検証が失敗に終れば、 次のようなエラーが表示されます。

error: V3 DSA signature: BAD, key ID 0352860f

ヘッダのみの新しい署名なら、次のような エラーメッセージが表示されます。

error: Header V3 DSA signature: BAD, key ID 0352860f

署名を検証するための適切なキーを持っていない場合は、 メッセージは以下のようなNOKEY を含みます。

warning: V3 DSA signature: NOKEY, key ID 0352860f

パッケージ署名のチェックに関する詳細情報は、 項32.3で参照してください。

注意注意
 

カーネルパッケージをインストールしている場合は、 代わりにrpm -ivhを使用する必要が あります。詳細は第30章を参照して ください。

パッケージのインストールは簡単にできるように設計 されています。しかし、時にはエラーが出る可能性は 否定できません。

32.2.2.1. すでにインストールされているパッケージ

同じバージョンのパッケージがすでにインストール されている場合は、以下のメッセージが表示されます。

Preparing...                ########################################### [100%]
package foo-1.0-1 is already installed

どうしてもパッケージをインストールする必要があり、 それがインストールされているものと同じバージョンである 場合は、--replacepkgsオプションを 使用することができます。このオプションは、 RPMに対しエラーを無視するよう指示するものです。

rpm -ivh --replacepkgs foo-1.0-1.i386.rpm

このオプションは、RPM からインストールされた ファイルが削除された場合や、RPM からオリジナルの 設定ファイルをインストールしたい場合に便利です。

32.2.2.2. ファイルの競合

別のパッケージや同じパッケージの古いバージョン によってインストールされたファイルを含むパッケージを インストールしようとすると、以下のメッセージが表示 されます。

Preparing...                ########################################### [100%]
file /usr/bin/foo from install of foo-1.0-1 conflicts with file from package bar-2.0.20

RPM にこのエラーを無視するよう指示するには、 --replacefilesオプションを 使用します。

rpm -ivh --replacefiles foo-1.0-1.i386.rpm

32.2.2.3. 未解決の依存

RPM パッケージは他のパッケージに「依存する」こと があります。つまり、正しく動作するために他のパッケージ のインストールが必要な場合があります。未解決の依存関係 を持つパッケージをインストールしようとすると、以下の メッセージが表示されます。

Preparing...                ########################################### [100%]
error: Failed dependencies:
        bar.so.2 is needed by foo-1.0-1
    Suggested resolutions:
        bar-2.0.20-3.i386.rpm

Red Hat LinuxのCDセットからインストールしている場合は、通常、依存関係を 解決するパッケージを提案してきます。このパッケージを Red Hat Linux CD-ROMから、または、Red Hat FTPサイト(またはミラー)から 見つけて、それを次のようにコマンドに追加します。

rpm -ivh foo-1.0-1.i386.rpm bar-2.0.20-3.i386.rpm

両方のパッケージのインストールが正常に行なわれると、 以下の表示がでます。

Preparing...                ########################################### [100%]
   1:foo                    ########################################### [ 50%]
   2:bar                    ########################################### [100%]

もし、プログラムが依存関係を解消するパッケージを 提案してこない場合は、--redhatprovides オプションを試して、どのパッケージが 必要なファイルを含んでいるか判定します。 このオプションを実行するには、rpmdb-redhat パッケージをインストールしている必要が あります。

rpm -q --redhatprovides bar.so.2

bar.so.2を含むパッケージが rpmdb-redhatパッケージの インストール済みデータベースにある場合、その パッケージ名が表示されます。

bar-2.0.20-3.i386.rpm

とにかくインストールをそのまま強制したい場合 (恐らくパッケージは正常に作動しないので良くない方法)、 --nodepsオプションを使用します。

32.2.3. アンインストール

パッケージのアンインストールは、インストールと 同様、簡単に実行できます。シェルプロンプトで以下の コマンドを入力します。

rpm -e foo

注意注意
 

アンインストールするため先のコマンドで使用した のは、パッケージの名前である fooであって、オリジナルパッケージ のファイル名、 foo-1.0-1.i386.rpmではないことに注意して ください。パッケージをアンインストールするには、 fooの部分を実際のオリジナル パッケージのパッケージ名に置き換える必要があります。

削除しようとしているパッケージに別のインストール されているパッケージが依存している場合、アンインストール 時に依存関係エラーが発生することがあります。 たとえば、

Preparing...                ########################################### [100%]
error: removing these packages would break dependencies:
        foo is needed by  bar-2.0.20-3.i386.rpm

RPM にこのエラーを無視させ、強制的にパッケージを アンインストールするには、(おそらく依存している パッケージが正しく動作しなくなるのであまりお勧め できません)、--nodepsオプションを 使用します。

32.2.4. アップグレード

パッケージのアップグレードはインストールと 似ています。シェルプロンプトで以下のコマンドを 入力します。

rpm -Uvh foo-2.0-1.i386.rpm

上記の内容には示されていませんが、古いバージョンの fooパッケージもすべてRPM により 自動的にアンインストールされました。実際には、 常に-Uを使用してパッケージを インストールすれば、古いバージョンのパッケージが インストールされていなくても正しく動作するため、 その方が好ましいかもしれません。

RPM は設定ファイルを使用したパッケージの インテリジェントなアップグレードを行うので、 以下のようなメッセージが表示されることもあります。

saving /etc/foo.conf as /etc/foo.conf.rpmsave

このメッセージは、設定ファイルに加えられた変更内容が、 パッケージ内の新しい設定ファイルと「上位互換性」を 持たない可能性があるため、RPM が元のファイルを保存して から新しいファイルをインストールしたことを意味して います。できる限り早期に2つのファイル間の違いを調査し、 解決することで、引き続きシステムが正しく動作すること を確認してください。

アップグレードは、実際にはアンインストールと インストールを組み合わせた作業になります。このため、 RPM がアップグレードを実行している間、両方行のエラーが 発生する可能性があります。そしてもう1つ別のエラーが 発生します。RPM が古いバージョン 番号のパッケージへアップグレードが行われようとしている と判断すると、以下のようなメッセージが表示されます。

package foo-2.0-1 (which is newer than foo-1.0-1) is already installed

RPM に「アップグレード」を強行させるには、 --oldpackageオプションを使用します。

rpm -Uvh --oldpackage foo-1.0-1.i386.rpm

32.2.5. freshenの実行

パッケージへのfreshenの実行はアップグレード と似ています。シェルプロンプトで以下のコマンドを入力 します。

rpm -Fvh foo-1.2-1.i386.rpm

RPM のfreshenオプションにより、コマンドラインで 指定されたパッケージのバージョンと、すでにシステムに インストールされているパッケージのバージョンが照合 されます。インストールされているパッケージよりも 新しいバージョンのパッケージに対してRPM のfreshen オプションが実行されると、そのパッケージは新しい バージョンへアップグレードされます。ただし、同じ名前 でインストールされているパッケージが存在しない場合は、 RPM のfreshenオプションによるパッケージのインストール は実行されません。この点が、RPM のアップグレード オプションと異なります。アップグレードでは、古い バージョンのパッケージがインストールされているか どうかに関係なくパッケージが必ず インストールされます。

RPM のfreshenオプションは、単一のパッケージに対しても 複数のパッケージに対しても使用できます。これは、 多数のパッケージをダウンロードした後で、システムに インストールされているパッケージのみをアップグレード したい場合に、freshenを実行します。freshenを使用する 場合、RPMの使用前にダウンロードした複数のパッケージの 中から不要なパッケージを削除する必要はありません。

この場合、以下のコマンドを発行することができます。

rpm -Fvh *.rpm

RPMはすでにインストールされているパッケージのみ 自動的にアップグレードします。

32.2.6. queryの実行

インストール済みパッケージのデータベースに対する queryを行うには、rpm -qコマンド を使用します。rpm -q fooコマンドは、 インストール済みパッケージfooのパッケージ名、 バージョン、リリース番号を出力します。

foo-2.0-1

注意注意
 

パッケージの名前 fooが使用されていることに注意してください。 パッケージについてqueryを行うには、foo の部分を実際のパッケージ名に置き換える 必要があります。

パッケージ名を指定する代わりに、-q コマンドに以下のオプションを使用してqueryを 行うパッケージ(群)を指定することができます。 これらのオプションをパッケージ指定オプション と呼びます。

queryを行なったパッケージに関して表示する情報を 指定する方法がたくさんあります。検索を行う情報のタイプ を選択するには、以下のオプションを使用します。これらの オプションを情報選択オプションと 呼びます。

ファイルの一覧を表示するオプションについては、 コマンドに-vを追加して、 その一覧を使い慣れたls -l形式で 表示させることができます。

32.2.7. 検証

パッケージの検証では、パッケージからインストール されたファイルに関する情報と、元のパッケージに含まれる ファイルに関する情報が同一かどうか調べます。 検証により、各ファイルのサイズ、MD5チェックサム、 権限、タイプ、所有者、グループを始め、さまざまなこと が比較されます。

コマンドrpm -Vは、パッケージ の検証を行います。queryの説明で示した パッケージ選択オプションを使用して、 検証したいパッケージを指定することができます。 簡単な使用法としてはrpm -V foo というものがあります。これを実行すると、パッケージfoo に含まれるすべてのファイルが、それがインストールされた ときの状態と同じであるかどうかが検証されます。 例えば、

すべてが正常に検証された場合は何も出力されません。 何らかの矛盾が見つかった場合はその内容が表示されます。 出力フォーマットは、8個の文字列(c は設定ファイルを示す)とファイル名です。 8個の各文字は、ファイルの1つの属性とRPM データベースに 記録されたその属性の値とを比較した結果を示します。 .(ピリオド)がひとつは、 テストに合格したことを示します。以下の文字はそれぞれ 何らかのテストで不合格になったことを示しています。

何らかが出力された場合は、パッケージを削除する のか、再インストールするのか、あるいは別の方法で問題 を修正するのかを熟慮の上判断してください。