読者です 読者をやめる 読者になる 読者になる

彼女からは、おいちゃんと呼ばれています

ウェブ技術や日々考えたことなどを綴っていきます

初心者の頃に知っておきたかった rpm と yum の違いと使い分け

Linux

さくらの VPS など格安 VPS サービスが増えたおかげで、個人でサーバを利用することへのハードルがずいぶん下がりました。良い時代になったものだなーとオッサンみたいなことを感じています。

ところで、CentOSFedora などの Red Hat 系の Linux を使っていると rpm コマンドや yum コマンドはしょっちゅう使うと思いますが、どちらもソフトウェア(パッケージ)をインストールしたりアンインストールしたりするときに使うものなので、

どうして同じようなのが 2つもあるの?どう違うの?ややこしくない?

と思いませんか?僕は思っていました。理解してしまえば何てことないのですが、Linux を使い始めの頃は基本的な事が分かっていなくて混乱していました。あの頃の自分に向けて、rpmyum の違いと使い分けについてまとめてみます。よろしければ参考にしてください。

1. 結論 - 基本的に yum を使って、yum が使えないところを rpm で補う

今回は rpmyum の「違いと使い分け」の部分に的を絞って書くつもりなので、細かいコマンドオプションなどは参考サイトを紹介するに留めようと思います。しかしそれでも少し長くなりそうなので、先に結論を書いておきます。

結論

  • rpmyum は別々のものではない。yum は内部で rpm を呼び出して、rpm よりもさらに高度な機能を提供しているもの
  • yum のほうが rpm よりも高機能なので、yum が使える場面では yum を使ったほうが便利。rpmyum が使えない場面で使う

上のことが最初に頭に入っていると、後のことが理解しやすいです。また、頭を整理しやすくするため、目次も書いておきます。

rpmyum の違いと使い分け

  1. 結論 - 基本的に yum を使って、yum が使えないところを rpm で補う
  2. 用語の整理 - パッケージ、リポジトリRPM データベース
  3. rpmyum の違い
  4. パッケージ検索 - そもそも何の目的で何を調べたらよいのか?
  5. パッケージ検索時の使い分け(yum 編)
  6. パッケージ検索時の使い分け(rpm 編)
  7. パッケージのインストール(またはアップデート)時の使い分け(yum 編)
  8. パッケージのインストール(またはアップデート)時の使い分け(rpm 編)
  9. パッケージのアンインストール時の使い分け
  10. もっと詳しく知りたい人へ

2. 用語の整理 - パッケージ、リポジトリRPM データベース

本題に入る前に基本的な用語を整理しておきます。「RPM データベース」については普段あまり意識しませんが、知っておくとコマンドの内容を具体的にイメージできるようになると思い載せました。

パッケージ
ソフトウェアの一連のファイルをまとめたもの
リポジトリ
パッケージを集めて保管している場所。インターネット上にいろいろなリポジトリが存在する
RPM データベース
rpm 形式のパッケージがインストールされると、その情報は「/usr/lib/rpm」に格納される。このデータのまとまりを「RPM データベース」という

3. rpmyum の違い

rpm コマンドは、rpm 形式のパッケージを管理するときに使います。そして、yum コマンドも、rpm 形式のパッケージを管理するときに使います。実はこの点は同じなのです。

もう少し言うと、yum は内部で rpm を呼び出して使っています。そして rpm より高度な機能を提供しています。したがって、通常は yum を使ったほうが便利だと思います。主に下記のような違いがあります。

(1) 依存関係の解決

  • rpm は依存関係のあるパッケージを自動ではインストールしてくれない
  • yum は依存関係のあるパッケージを自動でインストールしてくれる

(2) インストール時のパッケージ名指定

  • rpm を使ってパッケージをインストールする場合には、rpm パッケージファイル(拡張子が「.rpm」のファイル)の完全な名前(または URL)を指定する必要がある(例えば「gcl-2.6.8-0.6.2.20090701cvs.fc12.x86_64.rpm」など)
  • yum を使ってパッケージをインストールする場合に必要なのはパッケージ名のみ(例えば「gcl」など)

(3) インストールされていないパッケージの検索

  • yumリポジトリを参照することにより、インストールされていないパッケージの情報も検索することができる
  • rpm はインストールされていないパッケージの情報検索には不向き(パッケージファイルを既にダウンロードしているか、パッケージファイルの URL が分かっていないと検索できない)

