yum : Yellowing Updater Modified
rpm : Redhat Package Manager
パッケージ : ソフトウェアの一連のファイルをまとめたもの
リポジトリ : パッケージの保管場所
RPMデータベース : rpm形式のパッケージがインストールされると、/usr/lib/rpmに情報が格納される。このデータのまとまりのこと
かつて、Linuxプログラムの多くはソースコードとっして配布されていた。
このソースコードを、ユーザが必要なmanページ、構成ファイルなどと併せてビルドして1つのプログラム、あるいは一連のプログラムに組み込むという仕組みだった
最近では、事前にビルドされたプログラムを使用するのがほとんど
このプログラムのセットをパッケージと呼び、ディストリビューションによってパッケージの管理方法が異なる
ディストリビューションごとのパッケージ管理方法は以下のようになっている
Redhat系⇒RPM
Debian系⇒deb
FreeDSB⇒ports
Solaris⇒pkg
となっている。
これらのパッケージを管理するツールが、ディストリビューションによって用意されている
例えば、
RPM(RPM Package Manager)←超ややこしいけど、そういうこと
YUM
APT(Advanced Package Tool:デビアン系)
など。
YUMやRPMやAPTには、多くの共通点がある
- パッケージのインストールと削除を行うことができる
- インストールされているパッケージに関する情報はデータベースに保持される
- いずれも基本的なコマンドライン機能を備え、ツールを追加することでさらに便利になる
- インターネットからパッケージを取得できる
RPMパッケージは、それぞれ以下の規則により名前が付けられている
「パッケージ名 バージョン番号 リリース番号.アーキテクチャ.rpm」
アーキテクチャのリスト
アーキテクチャ |
説明 |
alpha |
Alpha |
i386 |
i386以降のx86 |
noarch |
機種に依存しない |
ppc |
PowerPC |
sparc |
SPARCStation |
src |
ソースファイル |
以降では、YUMとRPM焦点をあてる
※ちなみに、Yumに続くパッケージ管理ツールとして、DNF(Dandifled Yum)が登場している
これは、Yum3.4をフォーク↓後継ツールで、Yumの問題点であったドキュメントの整理と、依存関係のアルゴリズム改善、メモリ使用量の改善など多く改善がなされている
Fedora22では、デフォルトのパッケージ管理ツールにDNFが採用されていて、CentOS7などでも使用できる
上で、ソースコードをコンパイルしたバイナリと関連するファイルのことをパッケージと呼ぶ、とした。
が、ソースコード形式のパッケージ(SRPM)という一見意味不明なものがある。
SRPMとはRPMパッケージを作るためのソースで、SRPMをビルドすることでRPMパッケージを作成できる
RPMであればパッケージ作成者の意図通りのディレクトリ先や構成になるが、SRPMを編集すれば自分好みのRPMパッケージを作成できる
SRPMのファイル名は、プログラム名-バージョン.src.rpmとなっている
SRPMからプログラムをインストールするには、
なんと、インストールと同じ
rpm -ivh SRPM名
とすると、ソース→バイナリ→インストールまでやってくれる。お手軽。便利。
どこに展開されたかはrpm --showrc | grep _topdirでわかる
んで、なんかSRPM編集した場合(パッチを当てたり)
rpmbuild --rebuild SRPM名
とすると、バイナリファイルができる
あとは、このバイナリパッケージを見つけて、rpm -ivhとかでインストールすればよい。
どちらもパッケージ管理ツールであり、同じディストリビューションに用意されている
機能的にも同じように見えるが、少し異なる
YUMは、RPMに自動更新機能と依存関係の管理を含めたパッケージ管理機能を追加した物という認識で問題ない。
ざっくりいうとRPMの高機能バージョン
また、リポジトリと連携する機能がある(APTもそう)
つまり、
YUMはパッケージインストール時に依存関係を自動で解消し、必要なものも一緒にインストールしてくれる
RPMは、インストール時に、これに依存関係があることを把握はするが、依存関係を解決することまではいない。
更に、RPMは、インストール時に「パッケージ名 バージョン番号 リリース番号.アーキテクチャ.rpm」とrpmファイル名で指定しなければならない
YUMであれば、yum install gclというように、パッケージ名で指定できる
また、Yumはリポジトリを参照することにより、インストールされていないパッケージの情報を検索することができる
RPMはインストールされていないパッケージの情報検索には不向き(パッケージファイルを既にダウンロードしているか、パッケージファイルのURLがわかっていないと検索できない)
したがって、RPMはほしいものがどのパッケージで、どんな依存関係があって、どこにあるのか、というのを探すのがめんどくさい
しかし、上記のように、YUMはRPMの機能追加版のようなものであり、全く別物ではない。
実は、YUMは、内部でRPMを呼び出して使用している
基本的には、yumを使って、必要なときにrpmを使用するのが良い
最近はgithubにrpmとか置いてあったりするから、そういうのをダウンロードインストールするときはrpmを使用する
パッケージはどこにあるのか。
yumの場合、リポジトリを参照するので、リポジトリの場所を知る必要がある。
リポジトリの場所は、/etc/yum.repos.d/配下の.repoファイルに記述されている
(/etc/yum.confで/etc/yum.repos.d/以外にも指定できる)
この.repoファイルには、リポジトリの場所だけでなく、リポジトリの有効/無効など、GPG署名の有効/無効などリポジトリに関する情報が記述されている
典型的な.repoファイルは、標準パッケージ用、デバッグ・パッケージ用、ソース・パッケージ用の3セクションに分かれている
一般にディストリビューションのパッケージは異なる保管場所(ミラー)からそれぞれにコピーを入手することができる
そのためrepoファイルは、yumに対し、セクションごとのミラーの最新リストを検索する場所を伝えている
yumとrpmは、ローカルデータベースを使用してインストール済みのパッケージを判断する
ローカルデータベースに保管されたパッケージに関するメタデータは有効化されたリポジトリから取得される
ローカル側に保管された情報を部分的に消去するにはyum clean コマンドを、有効化された.repoの情報をローカルデータベースに作成するには yum makecacheを使用する
ちなみに、.rpmファイルとcreaterepoコマンドさえあれば、どのディレクトリでもリポジトリとして使用できる。
createrepoコマンドがメタデータを作っぽい
多分、今のところの自分の理解としては、
yumとrpmはともにローカルデータベースを参照してインストール済みのパッケージに対する参照を行うが、yumはレポジトリを参照することで未インストールのパッケージも参照できる
rpmは、ダウンロードしてないと未インストールのパッケージを参照できない(参照するにはURLが必要)
rpmは、ダウンロードしたパッケージはパスで指定してあげてインストールする形になる
- パッケージ検索時の使い分け(yum)
- パッケージ検索時の使い分け(rpm)
- パッケージのインストール
- パッケージのアンインストール
rpm は「-q」オプション(query の略)を付けて実行すると RPM データベース内を検索することができます。すなわち既にインストールされたパッケージの情報を検索できます。一方で、インストールされていないパッケージを検索しても、インストールされていない旨が表示されるだけです。
これに対して yum は、RPM データベース内に加えリポジトリも参照することができるので、まだインストールされていないパッケージの情報も検索することができます。
したがって、ほとんどの場合、yum だけ覚えていれば事足ります。
インストールされているパッケージと、(インストールされていないけれども)利用可能なパッケージを一覧表示します。
インストールしたいパッケージが、本当にまだインストールされていないか確認するときや、対象のパッケージが yum からインストール可能かどうかを調べるときに使います。
あるパッケージについて調べたいのだけれど、正確なパッケージ名が分からないときは「yum list | grep xxx」よりも「yum search」コマンドのほうをよく使います。
というのも、各パッケージの名称だけではなく概要についても表示してくれるので、同じようなパッケージ名が複数あるなかから目的とするパッケージを見つけ出すのに適しています。
また、例えば下記のように「yum search mysql」を実行すると、パッケージ名に「mysql」が含まれていなくても「mysql」に関連するパッケージまで一覧表示してることも「yum list」にはない特長です(例: php-pdo.x86_64)
パッケージの詳細情報を表示します。同じようなパッケージ名が複数あって目的とするパッケージを見つけ出す場面において、「yum search」が表示する情報だけでは不十分というときに使います
繰り返しになりますが、yum は rpm よりも高機能なので、ほとんどの場合 rpm よりも yum を使ったほうが便利であり、ほとんどの場合、yum だけ覚えていれば事足ります。
しかし、yum は使えず rpm しか使えないという場面もあります。
rpmでのパッケージ検索は、ローカルデータベース(/usr/lib/rpm???)しか参照しない(Installedしか見れない、Availableはない)
パッケージ内のファイルを表示させるとき、リポジトリに含まれていないパッケージを扱う場面でrpmコマンドが活躍する
パッケージ検索の基本となるオプションです。rpm コマンドに「-q」オプション(query の略)を付けて実行すると、RPM データベースに対して検索できます。また、インストールされていないパッケージを検索しようとすると、インストールされていない旨が表示されます。
該当するものをすべて表示します。grep と一緒に使うと便利です。
お気づきのとおり「yum list」コマンドと非常に似ています。あるパッケージが既にインストールされているか否かの確認や、インストールされているパッケージのバージョン確認に使います。
パッケージ内のファイルを一覧表示します。パッケージ内のファイルを表示する機能は yum にはないので、rpm を使う場面のひとつです。
引数に rpm パッケージファイル(拡張子が「.rpm」のファイル)を指定するときに必要です。インターネット上にある rpm パッケージファイルの URL を指定したり、ダウンロードした rpm ファイルを指定するときに使います。
これも yum にはない機能です。yum はリポジトリに含まれないパッケージに対してはコマンドを実行できないので、リポジトリに含まれないパッケージを検索するときにはこのオプションが役に立ちます。
パッケージの詳細情報を表示します。使う場面は「yum info」と似ていますが、表示される情報が異なります。
yumはyum install パッケージ名とするだけ
rpmは、-i(installの略)オプションを使う
よく使うのは、rpm -ivhとか、rpm -Uvhとか
-vは、詳細なログを表示させる
-hは、進捗状況を表示させる
-Uは、パッケージがインストール済みであればアップデート、未インストールであればインストールを行う
よく似たものに、-Fオプションがある
-Fは、インストール済みのパッケージのみをアップデートする
ちなみに、-qiとすると、同じiでも、検索して詳細情報(information)表示なので注意
- 特定のパッケージとそれに依存するすべてのパッケージをアンインストールする場合
yum remove パッケージ名
rpm -e パッケージ名
この場合、依存関係が発覚すると、エラーが出てアンインストールされない
これを無視する場合は、--nodepsオプションによって依存関係を無視してアンインストールを実行する
以上
yumは自動的にリポジトリからパッケージを取得するものの、インストールしてもrpmファイルはダウンロードしない。
ダウンロードしたい場合には、downloadonlyプラグインを使うとリポジトリからrpmパッケージをダウンロードできる
また、yumdownloaderコマンドを使ってもできる
downloadonlyは、リポジトリにある未インストールのパッケージをダウンロードする
yum install yum-plugin-downloadonly
yum install yum-downloadonly(RHEL5のみ)
でプラグインをダウンロードして、
yum install --downloadonly --downloaddir=ダウンロード先ディレクトリ パッケージ名
とする。
-downloaddir オプションを使用しない場合、デフォルトではファイルは /var/cache/yum/ 内の rhel-{arch}-channel/packages に保存されます。
しかし、これは未インストールのものしかダウンロードできない
インストール済みのパッケージをダウンロードするには、yumdownloaderが必要
yum install yum-utils
としてyumdownloaderをインストールして、
yumdownloader パッケージ名
とすると、リポジトリからとってくる
デフォルトでは、パッケージファイルはカレントディレクトリに保存されます。別のディレクトリを指定するには、--destdir オプションを使用します。
依存パッケージをダウンロードする必要がある場合は、--resolve オプションを付けてください。
--sourceとすると、ソースファイルをダウンロードする
ちなみに、、、、
RPM をインストールするのではなく、ダウンロードしてパッケージの内容を調べる必要がある場合には、rpm2cpio コマンドを使用してパッケージの内容を cpio アーカイブに変換すれば、その後に cpio コマンドを使って個々のファイル、またはパッケージに含まれるすべてのファイルを解凍することができます。リスト 26 では、この変換操作を gcl-selinux パッケージに対して行った後、パッケージから解凍されたファイル (およびディレクトリー) の内容を表示しています。rpm2cpio および cpio コマンドについての詳細は、それぞれの man ページを参照してください。
リスト26↓
[ian@echidna ~]$ yumdownloader gcl-selinux
Loaded plugins: presto, refresh-packagekit
gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64.rpm | 17 kB 00:00
[ian@echidna ~]$ mkdir gcl-selinux
[ian@echidna ~]$ cd gcl-selinux
[ian@echidna gcl-selinux]$ rpm2cpio ../gcl-selinux*.rpm | cpio -idv
./usr/share/selinux/packages/gcl
./usr/share/selinux/packages/gcl/gcl.pp
182 blocks
[ian@echidna gcl-selinux]$ find .
.
./usr
./usr/share
./usr/share/selinux
./usr/share/selinux/packages
./usr/share/selinux/packages/gcl
./usr/share/selinux/packages/gcl/gcl.pp
初心者の頃に知っておきたかったrpmとyumの違いと使い分け
↓詳細
Linuxの101試験対策