Linuxコマンド辞典 rpmコマンド(RPMパッケージを管理)

RPMパッケージのインストールやアンインストール/アップデート/検索/検証を行うRPMコマンドの概要と使い方を記載しています。

RHEL Fedora CentOS

参考サイト:Man page of INSTALL

概要

RPMパッケージには2種類あります。1つは実行ファイルが納められている「.x86_64.rpm」のようにファイル名末尾にアーキテクチャ名と.rpmの拡張子がついたRPMパッケージです。もう一つは「.src.rpm」という拡張子のソースファイルだけが含まれるRPMパッケージです。バイナリパッケージには、インストールするファイルのパーミッションやインストール後に実行するスクリプトなどがメタデータとして含まれます。

このメタデータを参照し、インストールされたパッケージの削除やパッケージリストのデーターベースを更新します。

RPMはBarkeley DB形式のデータベースを持っており、導入されたソフトウェアについての情報を一元的に管理しています。

rpmはパッケージのインストールや削除の他にインストールされているパッケージリストの再構築なども行うことができます。

RPMとは
米レッドハット(Red Hat)社が開発したパッケージ管理システム。
ソフトウェアを1つにまとめて配布するためのファイル形式仕様とパッケージをシステムに導入する管理ツールで構成されています。
RPM形式はファイルとディレクトリをcpio形式のアーカイブにまとめて
パッケージ情報を記載したspec形式のファイルとソフトウェア本体のバイナリファイルやソースコード等が格納されています。
specファイルは以下の情報部分と導入手順や実行するためのスクリプト部分で構成されています。
パッケージ名
説明
種類
バージョン番号
ライセンス情報
開発元
公式サイトのURL
パッケージに使用したツール
他のパッケージとの依存関係

パッケージデータベースの場所

/var/lib/rpm

使用方法

書式

$ rpm [オプション] パッケージ名

-i パッケージのインストール、-vで詳細情報を表示、-hでインストール進捗を表示する。

サンプル

#パッケージを使ったsambaのインストール
# rpm -ivh samba-4.10.16-18.el7_9.x86_64.rpm

最近は、rpmコマンドを使用するよりも、ほとんど「yum(ヤム)」コマンドを使用することが多いです。

rpmは依存関係を解決する機能が無いため、高機能なパッケージマネージャーのyumを使用します。

「yum install samba」と打つことで、リポジトリから必要なパッケージを自動でダウンロードしてインストールしてくれます。

実行するサーバーからインターネット経由でダウンロードするので、社内のローカル環境ではインターネットに接続できずエラーとなる場合があります。

オプション

インストール/アンインストール/アップデート

-i パッケージ名
–install
指定したPRMパッケージをインストールする。引数にはWebサイトのURLを使える
-U パッケージ名
–upgrade
指定したPRMパッケージでアップデートする。インストールされていなくてもアップデート
(インストール)する
-F パッケージ名
–freshen
既にインストールされているパッケージより指定したPRMパッケージのバージョンが
新しい場合はアップデートする
-e パッケージ名
–erase
指定したパッケージ名をアンインストールする
オプション説明
-h
–hash
パッケージインストール状況をプログレスバーで表示する
–percentパッケージインストール状況をパーセンテージで表示する
-V、-vv詳細なデバック情報を表示する
–nodepsパッケージの依存関係をチェックしない
–noscriptsインストール前とインストール後のスクリプトを実行しない
–test実際にはインストールは行わず、依存性の衝突などの可能性がある場合は報告する
–excludedocsドキュメントをインストールしない(rpm -qlでは表示されるが、実際はインストール
されない)
–excludepath=パス指定したパス以下をインストールしない(rpm -qlでは表示されるが実際はインストール
されない)

問い合わせ

-q
–query
RPMパッケージを検索する
オプション説明
-a
–all
インストールされているすべてのパッケージについて問い合わせ
-f パス指定したパスのファイル/ディレクトリが所属するパッケージ名を問い合わせる
-p パッケージ名
–package
RPMパッケージファイルを指定する(パッケージファイル名にはhttp://やftp://など
のURLを指定できる)
-i
–info
パッケージの名前やバージョンなどの情報を表示する
-R
–requires
依存パッケージを表示する
-l
–list
パッケージに含まれるファイル一覧を表示する
–scriptsパッケージに含まれるスクリプトファイルを表示する
-V、-vv詳細なデバック情報を表示する