4. パッケージ検索 - そもそも何の目的で何を調べたらよいのか?

さて、rpmyum を使うと、パッケージをインストールしたりすることができますが、何かのパッケージをインストールするに先立って、パッケージを検索することがしばしばあります。

具体的な場面をイメージしていたほうが理解が進むと思いますので、パッケージを検索する主な場面を列挙してみます。

  1. インストールしたい対象のパッケージが、本当にまだインストールされていないのか(念のため)確認するとき
  2. 対象のパッケージが yum からインストール可能か確認するとき
  3. yum からインストール可能だとして、インストールされるバージョンはいくつかを確認するとき(yum が古いバージョンにしか対応していない場合がある)
  4. 対象のパッケージの正確なパッケージ名を確認するとき(同じような名前がたくさんある場合がある)

5. パッケージ検索時の使い分け(yum 編)

rpm は「-q」オプション(query の略)を付けて実行すると RPM データベース内を検索することができます。すなわち既にインストールされたパッケージの情報を検索できます。一方で、インストールされていないパッケージを検索しても、インストールされていない旨が表示されるだけです。

これに対して yum は、RPM データベース内に加えリポジトリも参照することができるので、まだインストールされていないパッケージの情報も検索することができます。

したがって、ほとんどの場合、yum だけ覚えていれば事足ります。以下、よく使う yum コマンドを説明します。

(1) yum list コマンド

インストールされているパッケージと、(インストールされていないけれども)利用可能なパッケージを一覧表示します。

インストールしたいパッケージが、本当にまだインストールされていないか確認するときや、対象のパッケージが yum からインストール可能かどうかを調べるときに使います。

$ yum list mysql
...
Installed Packages
mysql.x86_64                     5.0.77-4.el5_6.6                      installed

Available Packages
mysql.i386                       5.0.77-4.el5_6.6                      updates  

ワイルドカードgrep と併せて使うこともできます。

$ yum list mysql*
...
Installed Packages
mysql.x86_64                            5.0.77-4.el5_6.6               installed
mysql-server.x86_64                     5.0.77-4.el5_6.6               installed

Available Packages
(中略)
mysql-devel.i386                        5.0.77-4.el5_6.6               updates  
mysql-devel.x86_64                      5.0.77-4.el5_6.6               updates  
mysql-test.x86_64                       5.0.77-4.el5_6.6               updates  
$ yum list | grep mysql
mysql.x86_64                               5.0.77-4.el5_6.6            installed
mysql-server.x86_64                        5.0.77-4.el5_6.6            installed
php-mysql.x86_64                           5.1.6-27.el5_5.3            installed
(中略)
php53-mysql.x86_64                         5.3.3-1.el5_6.1             updates  
qt4-mysql.x86_64                           4.2.1-1                     base     
rsyslog-mysql.x86_64                       3.22.1-3.el5_6.1            updates  

(2) yum search コマンド

あるパッケージについて調べたいのだけれど、正確なパッケージ名が分からないときは「yum list | grep xxx」よりも「yum search」コマンドのほうをよく使います。

というのも、各パッケージの名称だけではなく概要についても表示してくれるので、同じようなパッケージ名が複数あるなかから目的とするパッケージを見つけ出すのに適しています。

また、例えば下記のように「yum search mysql」を実行すると、パッケージ名に「mysql」が含まれていなくても「mysql」に関連するパッケージまで一覧表示してることも「yum list」にはない特長です(例: php-pdo.x86_64)

$ yum search mysql
Loaded plugins: etckeeper, fastestmirror

================================ Matched: mysql ================================
mod_auth_mysql.x86_64 : Basic authentication for the Apache web server using a
                      : MySQL database.
qt-MySQL.x86_64 : Qt の SQL クラス用 MySQL ドライバ
MySQL-python.x86_64 : MySQL インターフェイス
(中略)
php-pdo.x86_64 : A database access abstraction module for PHP applications
php-pear-MDB2-Driver-mysql.noarch : MySQL MDB2 driver
php53-mysql.x86_64 : A module for PHP applications that use MySQL databases
php53-pdo.x86_64 : A database access abstraction module for PHP applications
qt4-mysql.x86_64 : MySQL drivers for Qt's SQL classes
...

