RPMパッケージ管理とrpmコマンドの基本

Linux環境におけるソフトウェアパッケージは、ソースコードパッケージとバイナリパッケージの2種類に大別されます。

ソースコードパッケージとは、プログラマが特定の形式と構文で記述した一連のソースコードの集合です。インストール時にコンパイルが必要となるため、時間がかかりやすく、エラーが発生しやすい傾向があります。

一方、バイナリパッケージは、ソースコードパッケージが正常にコンパイルされて生成されるものです。バイナリパッケージはリリース前にコンパイルプロセスが完了しているため、ユーザーによるソフトウェアのインストールが高速(Windows環境でのソフトウェアインストールと同程度の速度)であり、インストールプロセスでのエラー発生率も大幅に低減されます。

バイナリパッケージはLinux環境での標準的なソフトウェアインストール形式であるため、デフォルトインストールパッケージとも呼ばれます。現在、主に以下の2つの主流のバイナリパッケージ管理システムが存在します:

  • RPMパッケージ管理システム:機能が強力で、インストール、アップグレード、クエリ、アンインストールが非常に簡単かつ便利であるため、多くのLinuxディストリビューションがデフォルトでこのメカニズムを採用しています。例えば、Fedora、CentOS、SuSEなどが該当します。
  • DPKGパッケージ管理システム:Debian Linuxによって開発されたパッケージ管理メカニズムです。DPKGパッケージを通じて、Debian Linuxはソフトウェアパッケージの管理が可能となり、主にDebianとUbuntuで使用されています。

以下では、rpmコマンドを使用してバイナリソフトウェアパッケージを管理する方法について説明します。

RPMパッケージのデフォルトインストールパス

通常、RPMパッケージはシステムのデフォルトインストールパスが採用され、すべてのインストールファイルが表1に示すディレクトリにカテゴリ別に分散して配置されます。

表1 RPMパッケージのデフォルトインストールパス

インストールパス 意味
/etc/ 設定ファイルのインストールディレクトリ
/usr/bin/ 実行可能なコマンドのインストールディレクトリ
/usr/lib/ プログラムが使用する関数ライブラリの保存場所
/usr/share/doc/ 基本的なソフトウェア使用マニュアルの保存場所
/usr/share/man/ ヘルプファイルの保存場所

RPMパッケージのデフォルトインストールパスは、コマンドを使用して照会可能です。

また、RPMパッケージでは手動でインストールパスを指定することも可能ですが、この方法は推奨されません。なぜなら、手動でインストールパスを指定すると、すべてのインストールファイルが指定された場所に集中して配置され、システムのインストールパスを照会するコマンドも使用できなくなるためです(システムで認識させるためには手動設定が必要となり、得られるものより失うものの方が多くなります)。

RPMパッケージのインストール

rpm -ivh パッケージ完全名

注意点として、必ずパッケージ完全名を使用する必要があります。パッケージ完全名を含むコマンドでは、パスに注意してください。ソフトウェアパッケージが光学メディアに存在する可能性があるため、事前にデバイスのマウント作業を完了させておく必要があります。

このコマンドにおける各オプションの意味は以下の通りです:

  • -i:インストール(install);
  • -v:より詳細な情報を表示(verbose);
  • -h:#を表示してインストール進捗を表示(hash);

複数のソフトウェアパッケージを一度にインストールするには、パッケージ完全名をスペースで区切るだけです

rpm -ivh パッケージA.rpm パッケージB.rpm パッケージC.rpm

RPMパッケージのアップグレード

rpm -Uvh パッケージ完全名

-U(大文字)オプションの意味は、ソフトウェアがインストールされていない場合は直接インストールし、インストール済みの場合は最新バージョンにアップグレードします。

 rpm -Fvh パッケージ完全名

-F(大文字)オプションの意味は、ソフトウェアがインストールされていない場合は何もせず、古いバージョンがインストールされている場合のみアップグレードできます。

RPMパッケージのアンインストール

 rpm -e パッケージ名

