rpm と yum を今更理解したい


rpm と yum を今更理解したい

今日は1日コンソールとにらめっこしていました。私です。
yumとかrpmとかちゃんとわかっていないので、オラオラとコマンドを叩きまくっていました。
最終的に依存関係無視して強制インストールするという暴挙にもでました…
ここはエンジニアとしてちゃんと理解していないといけないと思って少しだけちゃんと勉強します。

rpm

rpmってなに?

「RedHat Package Manager」の略みたい。
Redhat系のディストリビューションで活躍するパッケージ管理システムの1つです!

パッケージの形式

ファイル名には命名規則があるっぽい。

こんな感じになってる。これで明日からファイル名を見ただけで「ほ〜バージョン4.3ですか…」とそれっぽいことが言えるようになる。

rpmコマンド

rpm ではコマンドでパッケージを追加したり、削除したり、更新したりする。
簡単には以下のような感じ。

・追加-iinstall

$ rpm -ivh <パッケージ名>

・更新-Uupdate

$ rpm -Uvh <パッケージ名>

・削除-eerase(?)

$ rpm -e <パッケージ名>

あとは自分で調べてみてください。
ここまで読めば、一応パッケージをインストールしたり削除したりすることは出来るようになるはず。
でもrpmはパッケージ管理システムなのだ。管理・・・?インストーラーとかではなく?

rpmは何を管理しているのか

一言で言うとrpmは依存関係を管理している。
「〇〇を使うには△△が必要だよ!」というのが依存関係。

例えると、「お化粧がしたい!」と思うとする。
rpmさんに「お化粧ができるようになりたい!」と相談すると、rpmさんは「お化粧を教えてあげるね!…でも『口紅』と『マスカラ』が最低限要るわ!出直してこい!」と言って依存関係を教えてくれるのです。

これはインストールするときも削除する時も同様で、「△△を消したい!」と言っても「〇〇で使ってるからダメ!」と指摘してくれるのです。
ここで大事なのは指摘してくれるというところ。

yum

rpm よりも使う頻度が高いので、rpmより目立つ彼。一体何をしているのでしょうか。

yumってなに?

yum は実はやっている事の本質はrpmと一緒です。というか内部ではrpmコマンドが実行されています。
では違うところは?最も違うのは自動で依存関係を解決してくれるというところです。

また、yumを利用する際には、パッケージファイルを準備する必要はありません。ではインストールする実体はどこに?
その答えはリポジトリです。

リポジトリというのはたくさんのパッケージを集めて保管している場所です。
例えば安定したエンタープライズ向けの「EPEL」や最新バージョンが揃う「Remi」などが有名です。

rpmとの違い

大きくは3つの特徴があります。

  1. 依存関係の自動解決
    これはさっきも言ったとおり、自動で依存関係を解決してくれます。
    さっきの化粧の話でいうと、化粧道具一式買ってきてくれます。ほんとに居たらいい人通り過ぎて怖い。

  2. インストール時にパッケージ名で指定できる
    rpm はパッケージファイルを準備して(もしくはURL指定で)インストールを行うが、yumはパッケージ名だけわかっていれば基本はOK。

  3. インストールされていないパッケージを参照、検索出来る
    マシンに存在していないパッケージの情報を得ることが出来る。
    rpmは依存しているパッケージ名はわかっても、そこからすぐにインストールしたり、情報を得ることが出来ない。

こんな便利機能を備えたのがyumです。なので基本的にはyumを使うことになります。

yumコマンド

簡単には以下のような形で使います。

・追加 install

$ yum install <パッケージ名>

・削除 erase

$ yum erase <パッケージ名>

・インストール出来るパッケージの一覧を確認 list

$ yum list

rpm と異なり、コマンドを打った後に、「本当にインストールしていい?」と基本的には聞いてくるので、返事をしてあげましょう。
こまかなコマンドについては調べてみてください。

yumとrpmの使い分け

「自動で依存関係を解決してくれるのならyumだけでいいじゃん!」と思ったそこのあなた。間違っていません。
基本的にはyumを使って管理をしていけばOKだと思います。

rpm を使うタイミングとしては、まずレポジトリに無いパッケージをインストールしたい時にはrpmを使うしか無いですよね。
@angel_p_57 さんから指摘頂いたので追記
レポジトリに無いパッケージでも、rpmファイルを準備すればyumコマンドでインストール可能みたいです。

$ yum install <RPAファイル名>

更にこの方法でインストールした場合、yum list installedでインストールしたパッケージ一覧を表示した際に、リポジトリ名が @XXX ( @base@epel等 ) ではなく installed となっていて区別できるそうです!yumはやっぱり出来るやつやで…
…じゃあrpmはいつ使うんだ? 皆さんの経験を教えてください!僕では経験不足!!
・・・インストール先がかなり特殊だとか、開発中の不安定なパッケージを試したいとか、そんなときでしょうか。

まとめ

  • rpmはRedhat系のディストリビューションで使われるパッケージ管理システム。
  • yumはrpmを拡張し、リポジトリという考え方で依存関係を自動的に解決する事ができるようになったもの。
  • 基本的にはyumを使っていれば問題ないが、時と場合に応じて使い分ける。

といったところでしょうか。
yumとrpmの違いと、何をやっているのかわかってなんとなくスッキリしましたね。