1
/
5

yum installで学ぶ!yumの仕組み

はじめに

エンジニアのnorthmkyです。
業務ではシステムの運用保守チームに所属しているので断然サーバ周りの作業が多いということで今回はその中でもyumコマンドについてまとめてみました。

おそらくこれを読めば

  • yumrpmとの違いって?とりあえずyum使ってるけど...
  • yum install [package]って打つだけでなんでDL&Installできるの?

という疑問は少し解消されるかと思います。
まだまだ浅い知識なので間違っているところがあれば指摘いただけると嬉しいです。

yumとは

まずものすごく大雑把にいいますとyumは下記になります。

  1. パッケージ管理システム
  2. rpmというパッケージ管理システムをラッパーしている
    • yum = rpm + 「リポジトリ」による自動更新機能 + 依存関係の管理(検出だけじゃない)

yumRedHatディストリビューションのパッケージ管理システムです。
パッケージというのは「ソフトウェアを構成するファイルらをまとめたもの」で、設定ファイルやドキュメント、プログラム本体、プログラム本体が動くためのライブラリなどがそれにあたります。1

Linuxでは「パッケージ読み解き、ソフトウェアを正しく動作させるようにする」「パッケージの情報を管理する」ことでソフトウェアを使える/管理する仕組みを採用していて、今回取り上げるyumLinuxディストリビューションのなかでRedHat系のパッケージ管理システムとなります。

このyumですが実際裏側ではrpmというパッケージ管理システムを使っています。
rpmではできなかった点をyumができるようにしている」という立ち位置になっています。

この出来なかった点が冒頭に述べた

  1. リポジトリ」による自動更新機能
  2. 依存関係の管理(検出だけじゃない)

です。

リポジトリとは

意味のあるまとまりでパッケージを複数格納している場所のことです。
この場所には下記が格納されています。

パッケージが複数存在してもその場所はリポジトリとは言えません。メタ情報があってリポジトリとなります。2
yumではこのリポジトリの情報を元にパッケージを検索したり、installを行います。

yum/rpm/リポジトリの関係性

yumrpmリポジトリの配置場所との関係性は下記のようになっています。

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とは
に記載した

  1. パッケージ管理システム
  2. rpmというパッケージ管理システムをラッパーしている

が伝えることができていれば幸いです。

ネットではチートシートや「rpmよりyumをまずは使うべし」などのハウツーの記事は多いのですが、
改めてどういった仕組み、処理でインストールが行われているかの記事はあまり見なかったので試行錯誤しながら執筆しました。
少しでも知識の助けになれば幸いです。(そして私自身の正しい知識の定着のためにもご指摘頂けると非常に助かります...!!)

株式会社ラクスでは一緒に働く仲間を募集しています
同じタグの記事
今週のランキング