RPMソフトウェアパッケージのアンインストールでは、パッケージ間の依存関係を考慮する必要があります。例えば、最初にhttpdソフトウェアパッケージをインストールし、その後にhttpdの機能モジュールであるmod_sslパッケージをインストールした場合、アンインストール時にはmod_sslを先にアンインストールし、その後にhttpdをアンインストールしないとエラーが発生します。

ソフトウェアパッケージのインストール状態の確認

rpm -q パッケージ名

-qはクエリを意味し、queryの頭文字です。

パッケージがインストール済みの場合はパッケージ完全名が返され、インストールされていない場合は未インストールである旨のメッセージが表示されます。このコマンドを使用する際は、パッケージ名が完全に正しい必要があります。

[root@localhost vagrant]# rpm -q httpd 
httpd-2.4.6-89.el7.centos.1.x86_64
[root@localhost vagrant]# rpm -q httpddd 
パッケージ httpddd はインストールされていません

システムにインストールされているすべてのソフトウェアパッケージの確認

rpm -qa

このコマンドは、すべてのインストール済みソフトウェアパッケージを一覧表示します。通常grepと併用して、特定のキーワードを含むインストール済みパッケージを確認します。以下に例を示します。

[root@localhost ~]# rpm -qa | grep httpd
httpd-devel-2.2.15-15.el6.centos.1.i686
httpd-tools-2.2.15-15.el6.centos.1.i686
httpd-manual-2.2.15-15.el6.centos.1.noarch
httpd-2.2.15-15.el6.centos.1.i686

インストール済みソフトウェアパッケージの詳細情報の確認

rpm -qi パッケージ名

-iオプションはソフトウェア情報を確認することを意味し、informationの頭文字です。

-qのみを使用するとパッケージ完全名が返されますが、-qiを使用するとソフトウェアパッケージの詳細情報が返されます。ソフトウェアがインストールされていない場合は未インストールである旨のメッセージが表示されます。確認するパッケージ名は完全に正しい必要があります。

[root@localhost vagrant]# rpm -qi httpd
名前        : httpd
バージョン     : 2.4.6
リリース     : 89.el7.centos.1
アーキテクチャ: x86_64
インストール日時: 2019年9月12日 06:17:11 UTC
グループ       : System Environment/Daemons
サイズ        : 9817317
ライセンス     : ASL 2.0
署名         : RSA/SHA256, 2019年7月31日 03:37:23 UTC, Key ID 24c6a8a7f4a80eb5
ソースRPM  : httpd-2.4.6-89.el7.centos.1.src.rpm
ビルド日時  : 2019年7月29日 17:21:18 UTC
ビルドホスト  : x86-02.bsys.centos.org
再配置可能性 : (再配置不可)
パッケージ作成者 : CentOS BuildSystem <http://bugs.centos.org>
ベンダー      : CentOS
URL         : http://httpd.apache.org/
概要       : Apache HTTP Server
説明 :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.
[root@localhost vagrant]# rpm -qi http
パッケージ http はインストールされていません

ダウンロード済みソフトウェアパッケージの詳細情報の確認

rpm -qip 絶対パス+パッケージ完全名

-pオプションはダウンロード済みのソフトウェアパッケージを確認することを意味し、packageの頭文字です。

ソフトウェアパッケージがダウンロード済みだがまだインストールされていない場合に、関連情報を確認するためにこのコマンドを使用します。

注意点として、ここではパッケージ完全名を使用し、未インストールのパッケージは「絶対パス+パッケージ完全名」の形式で指定する必要があります。

インストール済みソフトウェアパッケージのファイルリストの確認

rpm -ql パッケージ名

-lオプションは、パッケージに含まれるすべてのファイルのインストール先ディレクトリを一覧表示します。

ダウンロード済みで未インストールのソフトウェアパッケージのファイルリストの確認

rpm -qlp 絶対パス+パッケージ完全名

-pオプションは未インストールのソフトウェアパッケージ情報を確認することを意味し、packageの頭文字です。

特定のソフトウェアパッケージに含まれるファイルを確認したいが、まだインストールされていない場合にこのコマンドを使用します。すでにインストール済みの場合は-qlを使用する方がより簡潔です。

パッケージがまだインストールされていないため、「絶対パス+パッケージ完全名」の形式でパッケージを指定する必要があります。

