GNU/Linux >> Linux の 問題 >  >> Linux

Linux で RPM パッケージをインストール/削除/クエリ/更新する方法 (チート シート)

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 バージョンについて

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 の または は 1 つだけです。

以降のバージョンは通常、「-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 コマンドを再試行してください。


Linux
  1. rpmパッケージをビルドする方法

  2. LinuxMint20でSnapを有効にしてSnapパッケージをインストールする方法

  3. Arch Linuxでソフトウェアをインストール、削除、更新する方法

  1. Linuxで特定のリポジトリからパッケージをインストールする方法

  2. Ansibleプレイブックを使用してソフトウェアパッケージをインストールする方法

  3. UbuntuにRPMパッケージをインストールする方法

  1. RHEL 8 / CentOS8Linuxシステムにパッケージをインストールする方法

  2. RHEL8にソフトウェアをインストールする方法

  3. パッケージを照会、インストール、削除、およびアップグレードするための RPM コマンドの例