Linuxコマンド - RPMコマンド
概要
RPM (Red Hat Package Manager) は、RHELやその派生ディストリビューションで使用されるパッケージ管理システムである。
rpmコマンドは、パッケージのインストール、更新、削除、検索等を行うために使用される。
rpmファイルの詳細情報の確認(インストール前)
-pオプションを付与すると、インストール前にrpmファイルから確認できる。
パッケージファイル情報の詳細を表示する。
rpm -qip <rpmファイル名>
該当パッケージでインストールされるファイルの一覧を表示する。
rpm -qlp <rpmファイル名>
パッケージが依存しているファイルを表示する。
rpm -qRp <rpmファイル名>
rpmファイルの詳細情報の確認
-iまたは--infoオプションで確認できる。
rpm -qi <rpmファイル名>
インストールされているrpmのリストの表示
-aまたは--allオプションで確認できる。
rpm -qa openal-soft-1.17.2-lp151.5.3.1.x86_64 libpng16-16-32bit-1.6.34-lp151.3.3.1.x86_64 openssl-1.1.0i-lp151.1.1.noarch wicked-service-0.6.60-lp151.2.12.1 ・ ・ ・
rpmファイルでインストールされるファイルの表示
-lまたは--listオプションで表示できる。
rpm -ql <rpmファイル名> /etc/pki/CA /etc/pki/CA/certs /etc/pki/CA/crl ・ ・ ・
特定のファイルがどのrpmに含まれているかを確認
-f
オプション、または、--file
オプションで表示することができる。
特定のコマンドおよびライブラリがインストールされているパッケージ名を調べるために使用する。
rpm -qf $(which <コマンド名>) # または rpm -qf <ライブラリのパス>
各オプションを以下に示す。
- -qオプション
- quiet (静粛) モードを指定する。
- つまり、通常の出力ではなく、エラー以外の情報を表示しないようにする。
- -fオプション
- 指定されたファイルがどのパッケージに属するかを調べるために使用する。
- -qオプションと組み合わせて使用する場合、指定されたファイルが含まれるパッケージ名を表示する。
whichコマンドで実行可能ファイルのパスを表示することにより、
特定のコマンドの実行可能ファイルのパスを調べて、それがどのパッケージに属するかを調べるために使用するものである。
# 使用例: rpm -qf $(which dd) # 出力例: # これは、ddコマンドがcoreutilsパッケージの一部であることを示している coreutils-8.32-3.el8.x86_64
# 使用例: rpm -qf /usr/lib64/libcrypto.so.10 # 出力例: # /usr/lib64/libcrypto.so.10ファイルは、openssl-libs-1.0.2k-8.el7.x86_64というrpmに含まれている openssl-libs-1.0.2k-8.el7.x86_64
特定のrpmファイルをインストールするために必要なパッケージ名称の表示
以下の例では、nssをインストールするには、bashやglibcが必要であることがわかる。
rpm -q --requires nss | cut -d ' ' -f 1 | xargs rpm -q --whatprovides | sort | uniq bash-4.2.46-28.el7.x86_64 chkconfig-1.7.4-1.el7.x86_64 glibc-2.17-196.el7_4.2.x86_64 ・ ・ ・
特定のrpmファイルが提供するファイルに依存するパッケージの表示
以下の例では、nssで提供するファイルは、NetworkManagerが使用していることがわかる。
rpm -q --provides nss | cut -d ' ' -f 1 | xargs rpm -q --whatrequires | sort | uniq NetworkManager-1.8.0-9.el7.x86_64 NetworkManager-libnm-1.8.0-9.el7.x86_64 NetworkManager-tui-1.8.0-9.el7.x86_64 ・ ・ ・
rpmファイルのインストールおよびアンインストール時に実行されるスクリプトの表示
--scriptsオプションで表示できる。
rpm -q --scripts nss-3.16.1-4.el6_5.x86_64 postinstall scriptlet (using /bin/sh): # If we upgrade, and the shared filename is a regular file, then we must # remove it, before we can install the alternatives symbolic link. if [ $1 -gt 1 ] ; then ・ ・ ・
特定のrpmファイルのインストールテストを行う
実際には実行せずに、 -iや-eオプションを付与した際のインストールテストを行う。
--testオプションで実行できる。
rpm -i --test postgresql-8.4.20-2.el6_6.i686.rpm エラー: 依存性の欠如: libc.so.6 は postgresql-8.4.20-2.el6_6.i686 に必要とされています libc.so.6(GLIBC_2.0) は postgresql-8.4.20-2.el6_6.i686 に必要とされています libc.so.6(GLIBC_2.1) は postgresql-8.4.20-2.el6_6.i686 に必要とされています ・ ・ ・
特定のrpmファイルのアンインストールを行う
-e
または、--erase
オプションは、指定したパッケージを削除する際に使用する。
rpm -e <パッケージ名>
パッケージの更新履歴を見る
--changelogオプションで実行できる。
rpm -q --changelog libblkid-2.17.2-12.14.el6_5.x86_64 * 水 4月 09 2014 Karel Zak <kzak@redhat.com> 2.17.2-12.14.el6_5 - fix #1085818 - hwclock --systohc can hang on busy or virtual machine ・ ・ ・
パッケージインストール時のスクリプトの確認
--scriptsオプションで確認できる。
rpm -q --scripts wget-1.19.5-7.el8_0.1.x86_64.rpm postinstall scriptlet (using /bin/sh): /sbin/install-info /usr/share/info/wget.info.gz /usr/share/info/dir || : preuninstall scriptlet (using /bin/sh): if [ "$1" = 0 ]; then /sbin/install-info --delete /usr/share/info/wget.info.gz /usr/share/info/dir || : fi
特定のパッケージのチェック
-V
または--verify
オプションは、指定したパッケージに含まれるファイルの変更や損傷を検査する際に使用する。
rpm -V <パッケージ名>
パッケージの検査では、 パッケージ内のインストールされたファイルの情報と、rpmデータベースに格納されているパッケージのメタデータから得られたファイルの情報を比較する。
例えば、ファイルのサイズ、 所有者、グループ等を比較する。
問題がある場合には、問題に応じて文字が出力されるため、その出力結果から、ファイルの整合性に関する問題を識別し、ファイルを元の状態に戻すか、変更を許可するか等を判断する。
RPMファイルの展開
rpmコマンドの問い合わせ機能は、インストールしたファイルが対象となるため、
インストール前にRPMファイルにどのようなファイルが含まれているかを調べたり、一部のファイルを取り出したりすることはできない。
インストール前に上記のようなことを行う場合、RPMパッケージをcpio形式のアーカイブファイルに変換して、ファイルの一覧を表示・展開すればよい。
RPMファイルをcpioファイルに変換するには、rpm2cpioコマンドを使用する。
また、cpio形式のアーカイブファイルから、ファイルを展開およびファイルの一覧を表示するにはcpioコマンドを使用する。
# RPMファイルの一覧の表示 rpm2cpio <ファイル名>.rpm | cpio --list # RPMファイルの展開 rpm2cpio <ファイル名>.rpm | cpio -id
rpmdev-extractコマンドの使用
上記の方法では、ファイル形式の変換処理が発生するため、入力するコマンドが長くなる。
RPMファイルを展開するだけであれば、rpmdev-extractコマンドを使用した方が簡単である。
rpmdev-extractコマンドは、rpmdevtoolsというパッケージに含まれている。
以下のコマンドを実行して、rpmdevtoolsをインストールする。
# RHEL sudo dnf install rpmdevtools
rpmdev-extractコマンドは、引数で指定されたRPMファイルを展開する。
rpmdev-extract <RPMファイル>