(3) yum info

パッケージの詳細情報を表示します。同じようなパッケージ名が複数あって目的とするパッケージを見つけ出す場面において、「yum search」が表示する情報だけでは不十分というときに使います。

$ yum info mysql
Loaded plugins: etckeeper, fastestmirror
Installed Packages
Name       : mysql
Arch       : x86_64
Version    : 5.0.77
Release    : 4.el5_6.6
Size       : 8.1 M
Repo       : installed
Summary    : MySQL のクライアントプログラムと共有ライブラリ。
URL        : http://www.mysql.com
License    : GPLv2 with exceptions
Description: MySQL is a multi-user, multi-threaded SQL database server. MySQL is
           : a client/server implementation consisting of a server daemon
           : (mysqld) and many different client programs and libraries. The base
           : package contains the MySQL client programs, the client shared
           : libraries, and generic MySQL files.

Available Packages
Name       : mysql
Arch       : i386
(以下略)

6. パッケージ検索時の使い分け(rpm 編)

繰り返しになりますが、yumrpm よりも高機能なので、ほとんどの場合 rpm よりも yum を使ったほうが便利であり、ほとんどの場合、yum だけ覚えていれば事足ります。

しかし、yum は使えず rpm しか使えないという場面もあります。それがどういう場面かは後述するとして、rpm のよく使うオプションを見ていきます。

(1) -q オプション(query の略)

パッケージ検索の基本となるオプションです。rpm コマンドに「-q」オプション(query の略)を付けて実行すると、RPM データベースに対して検索できます。また、インストールされていないパッケージを検索しようとすると、インストールされていない旨が表示されます。

$ rpm -q mysql
mysql-5.0.77-4.el5_6.6

$ rpm -q foo
パッケージ foo はインストールされていません。

この -q オプションは、以下のオプションと一緒に使うことが多いです。

(2) -a オプション(all の略)

該当するものをすべて表示します。grep と一緒に使うと便利です。

お気づきのとおり「yum list」コマンドと非常に似ています。あるパッケージが既にインストールされているか否かの確認や、インストールされているパッケージのバージョン確認に使います。

$ rpm -qa | grep  mysql
mysql-5.0.77-4.el5_6.6
php-mysql-5.1.6-27.el5_5.3
mysql-server-5.0.77-4.el5_6.6

(3) -l オプション(list の略)

パッケージ内のファイルを一覧表示します。パッケージ内のファイルを表示する機能は yum にはないので、rpm を使う場面のひとつです。

$ rpm -ql mysql
/etc/ld.so.conf.d/mysql-x86_64.conf
/etc/my.cnf
/usr/bin/msql2mysql
(中略)
/usr/share/mysql/swedish/errmsg.sys
/usr/share/mysql/ukrainian
/usr/share/mysql/ukrainian/errmsg.sys

(4) -p オプション

引数に rpm パッケージファイル(拡張子が「.rpm」のファイル)を指定するときに必要です。インターネット上にある rpm パッケージファイルの URL を指定したり、ダウンロードした rpm ファイルを指定するときに使います。

これも yum にはない機能です。yumリポジトリに含まれないパッケージに対してはコマンドを実行できないので、リポジトリに含まれないパッケージを検索するときにはこのオプションが役に立ちます。

具体的な例を挙げると、以前 紹介した Webtatic リポジトリ(正確にはリポジトリの場所を示した repo ファイル)は rpm 形式のパッケージとして提供されています。このパッケージの内容を表示させるためには下記のようにします。

# rpm -qpl http://repo.webtatic.com/yum/centos/5/latest.rpm
warning: ... signature: NOKEY, key ID xxxxxxxx
/etc/pki/rpm-gpg/RPM-GPG-KEY-webtatic-andy
/etc/yum.repos.d/webtatic.repo
/usr/share/doc/webtatic-release-5
/usr/share/doc/webtatic-release-5/GPLv2

(5) -i オプション(information の略)

パッケージの詳細情報を表示します。使う場面は「yum info」と似ていますが、表示される情報が異なります。

