はじめに
エンジニアのnorthmkyです。
業務ではシステムの運用保守チームに所属しているので断然サーバ周りの作業が多いということで今回はその中でもyum
コマンドについてまとめてみました。
おそらくこれを読めば
yum
とrpm
との違いって?とりあえずyum
使ってるけど...yum install [package]
って打つだけでなんでDL&Installできるの?
という疑問は少し解消されるかと思います。
まだまだ浅い知識なので間違っているところがあれば指摘いただけると嬉しいです。
yumとは
まずものすごく大雑把にいいますとyumは下記になります。
- パッケージ管理システム
- rpmというパッケージ管理システムをラッパーしている
yumはRedHat系ディストリビューションのパッケージ管理システムです。
パッケージというのは「ソフトウェアを構成するファイルらをまとめたもの」で、設定ファイルやドキュメント、プログラム本体、プログラム本体が動くためのライブラリなどがそれにあたります。1
Linuxでは「パッケージ読み解き、ソフトウェアを正しく動作させるようにする」「パッケージの情報を管理する」ことでソフトウェアを使える/管理する仕組みを採用していて、今回取り上げるyumはLinuxディストリビューションのなかでRedHat系のパッケージ管理システムとなります。
このyumですが実際裏側ではrpmというパッケージ管理システムを使っています。
「rpmではできなかった点をyumができるようにしている」という立ち位置になっています。
この出来なかった点が冒頭に述べた
- 「リポジトリ」による自動更新機能
- 依存関係の管理(検出だけじゃない)
です。
リポジトリとは
意味のあるまとまりでパッケージを複数格納している場所のことです。
この場所には下記が格納されています。
- 複数のパッケージ(
./*.rpm
) - ためのライブラリなどがそれにあたります。1ら(
./repodata
)
パッケージが複数存在してもその場所はリポジトリとは言えません。メタ情報があってリポジトリとなります。2
yumではこのリポジトリの情報を元にパッケージを検索したり、installを行います。
yum/rpm/リポジトリの関係性
yumとrpmとリポジトリの配置場所との関係性は下記のようになっています。
yumは
/etc/yum.repos.d/*.repo
に記載されているリポジトリ場所にあるパッケージらに対してrpm経由でDLしたり、インストールしたり、必要であればインストール時に依存関係のあるパッケージを検出して一緒にインストールしたりします。
逆をいえば、/etc/yum.repos.d/*.repo
以外のレポジトリは情報がないのでyumは取得することができませんので注意してください。
では、実際によく打つコマンドを例にしてどのようになっているか見てみます。
yum install
を見てみる
「このコマンド(ソフトウェア)、インストールしてないからインストールしよう」というのはよくあると思うので
今回はyum isntall [package]
を通してどんなことが行われているかを見ていきたいと思います。
大枠の流れは上記のようになっています。
今回はphpをインストールしてみたいと思います。 (OS:CentOS6)
こちらを実行すると、下記のようによく見る
インストールしますか?
という対話モードになります。 この中身を見ていきましょう。
1. ミラーサイトの中で一番地理的に近いミラーサーバを各レポジトリごとに探す
結果としてリポジトリの場所(URL)のほとんどが.jp
ドメインつきなため、一番地理的に近いミラーサイトをレスポンスを計測して選んだというのがわかります。
これはyumが、前述した/etc/yum.repos.d/*.repo
のリポジトリの情報からインストールするリポジトリの場所を決定しています。ではphpのパッケージが存在する 「base」というリポジトリの情報が記載されているCentOS-Base.repo
を見てみます。
*.repo
の中には基本的にはリポジトリ情報が複数記載されています。
mirrorlist
に設定されているURLを実際に叩くと、
ミラーサイトのリストが返ってきます。
このリストからyumは一番近い場所を選定して、リポジトリ内のパッケージを取得する、ということをしているようです。 今回はftp.jaist.ac.jp
でした。
2. 必要なパッケージ情報を取得する
phpパッケージを対象にしただけですが、実際には依存してる他パッケージもインストールの準備をしています。 パッケージが依存しているソフトウェアは、パッケージ(.rpm)のSPECファイルというパッケージのメタ情報(ソースバージョンなど)を記載したファイルに記載してあります。3 この情報をRPMデータベース(/var/lib/rpm
)4と呼ばれるパッケージの情報を保存しておくDBに登録し、install前に検索をかけ、依存関係の有無を見ています。
このような処理が走ったあとでDL&installが行われます。
おわりに
yumについてまとめてみました。
yumとは
に記載した
- パッケージ管理システム
- rpmというパッケージ管理システムをラッパーしている
が伝えることができていれば幸いです。
ネットではチートシートや「rpmよりyumをまずは使うべし」などのハウツーの記事は多いのですが、
改めてどういった仕組み、処理でインストールが行われているかの記事はあまり見なかったので試行錯誤しながら執筆しました。
少しでも知識の助けになれば幸いです。(そして私自身の正しい知識の定着のためにもご指摘頂けると非常に助かります...!!)