RPM には、次の5つの基本的作動モードがあります(パッケージの 構築はカウントしません)。インストール、アンインストール、 アップグレード、照会、検証の5つです。このセクションでは、 各モードの概要を説明します。詳細な説明やオプションについては rpm --helpをご覧ください。RPM の詳細に ついては項32.5を 参照してください。
RPM を使用する前に、それがどこにあるかを調べる必要が あります。インターネットを検索すると数多くのRPM リポジトリ が見つかりますが、Red Hat製のRPM パッケージは以下の場所に あります。
Red Hat Linux CD-ROM
Red HatのErrataページ http://www.redhat.com/apps/support/errata/
Red HatのFTPミラーサイト http://www.redhat.com/download/mirror.html
Red Hat ネットワーク — Red Hat ネットワークの詳細については、 第34章を参照してください。
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章を参照して ください。 |
パッケージのインストールは簡単にできるように設計 されています。しかし、時にはエラーが出る可能性は 否定できません。
同じバージョンのパッケージがすでにインストール されている場合は、以下のメッセージが表示されます。
Preparing... ########################################### [100%] package foo-1.0-1 is already installed |
どうしてもパッケージをインストールする必要があり、 それがインストールされているものと同じバージョンである 場合は、--replacepkgsオプションを 使用することができます。このオプションは、 RPMに対しエラーを無視するよう指示するものです。
rpm -ivh --replacepkgs foo-1.0-1.i386.rpm |
このオプションは、RPM からインストールされた ファイルが削除された場合や、RPM からオリジナルの 設定ファイルをインストールしたい場合に便利です。
別のパッケージや同じパッケージの古いバージョン によってインストールされたファイルを含むパッケージを インストールしようとすると、以下のメッセージが表示 されます。
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 |
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オプションを使用します。
パッケージのアンインストールは、インストールと 同様、簡単に実行できます。シェルプロンプトで以下の コマンドを入力します。
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オプションを 使用します。
パッケージのアップグレードはインストールと 似ています。シェルプロンプトで以下のコマンドを 入力します。
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 |
パッケージへの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はすでにインストールされているパッケージのみ 自動的にアップグレードします。
インストール済みパッケージのデータベースに対する queryを行うには、rpm -qコマンド を使用します。rpm -q fooコマンドは、 インストール済みパッケージfooのパッケージ名、 バージョン、リリース番号を出力します。
foo-2.0-1 |
注意 | |
---|---|
パッケージの名前 fooが使用されていることに注意してください。 パッケージについてqueryを行うには、foo の部分を実際のパッケージ名に置き換える 必要があります。 |
パッケージ名を指定する代わりに、-q コマンドに以下のオプションを使用してqueryを 行うパッケージ(群)を指定することができます。 これらのオプションをパッケージ指定オプション と呼びます。
-aコマンドは、現時点で インストールされているすべてのパッケージについて queryを実行します。
-f <file>は、 <file> が含まれるパッケージについてqueryを実行 します。ファイルを指定するときは、そのファイルの フルパスを指定する必要があります(例、 /usr/bin/ls)。
-p <packagefile> は、<packagefile> パッケージについてqueryを実行 します。
queryを行なったパッケージに関して表示する情報を 指定する方法がたくさんあります。検索を行う情報のタイプ を選択するには、以下のオプションを使用します。これらの オプションを情報選択オプションと 呼びます。
-iコマンドは、 パッケージ名、説明、リリース、サイズ、構築日、 インストール日、ベンダーなど多様なパッケージ情報を 表示します。
-lコマンドは、 パッケージに含まれるファイルの一覧を表示します。
-sコマンドは、 パッケージに含まれるすべてのファイルの状態を表示します。
-dコマンドは、 ドキュメント(manページ、infoページ、READMEなど)として マークが付けられたファイルの一覧を表示します。
-cは、 設定ファイルとしてマークが付けられたファイルの一覧を 表示します。これは、パッケージをシステムに適合させる ために、ユーザーがインストール後に変更を加えるファイル です(例、sendmail.cf、 passwd、inittab など)。
ファイルの一覧を表示するオプションについては、 コマンドに-vを追加して、 その一覧を使い慣れたls -l形式で 表示させることができます。
パッケージの検証では、パッケージからインストール されたファイルに関する情報と、元のパッケージに含まれる ファイルに関する情報が同一かどうか調べます。 検証により、各ファイルのサイズ、MD5チェックサム、 権限、タイプ、所有者、グループを始め、さまざまなこと が比較されます。
コマンドrpm -Vは、パッケージ の検証を行います。queryの説明で示した パッケージ選択オプションを使用して、 検証したいパッケージを指定することができます。 簡単な使用法としてはrpm -V foo というものがあります。これを実行すると、パッケージfoo に含まれるすべてのファイルが、それがインストールされた ときの状態と同じであるかどうかが検証されます。 例えば、
特定のファイルを含むパッケージを検証するには、
rpm -Vf /bin/vi |
インストールされているすべてのパッケージを 検証するには、
rpm -Va |
インストールされているパッケージと、 RPM パッケージファイルとを検証するには、
rpm -Vp foo-1.0-1.i386.rpm |
RPM データベースが破損した疑いがある場合に、 このコマンドが役立ちます。
すべてが正常に検証された場合は何も出力されません。 何らかの矛盾が見つかった場合はその内容が表示されます。 出力フォーマットは、8個の文字列(c は設定ファイルを示す)とファイル名です。 8個の各文字は、ファイルの1つの属性とRPM データベースに 記録されたその属性の値とを比較した結果を示します。 .(ピリオド)がひとつは、 テストに合格したことを示します。以下の文字はそれぞれ 何らかのテストで不合格になったことを示しています。
5 —MD5チェックサム
S —ファイルサイズ
L —シンボリックリンク
T —ファイル修正時刻
D —デバイス
U —ユーザー
G —グループ
M —モード(権限とファイルタイプを含む)
? —読み込み不可ファイル
何らかが出力された場合は、パッケージを削除する のか、再インストールするのか、あるいは別の方法で問題 を修正するのかを熟慮の上判断してください。