さくらの VPS など格安 VPS サービスが増えたおかげで、個人でサーバを利用することへのハードルがずいぶん下がりました。良い時代になったものだなーとオッサンみたいなことを感じています。
ところで、CentOS や Fedora などの Red Hat 系の Linux を使っていると rpm コマンドや yum コマンドはしょっちゅう使うと思いますが、どちらもソフトウェア(パッケージ)をインストールしたりアンインストールしたりするときに使うものなので、
と思いませんか?僕は思っていました。理解してしまえば何てことないのですが、Linux を使い始めの頃は基本的な事が分かっていなくて混乱していました。あの頃の自分に向けて、rpm と yum の違いと使い分けについてまとめてみます。よろしければ参考にしてください。
1. 結論 - 基本的に yum を使って、yum が使えないところを rpm で補う
今回は rpm と yum の「違いと使い分け」の部分に的を絞って書くつもりなので、細かいコマンドオプションなどは参考サイトを紹介するに留めようと思います。しかしそれでも少し長くなりそうなので、先に結論を書いておきます。
上のことが最初に頭に入っていると、後のことが理解しやすいです。また、頭を整理しやすくするため、目次も書いておきます。
2. 用語の整理 - パッケージ、リポジトリ、RPM データベース
本題に入る前に基本的な用語を整理しておきます。「RPM データベース」については普段あまり意識しませんが、知っておくとコマンドの内容を具体的にイメージできるようになると思い載せました。
3. rpm と yum の違い
rpm コマンドは、rpm 形式のパッケージを管理するときに使います。そして、yum コマンドも、rpm 形式のパッケージを管理するときに使います。実はこの点は同じなのです。
もう少し言うと、yum は内部で rpm を呼び出して使っています。そして rpm より高度な機能を提供しています。したがって、通常は yum を使ったほうが便利だと思います。主に下記のような違いがあります。
(2) インストール時のパッケージ名指定
4. パッケージ検索 - そもそも何の目的で何を調べたらよいのか?
さて、rpm や yum を使うと、パッケージをインストールしたりすることができますが、何かのパッケージをインストールするに先立って、パッケージを検索することがしばしばあります。
具体的な場面をイメージしていたほうが理解が進むと思いますので、パッケージを検索する主な場面を列挙してみます。
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
$ 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 編)
繰り返しになりますが、yum は rpm よりも高機能なので、ほとんどの場合 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. パッケージのアンインストール時の使い分け
インストール時と同様、rpm と yum とではアンインストール時の挙動が異なります。
まず、先に 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. もっと詳しく知りたい人へ
以上です。少し長くなってしまいましたが、もっと詳しく知りたい人には下記記事がオススメです。
また、rpm も yum もコマンドオプションがたくさんあります。僕はリファレンスとして下記サイトを使っています。
- 【 rpm 】 RPMパッケージをインストール/アンインストールする - Linuxコマンド集:ITpro
- 【 yum 】 パッケージを取得してインストール/アップデートをする - Linuxコマンド集:ITpro
ではでは。