Linuxコマンド辞典 rpmコマンド(RPMパッケージを管理)
RPMパッケージのインストールやアンインストール/アップデート/検索/検証を行うRPMコマンドの概要と使い方を記載しています。
RHEL Fedora CentOS
参考サイト:Man page of INSTALL
- 概要
- 使用方法
- インストール
- 強制的にインストール
- インストールテスト
- パッケージをアップグレード
- インストールされていないパッケージのアップグレード
- インストール済みパッケージを検証
- 指定したパッケージを削除する
- インストールされている全パッケージを表示
- 特定のパッケージがインストールされているか確認する
- パッケージの情報を表示する
- インストールされたファイルのパス表示を表示する
- 特定のコマンドがどのパッケージに含まれるか調べる方法
- 依存パッケージを表示する
- パッケージの状態を表示する
- パッケージの更新情報を表示
- GPGキーのインストール
- GPGのチェック
- パッケージデータベースを再構築する
- パッケージデータベースのインデックスを新規作成
概要
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 | パーミッションが異なる |
5 | MD5ハッシュ値が異なる |
L | シンボリックリンクが異なる |
T | 更新日時が異なる |
D | デバイスファイルが異なる |
U | 所有者が異なる |
G | 所有グループが異なる |
? | 特定できないが異なる情報がある |
その他
–import 公開鍵 | RPMデータベースにパッケージを検証するための開発者の公開鍵を登録する |
–ftpproxy ホスト名 | 指定したホストをFTPプロキシサーバに利用してパッケージを取得する |
–ftpport ポート番号 | 指定したポート番号をFTPプロキシサーバのポートに利用してパッケージを取得する |
–httpproxy ホスト名 | 指定したホストをHTTPプロキシサーバに利用してパッケージを取得する |
–httpport ポート番号 | 指定したポート番号をHTTPプロキシサーバのポートに利用してパッケージを取得する |
–rcfile ファイルリスト | 「pm(8)が利用する設定ファイルを指定する。複数ファイル指定する場合は「:」で区切る」 |
–showrc | rpm(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.*