どこかに向かうらしい話

迷走エンジニアの放浪記

rpmコマンドまとめ

はじめに

インフラ屋にとって、パッケージ管理は非常に大事なテーマである。
Infrastructure as Codeが流行っている今だからこそ、負担なく確実にパッケージをインストールできる技術というのは必要になるのではないかと考える。

パッケージ管理のポリシーはいろいろあるとは思うが、共通して必要になるテーマは以下の3点になるのかと思う。

しかし、大前提として、パッケージ管理のコマンド(RPM系ならrpm/yum/dnf、DEB系ならdpkg/apt)を知るところから始めるのは迂遠なことではないと思う。

まずは自分の手馴れているRPMパッケージから扱う。
初回である今回は、特に上記に挙げた3点に結びつくようなrpmコマンドについて説明していく。

検索

インストールしたRPMパッケージの検索

インストールしたrpmパッケージ全てを出力させるには、「-qa」オプションを使用する。
grepコマンドと組み合わせることで、特定のRPMパッケージがインストールされたかがわかる。
coreutilsパッケージがインストールされているかを確認する例を示す。

# rpm -qa | grep coreutils
coreutils-8.22-18.el7.x86_64
policycoreutils-2.5-17.1.el7.x86_64

使用しているコマンドがのどのRPMパッケージのコマンドかの検索

コマンド名は必ずしもパッケージ名と一致しないことも多い。
使用してるコマンドがどのパッケージに含まれるかを知りたい場合には、「-qf」オプションを使用する。
ただし、「-qf」オプションはフルパスでないと指定ができないため、whichコマンドでフルパスを調べ、その結果を使用してrpmコマンドを使用する。
lsコマンドのパス先を調べ、そのパッケージ収録元を確認する例を示す。

# which ls
alias ls='ls --color=auto'
        /usr/bin/ls

# rpm -qf /usr/bin/ls
coreutils-8.22-18.el7.x86_64

インストールしたRPMパッケージが提供するコマンドの検索

インストールしたRPMパッケージが提供するコマンドを知りたい場合には、「-ql」オプションを使用し、binでgrepする。

# rpm -ql rpm-build | grep bin
/usr/bin/gendiff
/usr/bin/rpmbuild
/usr/bin/rpmspec

インストール

新規インストール

「-i」オプションでRPMパッケージの新規インストールが可能。
「-vh」オプションを付けると、「#」マークを用いたプログレスバーが表示されるようになる。
なお、「#」50個で100%を示す。

test-1.0.0.x86_64.rpmを新規インストールするときは以下の通り、「-ivh」オプションを使う。

# rpm -ivh test-1.0.0.x86_64.rpm
test ##################################################

アップグレード

インストール済のRPMパッケージをアップグレードする場合は「-U」オプションを指定する。
「-i」オプションのときと同様に、「-vh」オプションを付けると、「#」マークを用いたプログレスバーが表示されるようになる。
test-1.0.1.x86_64.rpmにアップデートするときは以下の通り、「-Uvh」オプションを使う。

# rpm -Uvh test-1.0.1.x86_64.rpm
test ##################################################

yumコマンドとのすみわけ

「-i」オプションによるインストールもできるが、yumコマンドの「localinstall」オプションを使うことでもRPMパッケージのインストールができる。
この違いについては、別途記述する。

アンインストール

「-e」オプションでインストール済のRPMパッケージをアンインストールが可能。
test-1.0.1.x86_64.rpmをアンインストールするときは、以下の通り。

# rpm -e test-1.0.1.el7.x86_64

依存等により、アンインストールしようとしているRPMパッケージが他のRPMで使用されている場合は、エラーによりアンインストールできない。
「--nodeps」オプションにより強制的にアンインストールすることもできるが、そうすると依存関係にあるプログラムが動作しなくなる可能性もあるので注意すること。

# rpm -e --nodeps test-1.0.1.el7.x86_64