ご覧いただきありがとうございます。「server-beginner」を運営しているミツです。
今回の記事ではRedhat系LinuxOSで利用される、パッケージ操作コマンド「rpmコマンド」について解説していきます。
みなさんLinuxで普段はどのようにパッケージをインストールしていますか?
どの方法で?(全角15文字)
・パッケージをダウンロードしてインストーラでプログラムをクリック
・dnfやyumコマンドで依存関係全部解消して楽々にインストール
といった方法などがあるかと思います。
私は依存関係も自動で解消してパッケージをダウンロードしてくれるdnfコマンドを使用しています。
ただ商用環境や検証環境で必要最低限のものだけで検証したい場合は、rpmコマンドを使用しています。
rpmはコマンドラインでパッケージを指定して、パッケージをインストールします。
非常にシンプルで多機能ですが、オプションが多く、使いこなすには慣れが必要です。
ですが、オプションすべてを覚える必要はなく、初心者がよく使う組み合わせてを抜粋して実行例にて紹介しております。
そのため、ぜひ最後までご覧いただけますと幸いです。
rpmコマンドとは
rpm(Redhat Package Manager)コマンドはRPM形式のパッケージを操作するコマンドです。Redhat系(Rocky LinuxやCentosなど)のLinuxではrpmパッケージを利用してパッケージをインストールします。
Linux
rpmコマンドはインストールや削除など非常に多機能で便利です。
指定したパッケージのみをインストールし、パッケージの間の依存関係やファイルの重複などもチェックしてくれます。
ただ注意点として、チェックするだけで依存関係は自分で解消する必要があります。
依存関係が解消できないと指定したパッケージがインストールできないため、ライブラリまたはパッケージを調べる必要があります。
RPMコマンドポイント
・RPMパッケージに関する操作ができる
・dnfやyumコマンドと違い、指定したパッケージのみインストールする
・依存関係のチェックはするが、自動解決はしない
・依存するライブラリやパッケージは自分で探す必要がある
依存関係を自動で解消し、インストールしたい場合はdnfコマンドを利用します。
過去執筆した記事がありますので、下記URLをご参考ください。
.rpmパッケージの種類
拡張子「.rpmのパッケージ」をインストールするにあたって以下2つのパッケージがあります。
rpmパッケージ(バイナリ)
ソードコードがコンパイル済みRPMパッケージです。
RedHat系のパッケージは”rpm”という拡張子で区別され、ファイル名は”ー”で区切られた以下のような情報により構成されています。
今回の例ではopenssh-serverパッケージを例として、下記のような書式になっています。
パッケージ
パッケージファイルネーム:openssh-server-8.0p1-6.el8_4.2.x86_64.rpm
パッケージ名:openssh-server
パッケージのバージョン:8.0p1
パッケージリリース:6.el8_4.2
アーキテクチャ:x86_64
コマンドの書式&オプション
それでは、書式、オプション、実行例を紹介していきます。
書式
rpm [オプション] パッケージ名
オプション
操作オプション | 説明 |
-i | 指定したパッケージファイルをインストールします |
-e | package_name パッケージpackage_nameを削除します |
-U | 指定したパッケージをアップグレードするかパッケージをインストールする。新しいバージョンをインストールすると古いパッケージは削除されます。 |
-F | 以前のバージョンが現在インストールされている場合にのみパッケージを更新する |
-h(—hash) | アスタリスクで、インストール進行状況を表示します |
-v | 詳しい情報を表示します |
--percent | インストールの進行状況をパーセンテージで表示します |
--test | 実施にはインストールせず、衝突してしまう可能性のあるファイルをチェックして表示します |
--replacepkgs | インストール済みのパッケージを無視してインストールします |
--replacefiles | ファイルの重複を無視してインストールする |
--oldpackege | ダウングレードを許可し、インストールします。ですが、パッケージにより依存関係や競合問題が出る場合があります。 |
--force | 依存関係等でインストールできない際に、強制的にパッケージをインストールすることができます |
情報検索オプション | |
-q | パッケージに関する情報を表示します |
-f | ファイルが含まれていたパッケージに関する情報を表示します |
-i | パッケージに関する情報を表示します |
-a | インストール済みパッケージを全て表示します |
実行例
指定したパッケージをインストールする
パッケージをインストールするには「-i」を使用します。
「-i」だけだとコマンド実行後プロンプトしか帰ってきません。
そのため進行状況と詳細情報を表示するために、-v,-hを合わせて使用します。
#rpm -ivh パッケージ名
ポイント
RPMパッケージにGnuPGを使った署名が行われていない場合出る警告です。
ただインストールが失敗することはありませんので、気になる場合は、 「--nosignature」オプションを付けてrpmコマンドを実行する必要があります。
#rpm ivh --noeignature パッケージ名
インストール済みのパッケージを削除します
指定するパッケージはインストールされているrpmパッケージを指定します。
#rpm -evh パッケージ名
インストール済みのパッケージをすべて表示します
インストール済みのパッケージを表示するには「-qa」を利用します。
#rpm -qa パッケージ名
「-qa」だけではインストール済みのパッケージがすべて表示されてしまいます。
特定のパッケージを調べるには「grep」コマンドを利用して検索します。
#rpm -qa | grep パッケージ名
パッケージに含まれるファイルをすべて表示します
パッケージに含まれるファイルをすべて表示します。
インストール前にどういったファイルがインストールされるか、どこに配置されるかなど調べることができます。
#rpm -qlp package.rpm
ファイルが入っていたパッケージに関する情報を表示します
指定したファイルが入っていたパッケージに関しては「-qif」を指定します。
例えば特定のファイルが破損した場合再インストールしたい場合に、どのパッケージからインストールすれば良いか調べることができます。
#rpm -qif パッケージ名
パッケージの詳細情報を調べます
パッケージの詳細情報を調べるには「-qip」を利用します。下記例ではopenssh-serverがどういったパッケージなのか調べています。
#rpm -qip パッケージ名
パッケージをインストールする前に、パッケージに関する情報を知ることができます。
パッケージ名だけでどういった役割をしているかわからない場合は、summaryとDescriptionをチェックします。
パッケージをアップグレード
パッケージがない場合
古いパッケージがない状態で、「-U」を利用すると新規インストールします。
#rpm -Uvh パッケージ名
古いバージョンのパッケージがインストールされている場合
逆に古いバージョンのパッケージがインストールされている場合に「-U」を使用すると古いパッケージは削除され、新しいバージョンがインストールされます。
強制的にインストール
古いバージョンのパッケージをインストールする場合、パッケージが依存しているライブラリや、パッケージが依存性の欠如でインストールできない場合があります。
そのため必要に応じて関連ライブラリやパッケージなどダウンロードしてくる必要があります。
ですが依存を解消したとしても、新しいバージョン別のパッケージと競合したり、不具合の元となります。
そのためバージョン別にインストールするのではなく、どのバージョンを使うか検討した上で使用することが大事です。
依存関係無視してインストールしたい場合は「--force --nodeps」を利用します・
rpmパッケージの場所がわからない時
パッケージをダウンロードする時、ログインしているユーザのダウンロードディレクトリにファイルが格納されます。
どこにあるかわからない場合はfindコマンドで調べることができます。
#find / -name ¥*.rpm
findコマンドの使い方については過去執筆しているので、興味ある方はぜひご参考いただければと思います。
まとめ
本記事は以上となります。
Redhat系OSにて新しいパッケージのインストールや削除をする場合に、rpmコマンドを利用します。
多機能で柔軟な使い方もできるので、ぜひ試して見てください!
商用環境ではどう使われる?
商用環境のサーバでは不要なパッケージやサービスは、インストールや起動しないようにします。
そのため必要最低限のパッケージをインストールする場合に、rpmコマンドを利用します。
dnfコマンドは個人や会社での検証環境で検証する際に利用します。
ただrpmコマンドは状況に応じて使い所が変わってくるので、柔軟使っていってください。
書籍でも豊富に情報があるので、ぜひ色々試していってください。