[root@localhost ~]# rpm -qlp /mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.rpm
/etc/NetworkManager/dispatcher.d/13-named
/etc/logrotate.d/named
/etc/named
/etc/named.conf
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
…一部の出力を省略…

システムファイルがどのRPMパッケージに属するかの確認

rpm -qlコマンドはパッケージから含まれるファイルのインストールパスを確認するものですが、rpmは逆方向のクエリ、つまり特定のシステムファイルがどのRPMパッケージに属するかを確認することもサポートしています。そのコマンド形式は以下の通りです

rpm -qf システムファイル名

-fオプションの意味は、システムファイルがどのパッケージに属するかを確認することで、fileの頭文字です。

注意点として、RPMパッケージを使用してインストールされたファイルのみがこのコマンドを使用でき、手動で作成されたファイルでは使用できません。

[root@localhost etc]# rpm -qf /etc/php.ini php-common-7.3.9-1.el7.remi.x86_64

インストール済みソフトウェアパッケージの依存関係の確認

rpmコマンドを使用してRPMパッケージをインストールする際は、他のRPMパッケージとの依存関係を考慮する必要があります。rpm -qRコマンドは、インストール済みソフトウェアパッケージが依存する他のパッケージを確認するために使用されます。このコマンドの形式は以下の通りです:

rpm -qR パッケージ名

-R(大文字)オプションの意味は、ソフトウェアパッケージの依存性を確認することで、requiresの頭文字です。

未インストールのソフトウェアパッケージの依存関係の確認

rpm -qRp 絶対パス+パッケージ完全名

以下に例を示します

rpm -qRp /mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.rpm

pはダウンロード済みのパッケージ(package)を指し、このパッケージはインストール済みの場合も未インストールの場合もあります。その後に続くのは、ダウンロード済みパッケージの保存パスです。

注意点として、前述したパッケージ名とパッケージ完全名は同じものではありません。パッケージ名はパッケージ完全名の一部です。

パッケージ完全名の命名規則

パッケージ名-バージョン番号-リリース回数-ディストリビューター-Linuxプラットフォーム-対応ハードウェアプラットフォーム-パッケージ拡張子

ユーザーは名称から直接、この種のパッケージのバージョン、対応プラットフォームなどの情報を取得できます。

例えば、RPMパッケージの名前がhttpd-2.2.15-15.el6.centos.1.i686.rpmである場合、以下のような構成要素があります:

  • httpd:パッケージ名。ここで注意すべきは、httpdがパッケージ名であり、httpd-2.2.15-15.el6.centos.1.i686.rpmは通常パッケージ完全名と呼ばれることです。パッケージ名とパッケージ完全名は異なり、一部のLinuxコマンド(パッケージのインストールとアップグレードなど)ではパッケージ完全名を使用し、他のコマンド(パッケージのクエリとアンインストールなど)ではパッケージ名を使用するため、間違えないように注意が必要です。
  • 2.2.15:パッケージのバージョン番号で、通常メジャーバージョン.マイナーバージョン.リビジョンの形式です。
  • 15:バイナリパッケージのリリース回数で、このRPMパッケージが何回目のビルドで生成されたかを示します。
  • el*:ソフトウェアのディストリビューターで、el6はRed Hat社がリリースし、RHEL 6.x (Red Hat Enterprise Linux)とCentOS 6.xで使用できることを意味します。
  • centos:このパッケージがCentOSシステムで使用可能であることを示します。
  • i686:パッケージが使用するハードウェアプラットフォームを示し、現在のRPMパッケージが対応するプラットフォームは表1の通りです:

表1 RPMパッケージ対応ハードウェアプラットフォーム

プラットフォーム名 対応プラットフォーム情報
i386 386以上のコンピュータでインストール可能
i586 586以上のコンピュータでインストール可能
i686 ペンティウムII以上のコンピュータでインストール可能。現在のすべてのCPUはペンティウムII以上であるため、このソフトウェアバージョンが主流
x86\_64 64ビットCPUでインストール可能
noarch ハードウェア制限なし

タグ: RPM パッケージ管理 linux コマンド ソフトウェアインストール

7月27日 02:10 投稿