RPM (Red Hat Package Manager) を使用したソフトウェアの保守
RPM は、個々のソフトウェア パッケージのビルド、インストール、クエリ、検証、更新、およびアンインストールに使用できる強力なソフトウェア マネージャーです。 RPM パッケージは、ファイルのアーカイブと、名前、バージョン、説明、他の RPM パッケージへの依存関係に関する情報などのパッケージ情報で構成されます。
RPM は、Red Hat 固有のツール以上のものです。 Ubuntu や SuSE など、他の多くの最近のディストリビューションも RPM を使用しています。 RPM を使用する利点は次のとおりです。
- ソフトウェアの配布、インストール、アップグレード、削除の簡素化
- 保証:
- 必須ソフトウェアがシステムにインストールされている
- 必須ソフトウェアのバージョンは互換性を維持します。
- ローカルで変更された構成ファイルは、RPM の更新時にクロブされません。
- パッケージが後で削除された場合、ローカルで変更された構成ファイルは「.rpmsave」サフィックスで保存されます。
- インストールされたソフトウェアが変更、修正、破損、または変更されていないことを証明できます。
RPM は、インストールされたパッケージに関する情報を「/var/lib/rpm」の下に保持します 」ディレクトリ。
RPM ツールのコンポーネントは次のとおりです。
- 個々の RPM から収集された、システムにインストールされているすべてのソフトウェアに関する情報を含むカスタム データベース。
- 「/bin/rpm」実行可能ファイル
- 利用可能な RPM パッケージのインターネット アクセス可能なリポジトリ
RPM パッケージの種類
RPM パッケージには 2 つのカテゴリがあります:ソース およびバイナリ .
ファイル名が文字列「.src.rpm」で終わるため、ソース RPM は常に認識できます。 」。ソース RPM には、元のプログラム ソース コード ファイルだけでなく、コードの自動再コンパイル、自動インストール、および自動削除を可能にするスクリプトも含まれています。ソース RPM にはエンドユーザーの実行可能ファイルはありません。通常、ソース RPM に関心があるのは開発者だけです。
バイナリー RPM には、RPM のエンドユーザー構成要素が含まれています。バイナリ RPM ファイル名は、コンテンツのホスト アーキテクチャを識別します。たとえば、バイナリ RPM ファイル:
bash-3.1-16.1.x86_64.rpm
64 ビット Intel X86 アーキテクチャ CPU でのみ使用可能なファイルが含まれています。その他の一般的なアーキテクチャ値には、32 ビット Intel ホストの「i386」が含まれます。一部のバイナリ RPM は、ファイルが任意のホストで機能するため、任意の CPU アーキテクチャにインストールできます。これらの「.noarch.rpm」パッケージの例は、世界のタイムゾーンに関する情報を含む「tzdata」RPM です。システムを最新バージョンのパッケージで更新するには、最新のバイナリ RPM が必要です。
RPM 命名スキーム
各 RPM パッケージは、1 つのファイルに含まれています。ファイル名には、パッケージの内容を完全に識別するためのいくつかのフィールドがあります。 RPM ツール自体はファイル名自体に依存しませんが、適切なパッケージを識別またはダウンロードするのに役立つファイル名の規則を理解する必要があります。以下は RPM ファイル名の例です:
bash-3.1-16.1.x86_64.rpm
この RPM は BASH シェル (「/bin/bash」) 用です。ファイル名はいくつかの部分で構成されています:
[name]-[version]-[release].[arch].rpm
ここで:
- [名前] プログラムまたはパッケージの名前です。 [名前] は通常、プログラムの作成者によって割り当てられます。この例では、開発者は面白いと思われる理由から、製品に「bash」という名前を付けることにしました。
- バージョン] この RPM に含まれるソフトウェアのエディションを識別します。 [バージョン] 番号は、プログラムの作成者によって割り当てられます。
番号を使用すると、RPM の生成に使用された作成者のソースのバージョンを特定できます。 - [リリース] 著者のソースファイルのバージョンではなく、RPM ファイル自体のエディション番号を提供します。更新された RPM は、作成者のオリジナル ソフトウェアのパッチ バージョンを提供するために発行される場合があります。パッチは元の開発者から提供されたものである必要はないため、RPM [リリース] は [バージョン] ではなく増分されます。
- [アーチ] RPM の内容を記述し、このファイルに製品ソース (「.src.rpm」)、アーキテクチャに依存しないファイル (「.noarch.rpm」)、または特定のホストにのみインストールできるファイルが含まれているかどうかを示します。タイプ (「.sh.rpm」は、STRONGHOLD 組み込みプロセッサでのみ機能します)。
RPM バージョンについて
RPM の [バージョン] および [リリース] フィールドは必ずしも厳密に数値であるとは限らず、通常の数字以外の文字が含まれる場合があります。同じパッケージのバージョン「10」と「10a」の両方が見られるのはよくあることです。最新バージョンを選択するのが難しい場合があります。 RPM 自体が内部でバージョン番号とリリース番号を比較する方法は次のとおりです。
1. [name] プレフィックスと「.[arch].rpm」サフィックスを削除します。たとえば、
「bash-3.1-16.1.x86_64.rpm」は「3.1-16.1」になり、「bash-3.1-16.5a.1.x86_64.rpm」は「3.1-16.5a.1」になります。 /P>
2. 数字が現れるまで、残りの文字列を左から右に 1 文字ずつ比較します。文字が異なる場合は、照合シーケンスで後に来る文字がより新しい RPM です。
3. 数字が検出されたら、一連の数字全体を 1 つの 2 進数に変換します。この例では、2 つの文字「16」が組み合わされて 16 という値になります。結果のバイナリ値が比較され、値が大きいほど新しい RPM になります。したがって、[バージョン] が「0010」の RPM は、[バージョン] が「9」の RPM よりも新しいものです。
ステップ 2 と 3 は、違いが生じるまで必要に応じて繰り返されます。
ファイルのインストールと削除
注意 :通常、一度にインストールできる RPM の以降のバージョンは通常、「-U」を使用してインストールされます 」 (更新) 「-i」の代わりに RPM 関数 」 RPM機能。唯一の RPM ルールの一般的な例外は、カーネル RPM です。通常、システムには複数のバージョンのカーネルがインストールされています。 RPM には、複数のバージョンがインストールされている可能性がある RPM のリストがあります。複数のバージョンがインストールされているときに 1 つのバージョンを削除するには、パッケージ名とバージョンを完全に指定する必要があります。
x86_64 アーキテクチャでは、32 ビットと 64 ビットの両方のアプリケーションをサポートするために、32 ビットの「.i386」と 64 ビットの「.x86_64」RPM パッケージの両方をインストールするのが一般的です。通常、RPM はクエリでパッケージのアーキテクチャを表示しませんが、手動で表示できます。
インストールと削除
# rpm -i --install (install new RPM; error if already installed) # rpm -U --upgrade (delete existing RPM, if any; install new) # rpm -F --freshen (update RPM only if package already installed) # rpm -e --erase (remove, delete, expunge)
共通オプション
出力:-v (冗長 – ファイル名)、-h (ハッシュ)
前提条件:–nodeps、–replacefiles、–force (注意してください!!!)
再配置:–excludepath、–prefix、–relocate、–badreloc、–root
URL サポート:ftp、http
例:
# rpm -ivh binutils-2.11.90.0.8-12.i386.rpm # rpm -Uvh finger-0.17-9-i386.rpm # rpm -Fvh ftp://updates.redhat.com/current/i386/*.rpm # rpm -e diffutils # rpm -e kernel-enterprise-2.4.9-e.12
ヒント :「-U」オプションを使用して新しいカーネル RPM をインストールすることは絶対にしないでください。 「-U」更新機能は、最初に現在の RPM をシステムから削除してから、新しい RPM のインストールを試みます。新しい RPM のインストールを妨げる問題があると、システムは起動できなくなります。これは望ましくないため、常に「-i」スイッチを使用してカーネル RPM をインストールしてください。
クエリ (パッケージおよび/または情報)
インストールされているパッケージに関する情報を取得するには、クエリを使用します。インストールされているすべてのパッケージに対してクエリを実行することも、単一のインストールされたパッケージに対してクエリを実行することもできます。また、特定のファイルを提供する RPM を見つけることもできます。
# rpm -q [packages] [information] # rpm -qa (all installed packages) # rpm -q package_name # rpm -qf (filename) # rpm -qp (package filename)
情報
default (パッケージ名)
-i :一般情報
-l :ファイル一覧
例:
# rpm -qa # rpm -q kernel -i (information) # rpm -q kernel -l (files contained in package) # rpm -q kernel --requires (prereqs) # rpm -q kernel --provides (capabilities provided by package) # rpm -q kernel --scripts (scripts run during installation and removal) # rpm -q kernel --changelog (revision history) # rpm -q kernel -queryformat format (rpm --querytags for list of options)
ヒント :正確な名前がわからない場合に特定の RPM パッケージを検索する場合、次のようなコマンド パイプライン:
$ rpm -qa | grep foo
が一般的に使用されます。 RPM ツールの新しいバージョンでは、これを次のように簡潔に行うことができます:
$ rpm -qa '*foo*'
クエリ – 検証 (ファイル)
RPM データベースには、RPM によってインストールされたすべてのファイルに関する多くの属性が含まれています。パッケージのインストール時に RPM によってカタログ化された情報に対して、ファイルの現在のステータスを確認できます。
# rpm -V package_name # rpm -Va (verify all) # rpm -Vf (filename) # rpm -Vp (package filename)注意 :多くの Linux ディストリビューションには、特別な情報をアプリケーションのプログラム ファイルに直接追加することで、共有ライブラリ (ほとんどのアプリケーションは少なくとも 1 つの共有ライブラリを使用し、場合によっては数十の共有ライブラリを使用します) を使用してアプリケーションを起動するのに必要な時間を短縮しようとする「プレリンク」RPM が含まれています。
この情報を追加すると、アプリケーションの起動が速くなりますが、ファイルの変更により、RPM データベース内のほとんどのファイル属性 (最終ファイル変更日、ファイル サイズ、ファイルの MD5 チェックサムなど) が無効になります。
クエリ – 検証 (パッケージ)
# rpm -import /mnt/cdrom/RPM-GPG-KEY # rpm -q gpg-pubkey # rpm --checksig m4-1.4.1-11.i386.rpm
例:
# rpm -qf /path/filename (what package owns filename) # rpm -qf /path/filename -i (what does it do) # rpm -qp m4-1.4.1-11.i386.rpm -l (files in m4) # rpm -qp m4-1.4.1-11.i386.rpm --requires (prereqs needed to install m4) # rpm -q --whatprovides glibc.so (what package provides requisite library)
RPM データベースを修復する
RPM ツールは、独自のカスタム データベース実装を使用して情報を格納します。場合によっては、そのデータベースが破損することがあります。症状には、インストールされている RPM パッケージが見つからないという主張が含まれます。または、RPM を更新しようとするとハングアップします。 RPM データベースがハングまたは破損している場合は、これらのコマンドを使用して修復を試みることができます。このプロセスの動作は保証されていません。
これらの手順では、スーパーユーザー権限 (別名「root」) でログインする必要があります。コマンドはルート ターミナル ウィンドウに直接コピー アンド ペーストできます。
1. システムで実行中の RPM プロセスが残っていないことを確認します。それらを識別するには、ps コマンドを使用します。 kill コマンドを使用して、見つけた「rpm」プロセスをすべて終了します。 「kill -9」が必要な場合があります。
2. RPM が使用するロック ファイルを削除します。
# rm -f /var/lib/rpm/__db*
3. 「rpm」コマンドがハングする場合は、もう一度試してください。それが機能する場合は、終了です。そうでない場合は、手順 1 と 2 をもう一度実行します。次に、次のステップに進みます。
4. RPM データベースのバックアップを作成します:
# cd /var/lib # mkdir rpm-backup # rsync -av ./rpm/. ./rpm-backup/.
5. RPM データベースを再構築します:
# rpm -vv --rebuilddb > /tmp/rpmrebuilddb.log 2>&1
6. 失敗した RPM コマンドを再試行してください。