rpm と yum を今更理解したい
今日は1日コンソールとにらめっこしていました。私です。
yum
とかrpm
とかちゃんとわかっていないので、オラオラとコマンドを叩きまくっていました。
最終的に依存関係無視して強制インストールするという暴挙にもでました…
ここはエンジニアとしてちゃんと理解していないといけないと思って少しだけちゃんと勉強します。
rpm
rpmってなに?
「RedHat Package Manager」の略みたい。
Redhat系のディストリビューションで活躍するパッケージ管理システムの1つです!
パッケージの形式
ファイル名には命名規則があるっぽい。
こんな感じになってる。これで明日からファイル名を見ただけで「ほ〜バージョン4.3ですか…」とそれっぽいことが言えるようになる。
rpmコマンド
rpm
ではコマンドでパッケージを追加したり、削除したり、更新したりする。
簡単には以下のような感じ。
・追加-i
install
$ rpm -ivh <パッケージ名>
・更新-U
update
$ rpm -Uvh <パッケージ名>
・削除-e
erase(?)
$ rpm -e <パッケージ名>
あとは自分で調べてみてください。
ここまで読めば、一応パッケージをインストールしたり削除したりすることは出来るようになるはず。
でもrpm
はパッケージ管理システムなのだ。管理・・・?インストーラーとかではなく?
rpmは何を管理しているのか
一言で言うとrpmは依存関係を管理している。
「〇〇を使うには△△が必要だよ!」というのが依存関係。
例えると、「お化粧がしたい!」と思うとする。
rpmさんに「お化粧ができるようになりたい!」と相談すると、rpmさんは「お化粧を教えてあげるね!…でも『口紅』と『マスカラ』が最低限要るわ!出直してこい!」と言って依存関係を教えてくれるのです。
これはインストールするときも削除する時も同様で、「△△を消したい!」と言っても「〇〇で使ってるからダメ!」と指摘してくれるのです。
ここで大事なのは指摘してくれるというところ。
yum
rpm
よりも使う頻度が高いので、rpm
より目立つ彼。一体何をしているのでしょうか。
yumってなに?
yum
は実はやっている事の本質はrpm
と一緒です。というか内部ではrpmコマンドが実行されています。
では違うところは?最も違うのは自動で依存関係を解決してくれるというところです。
また、yum
を利用する際には、パッケージファイルを準備する必要はありません。ではインストールする実体はどこに?
その答えはリポジトリです。
リポジトリというのはたくさんのパッケージを集めて保管している場所です。
例えば安定したエンタープライズ向けの「EPEL」や最新バージョンが揃う「Remi」などが有名です。
rpmとの違い
大きくは3つの特徴があります。
依存関係の自動解決
これはさっきも言ったとおり、自動で依存関係を解決してくれます。
さっきの化粧の話でいうと、化粧道具一式買ってきてくれます。ほんとに居たらいい人通り過ぎて怖い。インストール時にパッケージ名で指定できる
rpm
はパッケージファイルを準備して(もしくはURL指定で)インストールを行うが、yum
はパッケージ名だけわかっていれば基本はOK。インストールされていないパッケージを参照、検索出来る
マシンに存在していないパッケージの情報を得ることが出来る。
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の違いと、何をやっているのかわかってなんとなくスッキリしましたね。