RPMには、インストール、アンインストール、アップグレード、問い合わせ、検証の5つの基本操作モードがあります(パッケージの作成は含みません)。このセクションでは、各モードについて概説します。詳細な説明およびオプションについてはrpm --helpを実行してください。またRPMの詳細についてはthe section called その他の情報を参照してください。
RPMを使用する前に、それがどこにあるかを調べる必要があります。インターネットを検索すると数多くのRPMリポジトリが見つかりますが、Red Hat製のRPMパッケージは以下の場所にあります。
オフィシャルRed Hat Linux CD-ROM
Red HatのErrataページ (http://www.redhat.com/support/errata/http://www.jp.redhat.com/support/errata/)
Red HatのFTPミラーサイト( http://www.redhat.com/mirrors.html)
Red Hat Network — Red Hat Networkの詳細についてはChapter 19を参照してください。
RPMパッケージには通常foo-1.0-1.i386.rpmというようなファイル名が付けられています。このファイル名は、パッケージ名(foo)、バージョン(1.0)、リリース(1)、アーキテクチャ(i386)で構成されています。パッケージをインストールするには、シェルプロンプトで以下のコマンドを入力するだけです。
# rpm -ivh foo-1.0-1.i386.rpm foo #################################### # |
見てわかるように、RPMはパッケージ名を出力し、パッケージのインストール状況をシャープ記号を使って表示します。
注意 | |
---|---|
通常RPMパッケージをインストールするにはrpm -ivh foo-1.0-1.i386.rpmのようなコマンドが使用されますが、代わりにrpm -Uvh foo-1.0-1.i386.rpmを使用することもできます。-Uは通常パッケージをアップグレードするために使用されますが、新しいパッケージをインストールすることもできます。RPMの-Uオプションの使用方法の詳細については、the section called アップグレードを参照してください。 |
パッケージのインストールは簡単に実行できるよう設計されていますが、エラーが発生することもあります。
同じバージョンのパッケージがすでにインストールされている場合は、以下のメッセージが表示されます。
# rpm -ivh foo-1.0-1.i386.rpm パッケージfoo-1.0-はすでにインストールされています # |
どうしてもパッケージをインストールする必要があり、それがインストール済みのものと同じバージョンである場合は、--replacepkgsオプションを使用することができます。このオプションは、RPMに対しエラーを無視するよう指示するものです。
# rpm -ivh --replacepkgs foo-1.0-1.i386.rpm foo #################################### # |
このオプションは、RPMからインストールされたファイルが削除された場合や、RPMからオリジナルの設定ファイルをインストールしたい場合に便利です。
別のパッケージや同じパッケージの古いバージョンによってインストールされたファイルを含むパッケージをインストールしようとすると、以下のメッセージが表示されます。
# rpm -ivh foo-1.0-1.i386.rpm 依存性の欠如: bar-1.0-1と競合します # |
RPMにこのエラーを無視するよう指示するには、--replacefilesオプションを使用します。
# rpm -ivh --replacefiles foo-1.0-1.i386.rpm foo #################################### # |
RPMパッケージは他のパッケージに「依存する」ことができます。つまり、適切な動作のために他のパッケージのインストールが必要な場合があります。未解決の依存関係を持つパッケージをインストールしようとすると、以下のメッセージが表示されます。
# rpm -ivh foo-1.0-1.i386.rpm 依存性の欠如: barはfoo-1.0-1に必要とされています # |
このエラーを処理するには、要求されたパッケージをインストールしなければなりません。インストールを強行したい場合(おそらくそのパッケージは正しく動作しないのでお勧めできませんが)は、--nodepsオプションを使用します。
パッケージのアンインストールは、インストールと同様簡単に実行できます。shellプロンプトで以下のコマンドを入力してください。
# rpm -e foo # |
注意 | |
---|---|
オリジナルパッケージのファイルの名前foo-1.0-1.i386.rpmではなく、パッケージの名前fooが使用されていることに注意してください。パッケージをアンインストールするには、fooの部分を実際のオリジナルパッケージのパッケージ名に置き換える必要があります。 |
削除しようとしているパッケージに別のインストール済みパッケージが依存している場合、アンインストール時に依存関係エラーが発生することがあります。例を見てみましょう。
# rpm -e foo エラー: これらのパッケージを削除すると依存性を破壊します: fooは bar-1.0-1 に必要とされています # |
RPMにこのエラーを無視させ、強制的にパッケージをアンインストールするには(おそらく依存しているパッケージが正しく動作しなくなるのであまりお勧めできません)、--nodepsオプションを使用します。
パッケージのアップグレードはインストールと似ています。shellプロンプトで以下のコマンドを入力してください。
# rpm -Uvh foo-2.0-1.i386.rpm foo #################################### # |
上記の内容には示されていませんが、古いバージョンのfooパッケージもすべてRPMにより自動的にアンインストールされました。実際には、常に-Uを使用してパッケージをインストールすれば、古いバージョンのパッケージがインストールされていなくても正しく動作するため、その方が好ましいかもしれません。
RPMは設定ファイルを使用したパッケージのインテリジェントなアップグレードを行うので、以下のようなメッセージが表示されることもあります。
警告: /etc/foo.conf は /etc/foo.conf.rpmsave として保存されます |
このメッセージは、設定ファイルに加えられた変更内容が、パッケージ内の新しい設定ファイルと「上位互換性」を持たない可能性があるため、RPMが元のファイルを保存してから新しいファイルをインストールしたことを意味しています。できる限り早期に2つのファイルの間の違いを調査、解決することで、引き続きシステムが正しく動作することを確認する必要があります。
アップグレードは、実際にはアンインストールとインストールを組み合わせた作業になります。このため、RPMがアップグレードを実行している間、両方のエラーが発生する可能性があります。そしてもう1つ別のエラーが発生します。RPMが古いバージョン番号のパッケージへのアップグレードが行われようとしていることを認識すると、以下のようなメッセージが表示されます。
# rpm -Uvh foo-1.0-1.i386.rpm foo package foo-2.0-1 (which is newer) is already installed # |
RPMに「アップグレード」を強行させるには、--oldpackageオプションを使用します。
# rpm -Uvh --oldpackage foo-1.0-1.i386.rpm foo #################################### # |
パッケージを最新の状態にする作業はアップグレードと似ています。shellプロンプトで以下のコマンドを入力します。
# rpm -Fvh foo-1.2-1.i386.rpm foo #################################### # |
RPMの-F(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 # |
注意 | |
---|---|
パッケージの名前fooが使用されていることに注意してください。パッケージについて問い合わせを行うには、fooの部分を実際のパッケージ名に置き換える必要があります。 |
問い合わせを行うパッケージ(群)を指定するために、パッケージ名を指定する代わりに、-qコマンドで以下のオプションを使用することができます。これらのオプションをパッケージ指定オプションと呼びます。
-aを指定すると、現時点でインストール済みのすべてのパッケージについて問い合わせが実行されます。
-f<file>を指定すると、<file>が含まれるパッケージについて問い合わせが実行されます。ファイルを指定するときは、そのファイルの絶対パスを指定する必要があります(たとえば/usr/bin/ls)。
-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個の各文字は、ファイルの1つの属性とRPMデータベースに記録されたその属性の値とを比較した結果を示します。単一の.(ピリオド)はテストに合格したことを意味します。以下の文字はそれぞれ何らかのテストで不合格になったことを示しています。
5 — MD5チェックサム
S — ファイルサイズ
L — シンボリックリンク
T — ファイル修正時刻
D — デバイス
U — ユーザー
G — グループ
M — モード(権限とファイルタイプを含む)
? — 読み込み不可ファイル
何らかの内容が出力された場合は、パッケージを削除するのか、再インストールするのか、あるいは別の方法で問題を修正するのかを熟慮の上判断してください。