検証

-V
–verify
インストール済みのRPMパッケージを、rpmデータベースに保持しているメタデータを使って
検証する。検証には以下のオプションを追加できる。
オプション説明
–nodeps依存性の検査を行わない
–nosignature読み込み時にパッケージやヘッダの署名を検査しない
–nofiledigestファイルのダイジェスト値を検証しない
-v、-vv詳細情報を表示する
–nodeps依存性チェックを行わない。削除によって他のパッケージでの実行が期待通りに行かない場合
がある。実行には注意が必要
–test実際に削除を行わない

検証オプションを使った場合の表示項目(インストールされた時点と異なる状態の場合に表示される)

–nodeps依存性の検査を行わない
–nosignature読み込み時にパッケージやヘッダの署名を検査しない
–nofiledigestファイルのダイジェスト値を検証しない
-v、-vv詳細情報を表示する
–nodeps依存性チェックを行わない。削除によって他のパッケージでの実行が期待通りに行かない場合
がある。実行には注意が必要
–test実際に削除を行わない。

検証の結果表示される記号の意味の表

項目説明
Sファイルサイズが異なる
Mパーミッションが異なる
5MD5ハッシュ値が異なる
Lシンボリックリンクが異なる
T更新日時が異なる
Dデバイスファイルが異なる
U所有者が異なる
G所有グループが異なる
特定できないが異なる情報がある

その他

–import 公開鍵RPMデータベースにパッケージを検証するための開発者の公開鍵を登録する
–ftpproxy ホスト名指定したホストをFTPプロキシサーバに利用してパッケージを取得する
–ftpport ポート番号指定したポート番号をFTPプロキシサーバのポートに利用してパッケージを取得する
–httpproxy ホスト名指定したホストをHTTPプロキシサーバに利用してパッケージを取得する
–httpport ポート番号指定したポート番号をHTTPプロキシサーバのポートに利用してパッケージを取得する
–rcfile ファイルリスト「pm(8)が利用する設定ファイルを指定する。複数ファイル指定する場合は「:」で区切る」
–showrcrpm(8)が利用するrpmrcやmacrosのオプションを表示する

インストール

インストールは管理者権限で実行する必要があります。

# rpm -ivh --test パッケージ名

実行結果

[root@i-host work]# ls -la #rpmパッケージファイルが存在しているか確認
total 10144
drwxrwxr-x  2 centos centos     317 Mar 10 02:22 .
drwx------. 7 centos centos     238 Feb 26 04:52 ..
-rw-rw-r--  1 centos centos 7495340 Mar 10 02:21 nmap-7.92-1.x86_64.rpm
[centos@i-host work]$ su #管理者にスィッチ
Password: 
[root@i-host work]# rpm -ivh nmap-7.92-1.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:nmap-2:7.92-1                    ################################# [100%]
[root@i-host work]# rpm -q nmap #インストール確認
nmap-7.92-1.x86_64

強制的にインストール

依存関係や競合によりインストールできないことがあります。その場合はロングオプションの–nodepsを併用して強制的にインストールすることもできます。makeなどに依存しているファイルがインストールされている場合などの警告に対して有効的です。

また、インストールは管理者権限で実行する必要があります。

# rpm -ivh --nodeps パッケージ名

実行結果

[root@i-host work]# ls -la #rpmパッケージファイルが存在しているか確認
total 10144
drwxrwxr-x  2 centos centos     317 Mar 10 02:22 .
drwx------. 7 centos centos     238 Feb 26 04:52 ..
-rw-rw-r--  1 centos centos 7495340 Mar 10 02:21 nmap-7.92-1.x86_64.rpm
[centos@i-host work]$ su #管理者にスィッチ
Password: 
[root@i-host work]# rpm -ivh --nodeps nmap-7.92-1.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:nmap-2:7.92-1                    ################################# [100%]

インストールテスト

–testオプションを指定することで、インストールせず事前にテストを行うことができます。

この処理はインストールと同様の処理を行うが、パッケージに含まれる各種ファイルのコピーなど実際のインストールは実施しません。

事前に依存関係や競合の解消を目的として使用することができます。