$ rpm -qi mysql
Name        : mysql                        Relocations: (not relocatable)
Version     : 5.0.77                            Vendor: CentOS
Release     : 4.el5_6.6                     Build Date: 2011年05月10日 07時18分09秒
Install Date: 2011年05月28日 23時55分32秒      Build Host: builder10.centos.org
Group       : Applications/Databases        Source RPM: mysql-5.0.77-4.el5_6.6.src.rpm
Size        : 8451667                          License: GPLv2 with exceptions
Signature   : DSA/SHA1, 2011年05月11日 19時13分36秒, Key ID a8a447dce8562897
URL         : http://www.mysql.com
Summary     : MySQL のクライアントプログラムと共有ライブラリ。
Description :
MySQL is a multi-user, multi-threaded SQL database server. MySQL is a
client/server implementation consisting of a server daemon (mysqld)
and many different client programs and libraries. The base package
contains the MySQL client programs, the client shared libraries, and
generic MySQL files.

以上が rpm のよく使うオプションです。まとめると、パッケージ内のファイルを表示させる場面と、リポジトリに含まれていないパッケージを扱う場面では、yum ではなく rpm を使います。

7. パッケージのインストール(またはアップデート)時の使い分け(yum 編)

yum はパッケージをインストールする際に、依存関係のあるパッケージを自動でインストールしてくれます。一方 rpm は依存関係のあるパッケージを自動でインストールしてくれません。したがって、パッケージのインストール時には、通常、 rpm ではなく yum を使います。

なお、パッケージの検索については root ユーザ以外でも可能ですが、インストール(またはアップデート)については root ユーザで行ってください。

# yum install mysql
# yum update mysql

8. パッケージのインストール(またはアップデート)時の使い分け(rpm 編)

リポジトリに含まれていないパッケージを扱う場面では yum は使えないので、リポジトリに含まれていないパッケージをインストールする際には rpm を使います。

よく使うオプションは下記のとおりです。

-i オプション(install の略)
パッケージをインストールする
-v オプション(verbose の略)
詳細なログを表示させる
-h オプション(hash mark の略)
進捗状況を表示させる
# rpm -ivh http://repo.webtatic.com/yum/centos/5/latest.rpm
warning: /var/tmp/rpm-xfer.JhDMCy: Header V3 DSA signature: NOKEY, key ID cf4c4ff9
Preparing...                ########################################### [100%]
   1:webtatic-release       ########################################### [100%]

また、既に入っているパッケージをアップデートする場合は「-U」オプションを使います。このオプションを使うとパッケージが既に入っている場合にはアップデートし、入っていない場合には新規にインストールするので、実際にはアップデートでも新規インストールでも使うことが多いです。

# rpm -Uvh http://repo.webtatic.com/yum/centos/5/latest.rpm

9. パッケージのアンインストール時の使い分け

インストール時と同様、rpmyum とではアンインストール時の挙動が異なります。

まず、先に yum からですが、「yum remove」コマンドでパッケージをアンインストールできます。あるパッケージをアンインストールしようとして、当該パッケージが他のパッケージで使われているとき、依存しているパッケージも一緒に削除されます。

# yum remove vim-common

次に rpm について、「-e」オプションを付けるとパッケージをアンインストールできます。あるパッケージをアンインストールしようとして、当該パッケージが他のパッケージで使われているとき、エラーメッセージが表示されてパッケージのアンインストールは行われません。

# rpm -e vim-common

ただし「--nodeps」オプションを付けた場合は依存関係のチェックは省略されるので、対象となるパッケージのみをアンインストールできます。

#rpm -e --nodeps vim-common

さて、使い分けという観点からいうと、通常は依存関係も考慮してアンインストールすると思うので、yum で問題ないはずです。

しかし、例えば、パッケージに含まれるファイルを誤って削除してしまって、にっちもさっちも行かなくなった場合などでは、通常は

# yum reinstall vim-common

などとして再インストールで解決することも多いですが、それでも解決しないときは問題のあるパッケージをいったん削除してから新たにインストールする方法が考えられます。

そのような場面では、問題のあるパッケージのみをアンインストールするために

#rpm -e --nodeps vim-common

が使われます。

ということくらいですかねー。僕自身あまりアンインストールの経験がないのでこのくらいしか分かりません。すみません...

10. もっと詳しく知りたい人へ

以上です。少し長くなってしまいましたが、もっと詳しく知りたい人には下記記事がオススメです。

また、rpmyum もコマンドオプションがたくさんあります。僕はリファレンスとして下記サイトを使っています。

ではでは。