The Geek Diary

RPM (Red Hat Package Manager) を使ったソフトウェアのメンテナンス

RPMは、個々のソフトウェアパッケージの構築、インストール、照会、検証、更新、アンインストールに使用できる強力なソフトウェア管理ツールです。 RPM パッケージは、ファイルのアーカイブと、名前、バージョン、説明、および他の RPM パッケージへの依存に関する情報などのパッケージ情報で構成されています。

RPM は Red Hat 固有のツールではありません。Ubuntu や SuSE など、他の多くの最新ディストリビューションでも RPM が使用されています。 RPM を使用する利点は次のとおりです:

  • ソフトウェアの配布、インストール、アップグレード、および削除の簡略化
  • 次のことを保証すること。
    • 前提条件となるソフトウェアがシステムにインストールされる
    • 前提条件となるソフトウェアのバージョンに互換性がある
    • ローカルで変更した設定ファイルは、RPM が更新されてもクローブされない
    • locally-modified configuration files are saved with a “.RPM” (ローカライズされた設定ファイル).
  • インストールされたソフトウェアが変更、修正、破損、またはいかなる方法でも変更されていないことを証明することが可能です。

    RPM ツールのコンポーネントは次のとおりです:

    • 個々の RPM から収集した、システムにインストールされたすべてのソフトウェアに関する情報を含むカスタム データベースです
    • “/bin/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”) のためのものです。

      --..rpm

      ここで、

        はプログラムまたはパッケージの名前です。 これは通常、プログラムの作者によって割り当てられます。 この例では、開発者が面白そうだからということで「bash」と名付けました。

      • version は、この RPM に含まれるソフトウェアのエディションを識別します。 この番号はプログラムの作者によって割り当てられます。 この番号を使用すると、RPM を生成するために作者のソースのどのバージョンが使用されたかを判断できます。
      • は、作者のソース ファイルのバージョンではなく、RPM ファイル自体のエディション番号を提供します。 アップデートされた RPM は、作者のオリジナル ソフトウェアにパッチを適用したバージョンを提供するために発行される場合があります。 パッチは元の開発者から提供されたものである必要はないので、.li>
      • は RPM の内容を記述し、このファイルが製品のソース (「.src.rpm」)、アーキテクチャ非依存のファイル (「.noarch.rpm」)、または特定のホスト タイプにのみインストールされるファイル (「.src.rpm」) が含まれているかどうかを知らせます。sh.rpm” は STRONGHOLD 組み込みプロセッサでのみ動作します)。
      注意: The は原作者によって管理され、The は RPM を構築した人によって管理されます。

      RPM バージョンの理解

      RPM およびフィールドは必ずしも厳密に数字ではなく、通常の数字以外の文字を含むこともあります。 同じパッケージのバージョンとして「10」と「10a」の両方を目にすることはよくあります。 最新のバージョンを選ぶのが厄介なこともあります。 以下は、RPM 自体がバージョンとリリース番号を内部的に比較する方法です。 接頭辞と “..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”

      2. 残りの文字を 1 桁ずつ、左から右へと比較し、1 文字になったら、その文字に置き換えます。 文字が異なる場合、照合順序で後に来る方の文字がより新しい RPM です。

      3.数字が見つかったら、一連の数字全体を単一の 2 進数に変換します。 この例では、2 つの文字 “16” が 16 という値に結合されます。 結果の 2 進値は比較され、大きい方の値がより新しい RPM となります。 したがって、a が “0010” の RPM は、a が “9” のものより新しいです。

      ステップ 2 と 3 は、違いが生じるまで必要に応じて繰り返します。

      ファイルのインストールと削除

      Note: 通常、一度にインストールできるのは RPM のいずれか 1 つだけです。

      通常、より新しいバージョンのインストールには “-i” RPM 機能の代わりに “-U” (update) RPM 機能が使用されます。 1 つの 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

      ヒント:絶対に、新しいカーネル RPM をインストールするのに “-U” オプションは使用しないでください。 U」アップデート機能は、まずシステムから現在の RPM を削除してから、新しい RPM をインストールしようとします。 新しい RPM のインストールを妨げるいかなる問題も、システムを起動不能な状態にします。 これは望ましいことではないので、カーネル RPM をインストールするには常に “-i” スイッチを使用してください。

      クエリー (パッケージや情報)

      インストールされているパッケージに関する情報にはクエリーを使用します。 インストールされているすべてのパッケージ、またはインストールされている単一のパッケージに対してクエリーを行うことができます。 また、どの RPM が特定のファイルを提供しているかを調べることもできます。

      # rpm -q # rpm -qa (all installed packages)# rpm -q package_name# rpm -qf (filename)# rpm -qp (package filename)

      情報
      デフォルト (パッケージ名)
      -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 -qa | grep foo

      は一般的です。 RPM ツールの後のバージョンでは、これを簡潔に次のように実行できます:

      $ rpm -qa '*foo*'

      Queries – Verification (Files)

      RPM データベースは、RPM によってインストールされる各ファイルについての多くの属性を含んでいます。

      # rpm -V package_name# rpm -Va (verify all)# rpm -Vf (filename)# rpm -Vp (package filename)

      注意: 多くの Linux ディストリビューションには「prelink」RPM が含まれており、アプリケーションのプログラム ファイルに直接特殊情報を追加して、共有ライブラリ (ほとんどのアプリケーションでは少なくとも 1 つの共有ライブラリ、潜在的には何十ものライブラリを使用) を使用して、その起動時間を短縮しようと試みています。

      この情報を追加すると、アプリケーションの起動が速くなりますが、ファイルの変更により、最終ファイル変更日、ファイル サイズ、ファイルの MD5 チェックサムなど、RPM データベース内のほとんどのファイル属性が無効になります。

      クエリ – 検証 (パッケージ)

      # 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 コマンドを使用して、プロセスを識別します。 Use the kill command to terminate any “rpm” processes you find; a “kill -9” may be necessary.

      2. Delete the lock files that RPM uses:

      # rm -f /var/lib/rpm/__db*

      3. If you were experiencing a hanging “rpm” command, try it again. If it works, you are finished. If not, perform Step #1 and #2 again. Then proceed to the next step.

      4. Make a backup of your RPM database:

      # cd /var/lib# mkdir rpm-backup# rsync -av ./rpm/. ./rpm-backup/.

      5. Rebuild your RPM database:

      # rpm -vv --rebuilddb > /tmp/rpmrebuilddb.log 2>&1

      6. Retry your failed RPM command.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です