また、インストールは管理者権限で実行する必要があります。

# rpm -ivh --test パッケージ名

実行結果

[root@i-host work]# ls -la #rpmパッケージファイルが存在しているか確認
total 10144
drwxrwxr-x  2 centos centos     317 Mar 10 02:22 .
drwx------. 7 centos centos     238 Feb 26 04:52 ..
-rw-rw-r--  1 centos centos 7495340 Mar 10 02:21 nmap-7.92-1.x86_64.rpm
[centos@i-host work]$ su #管理者にスィッチ
Password: 
[root@i-host work]# rpm -ivh --test nmap-7.92-1.x86_64.rpm  #インストールテスト
Preparing...                          ################################# [100%]
[root@i-host work]# 

パッケージをアップグレード

-Fオプションを使用すると、すでにインストールされているパッケージのアップグレードすることができます。また、インストールされていないパッケージはアップグレードすることができません。

また、インストールは管理者権限で実行する必要があります。

# rpm -F[vh] パッケージ名

カレントディレクトリすべてのパッケージをアップグレードします。

# rpm -F[vh] *

パッケージのダウングレード

新しいパッケージにバグやセキュリティホールなどが見つかり、前のバージョンに戻す必要がある場合は、-iオプションにロングオプション–oldpackageオプションを付けて古いRPMに対してrpmコマンドを実行します。

インストールされていないパッケージのアップグレード

インストールされているか関わらずアップグレードするには、-Uオプションを使用します。すでにインストール済みであればアップグレード。インストールされていなければインストールします。

また、インストールは管理者権限で実行する必要があります。

# rpm -U[vh] パッケージ名
[root@i-host work]# rpm -Uvh nmap-7.92-1.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:nmap-2:7.92-1                    ################################# [100%]
[root@i-host work]# rpm -q nmap
nmap-7.92-1.x86_64

インストール済みパッケージを検証

インストール済みのパッケージが問題ないか確認することができます。

また、インストールは管理者権限で実行する必要があります。一般ユーザーで実行すると「missing(Permission denied)」とエラーを表示する

# rpm -V パッケージ名

実行結果

