読者です 読者をやめる 読者になる 読者になる

yum とか rpm とかよくわからなかった

普段何気なく使っている yumrpm について、何も理解できていなかったのでちょっとだけ概要まとめました。
具体的なコマンドについては書きません。

パッケージ管理システムってなに?

パッケージ管理システムは、その名の通りパッケージを管理するシステムです。
ではパッケージとはなんなのかという話になりますが、簡単に言うとアプリケーションを実行するために必要な情報をまとめたものです。
以下のような情報によって構成されます。

  • コンパイル済みのプログラム本体(バイナリ)
  • プログラムが動作するために必要なライブラリ
  • プログラムが動作するために必要な設定ファイル
  • ドキュメント

なんでパッケージの管理が必要なの?

あるパッケージを使用するために別のパッケージやライブラリが別途必要になるケースがあり、このような関係を依存関係と呼びます。
パッケージ管理システムはこの依存関係をうまいこと解決してくれます。
もちろん、このようなシステムに頼らず自分の手で依存関係の解決を行うことも可能ですが、(各パッケージのインストールの順序なども含め)依存関係の把握が必要であったり、依存関係にあるプログラムを削除してしまうなどのトラブルが起きたりで何かと苦労します。
パッケージ管理システムはこのような問題を解決します。

rpm とは?

パッケージ管理システムです。
自分の手元に必要なパッケージが全て揃っていれば、コマンド一つで正しい順序でインストールを行ってくれます。
逆に言えば、全て揃っていなければインストールは成功しません。
何か依存関係にあるパッケージが欠けていた場合、それが欠けていることを伝えてくれるだけです。
また、別のパッケージが依存しているパッケージを削除しようとした場合にもそれを伝えてくれます。

上で'自分の手元'という表現をしましたが、この'自分の手元'にあるかどうかをRPMデータベースで確認することができます。
RPMデータベースにはインストール済みのパッケージに関する情報が詰め込まれていて、 依存関係の情報などが含まれています。
コマンドでクエリを投げることによって、データベースからそれらの情報を取得することができます。
RPMでは、パッケージをインストールしたタイミングでそのパッケージに関する情報をデータベースに格納することによってパッケージの管理を行います。

rpm コマンドでパッケージをインストールするまでの流れは例えばこんな感じ

  1. ◯◯をインストールしたい
  2. rpm パッケージ配布サイトなどでインストールしたパッケージを探す
  3. 2で見つけたパッケージをインストールしたい環境にダウンロードする
  4. 3でダウンロードしたパッケージを指定してインストールコマンドを実行
  5. 依存関係に問題があれば、調査してもう一度インストールコマンドを実行(成功するまで繰り返し)

yum とは?

こちらも rpm 同様パッケージ管理システムです。
いくつか rpm よりも優れている点があります。

  • RPMデータベース以外に、インターネット上に存在するリポジトリも検索対象に含める
  • 依存関係にあるパッケージを自動でインストールしてくれる

似たようなことをするコマンドですが、上記のようなメリットから yum を使えるときは yum を使っておくにこしたことはない気がします。
リポジトリにパッケージが存在しない場合などは rpm でインストールするしかありません。

インターネット上に存在するリポジトリも検索対象に含めると書きましたが、正確には検索対象に含まれているリポジトリしか検索しません。
検索対象に含めるには、/etc/yum.repos.d にリポジトリのIDやURLなどの情報を追加する必要があります。

yum コマンドでパッケージをインストールするまでの流れは例えばこんな感じ

  1. ◯◯をインストールしたい
  2. yum の検索コマンドを使ってリポジトリを検索してみる
  3. それっぽいものが見つかる
  4. パッケージの詳細を確認する yum コマンドを実行して求めているものか確認する
  5. 4で見つけたパッケージを yum のインストールコマンドでインストール
  6. 依存関係は勝手に解決してくれる

おわり

何かインストールしようと思ってもググれば1行や2行で簡単にインストールできてしまうことも多かったので、 rpmyum がそれぞれどこからパッケージを見つけてくるのか、どんな動きをしているのか、どんな違いがあるのか、なんていうことに関しては完全に思考停止していましたが、ほんの少しだけ触れることができたかなあと思います。