[root[root@i-host work]# rpm -V samba #sambaを強制インストールしたため、依存ファイルが不足しているエラー
Unsatisfied dependencies for samba-0:4.10.16-13.el7_9.x86_64:
        libCHARSET3-samba4.so()(64bit) is needed by (installed) samba-0:4.10.16-13.el7_9.x86_64
        libCHARSET3-samba4.so(SAMBA_4.10.16)(64bit) is needed by (installed) samba-0:4.10.16-13.el7_9.x86_64
        libMESSAGING-SEND-samba4.so()(64bit) is needed by (installed) samba-0:4.10.16-13.el7_9.x86_64
        libaddns-samba4.so()(64bit) is needed by (installed) samba-0:4.10.16-13.el7_9.x86_64
        libads-samba4.so()(64bit) is needed by (installed) samba-0:4.10.16-13.el7_9.x86_64
        libaesni-intel-samba4.so()(64bit) is needed by (installed) samba-0:4.10.16-13.el7_9.x86_64
        libasn1util-samba4.so()(64bit) is needed by (installed) samba-0:4.10.16-13.el7_9.x86_64
        libauth-samba4.so()(64bit) is needed by (installed) samba-0:4.10.16-13.el7_9.x86_64

すべてのパッケージをチェックする場合は、-Vaオプションを使用しよう。
ただし、この処理は重い・・・

指定したパッケージを削除する

# rpm -e パッケージ名

実行結果

[root@i-host work]# rpm -q nmap
nmap-7.92-1.x86_64
[root@i-host work]# rpm -e nmap
[root@i-host work]# rpm -q nmap
package nmap is not installed
[root@i-host work]# 

インストールされている全パッケージを表示

問い合わせの-qオプションとすべての対象の-aオプションを組み合わせます。

画面にたくさん表示され読み取れない場合は、lessやmoreコマンドにパイプしてページ単位で読むと良い。

$ rpm -qa
$ rpm -qa | more
$ rpm -qa | less
[centos@i-host work]$ rpm -qa
libndp-1.2-9.el7.x86_64
httpd-tools-2.4.6-97.el7.centos.x86_64
mysql57-community-release-el7-7.noarch
mysql-community-client-5.7.33-1.el7.x86_64
perl-Pod-Perldoc-3.20-4.el7.noarch
perl-Pod-Usage-1.63-3.el7.noarch
・
・
・

特定のパッケージがインストールされているか確認する

-qオプションを使用する方法

$ rpm -q パッケージ名
[centos@i-host work]$ rpm -q perl
perl-5.16.3-299.el7_9.x86_64

grepを使用して関連パッケージも表示する方法

$ rpm -qa | grep パッケージ名
[centos@i-host work]$ rpm -qa | grep perl
perl-Pod-Perldoc-3.20-4.el7.noarch
perl-Pod-Usage-1.63-3.el7.noarch
perl-constant-1.27-2.el7.noarch
・
・
・

パッケージの情報を表示する

$ rpm -qi パッケージ名

実行結果

[centos@i-host work]$ rpm -qi perl
Name        : perl
Epoch       : 4
Version     : 5.16.3
Release     : 299.el7_9
Architecture: x86_64
Install Date: Mon 22 Feb 2021 02:24:06 AM UTC
Group       : Development/Languages
Size        : 23556436
License     : (GPL+ or Artistic) and (GPLv2+ or Artistic) and Copyright Only and MIT and Public Domain and UCD
Signature   : RSA/SHA256, Wed 03 Feb 2021 04:48:28 PM UTC, Key ID 24c6a8a7f4a80eb5
Source RPM  : perl-5.16.3-299.el7_9.src.rpm
Build Date  : Tue 02 Feb 2021 04:36:12 PM UTC
Build Host  : x86-02.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://www.perl.org/
Summary     : Practical Extraction and Report Language
Description :
Perl is a high-level programming language with roots in C, sed, awk and shell
scripting.  Perl is good at handling processes and files, and is especially
good at handling text.  Perl's hallmarks are practicality and efficiency.
While it is used to do a lot of different things, Perl's most common
applications are system administration utilities and web programming.  A large
proportion of the CGI scripts on the web are written in Perl.  You need the
perl package installed on your system so that your system can handle Perl
scripts.

Install this package if you want to program in Perl or enable your system to
handle Perl scripts.

-qiオプションで表示される情報

Name名称
Versionバージョン
Releaseリリース番号
Install Dateインストール日時
Groupパッケージグループ
Size容量
Build Hostビルドしたコンピュータのホスト名
Source RPMソースとしたRPMファイル
Licenseライセンス携帯
Signature署名
Packagerパッケージを行った人(企業)
URLパッケージ提供を行っているサイト
Summary概要
Description説明

インストールされたファイルのパス表示を表示する

$ rpm -ql パッケージ名

実行結果

パッケージ「perl」によりインストールされているファイルの情報を表示

[centos@i-20100000169593 ~]$ rpm -ql perl
/usr/bin/a2p
/usr/bin/c2ph
/usr/bin/find2perl
/usr/bin/h2ph
/usr/bin/perl
/usr/bin/perl5.16.3
・
・
・

特定のコマンドがどのパッケージに含まれるか調べる方法

-qオプションと-fサブオプションを付けて実行します。引数のプログラムにはフルパスでコマンドを指定します。

$ rpm -qf プログラム

実行結果

「/bin/zcat」がどのパッケージに含まれるか調べてみる。

[centos@i-host ~]$ rpm -qf /bin/zcat
gzip-1.5-10.el7.x86_64

依存パッケージを表示する

パッケージのインストール、アップデート、アンインストールする場合、依存関係や競合が問題になることがあります。トラブルを事前に回避するために依存関係のチェックすることができます。

$ rpm -qR プログラム

実行結果

[centos@i-host work]$ rpm -qR perl
/usr/bin/perl
libc.so.6()(64bit)
libc.so.6(GLIBC_2.11)(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.2)(64bit)
・
・
・

RPMコマンドでパッケージをインストールした時に、よくエラーメッセージが表示されます。子の場合、依存や競合が問題になっていることが多いです。

依存の場合は、使用するライブラリがインストールされていないことが多いです。

依存しているパッケージを先にインストールすることで解消されます。

また、競合はすでにインストールされているパッケージと競合して問題を起こします。

個別に対処する必要があるので、作業に時間がかかることがあります。

これらの問題を解決するための仕組みが、yumやaptコマンドになります。

パッケージの状態を表示する

パッケージに含まれるファイルがどのような状態にあるか確認するコマンドになります。コマンドを実行するとパッケージに含まれるすべてのファイルについて状況が表示されます。

normal正常
notinstalled未インストール
replaced置き換えられている
$ rpm -qs パッケージ名

実行結果

[centos@i-20100000169593 ~]$  rpm -qs perl|more
normal        /usr/bin/a2p
normal        /usr/bin/c2ph
normal        /usr/bin/find2perl
normal        /usr/bin/h2ph
・
・
・

rpm -qsコマンドを実行すると非常に多くの情報が表示されてしまうので、grepコマンドにパイプして「notinstalled」、「replaced」を抽出するとよいでしょう

rpm -qs perl|grep notinstalled
rpm -qs perl|grep replaced

パッケージの更新情報を表示

RPMパッケージはデータベースにインストール、アップグレード、削除の操作した時、操作日時を記録しています。下記のコマンドで、最近更新されたパッケージの情報を新しい順で表示することができます。

$ rpm -qa --last

実行結果

[root@i-host work]#  rpm -qa --last
samba-4.10.16-13.el7_9.x86_64                 Thu 10 Mar 2022 02:46:59 AM UTC
nmap-7.92-1.x86_64                            Thu 10 Mar 2022 02:41:21 AM UTC
php-xmlrpc-7.4.28-1.el7.remi.x86_64           Fri 25 Feb 2022 11:39:01 AM UTC
php-pecl-mysql-1.0.0-0.23.20190415.d7643af.el7.remi.7.4.x86_64 Fri 25 Feb 2022 11:39:01 AM UTC
php-pecl-mcrypt-1.0.4-1.el7.remi.7.4.x86_64   Fri 25 Feb 2022 11:39:01 AM UTC
・
・

GPGキーのインストール

RPMパッケージには、電子署名を含むことができるようになっています。Red Had社において2001年以降配布されたすべてのパッケージには電子署名が含まれています。これは第三者に改変されていないことを確認するためのものです。

電子署名チェックは、インストールやアップグレード時に自動的に確認されます。

RPMを採用しているディストリビューションでは、yumやpupの初回起動時に表示されるダイアログで組み込むことができますが、ディストリビュータ以外が提供するパッケージを使用する場合には、パッケージのインストール前に個別にキーをインストールする必要があります。

rpm --import http://GPGキーのサイト/RPM-GPG-KEY-CentOS-5

GPGキーがインストールされているか確認

rpm -qa gpg-pubkey

キーの格納場所

RHEL4=/usr/share/rhn/

RHEL5=/etc/pki/rpm/gpg/

GPGのチェック

GPG署名はパッケージのインストールやアップグレード時に自動的に行われますが、手動でも行うことができます。パッケージに破損がないか事前にチェックすることができます。

rpm -K [--nosignature] パッケージ名
[root@i-host work]# rpm -K nmap-7.92-1.x86_64.rpm 
nmap-7.92-1.x86_64.rpm: sha1 md5 OK

RHN以外からダウンロードしたファイルの整合性チェックを行うには、–nosignatureオプションを使用します。

[root@i-host work]# rpm -K --nosignature nmap-7.92-1.x86_64.rpm 
nmap-7.92-1.x86_64.rpm: sha1 md5 OK
[root@i-host work]# 

パッケージデータベースを再構築する

RPMはパッケージデータベースに情報が保存されています。インストール、アップデート、アンインストールなどパッケージ操作を行うことで重要な情報が記録されていきます。

稀にデータベースが破損してしまうことがあるので、壊れてしまったデータベースを再構築することで復旧させることができます。

また、実行にあたっては管理者権限が必要になります。

rpm -vv --rebuilddb

パッケージデータベースのインデックスを新規作成

パッケージデータベースの再構築ができない場合は、新規でインデックスを作成し直します。

rpm --initdb

仮にハングアップやCtrl+Dで強制終了しデータベースが破損した場合は、インデックス作成が失敗するケースがあるので、その時はパッケージデータベースを一度削除すると良いでしょう。

データベースは「/var/lib/rpm」に「_db.001」というファイルで格納されています。

cd /var/lib/rpm
rm -f _db.*