RPMパッケージの情報を調べるには
RPMパッケージでプログラムをインストール/アップデート/アンインストールする場合、システムに入っているRPMパッケージのバージョン番号を調べる必要がある。
インストール済みのパッケージを調べるには、「-qa」オプション付きでrpmコマンドを実行する。ただし、そのまま実行すると、システムにインストールされている全RPMパッケージが表示されるので、grepコマンドと組み合わせて、目的のパッケージを検索するといい。
例えば、BINDのRPMパッケージを表示するには、以下のコマンドを実行する。
# rpm -qa | grep bind |
RPMパッケージの情報を表示するには、「-qi」オプションを使用する。
# rpm -qi bind |
インストールされたRPMパッケージのディレクトリを調べるには、「-ql」オプションを使用する。
# rpm -ql bind |
また、プログラムなどがどのRPMパッケージに入っているかを調べるには、「-qf」オプションを使用する。
# rpm -qf /etc/rc.d/init.d/named |
プログラムをi686に最適化するには
「i386用」となっているRPMは、x86系CPUを搭載しているPCのほとんどで利用できる。しかし、i386用は最大公約数的なものであり、最新のCPUの機能を十分に活用しているとはいえない。そこで、SRPMからi686に最適化したRPMファイルを作成し、それをインストールする手順を紹介する。i686に最適化したからといって必ずしも体感速度が向上するわけではないが、数値演算を多用するプログラムなどは処理時間が短くなる可能性がある。
今回は、OpenOffice.orgをi686に最適化してみる。使用したディストリビューションはFedora Core 2だ。Fedora Core 2のFTPサイトからFedora Projectが作成したOpenOffice.orgのSRPMファイルをダウンロードする。Fedora Core 2が採用しているのは、OpenOffice.org 1.1.1で、ファイル名はopenoffice.org-1.1.1-4.src.rpmだ。
ダウンロードしたファイルを適当なディレクトリに保存し、rpmbuildコマンドでRPMファイルを作成する。その際に、「--target i686」というオプションを付ける。これが、i686に最適化したRPMファイルを作成する指定だ。ちなみに、x86系のCPUで指定可能なオプションには、以下のようなものがある。
| オプション |
対応CPU |
| i386 | i386およびその互換CPU |
| i486 | i486およびその互換CPU |
| i586 | Pentium、MMX Pentiumおよびその互換CPU |
| i686 | Pentium Pro、Pentium II、Pentium III、Pentium4、Celeronなど |
| k6 | K6、K6-2、K6-III |
| athlon | Athlon、Athlon MP、Athlon XP |
| x86_64 | Opteron、Athlon64、Xeon(EM64T) |
rootになって以下のコマンドを実行すると、i686に最適化したRPMファイルが作成される。
# rpmbuild --rebuild --target i686 openoffice.org-1.1.1-4.src.rpm |
OpenOffice.orgは非常に大きなプログラムなので、RPMファイルの作成には長い時間が必要となる。1GHzのCeleronで実行したところ、14時間以上かかった。また、リビルドにはディスクにかなりの空き容量が必要だ(7GBの空きがあるシステムでリビルドに成功)。
RPMファイルは、/usr/src/redhat/RPMS/i686というディレクトリに作成される。
# cd /usr/src/redhat/RPMS/i686 |
RPMファイルは、以下のようにインストールする。ファイル名に「debuginfo」と入ったRPMファイルも作成されるが、これはインストールする必要はない。また、使用したシステムでは一部のファイルがコンフリクトしているというエラーメッセージが表示されたため、--forceオプションを付けてアップデートした。
# rpm -Uhv --force openoffice.org-1.1.1-4.i686.rpm openoffice.org-i18n-1.1.1-4.i686.rpm openoffice.org-libs-1.1.1-4.i686.rpm |
インストールされているファイルをオリジナルと比較するには
システムのクラックやウイルス感染、操作ミスなどによって、システムにとって重要なファイルが変更されている可能性があるときは、rpmコマンドを-Vオプション付きで実行することにより、インストールされているファイルがインストール直後と異なっているかどうかを比較できる。
ファイルの比較は、各ファイルのサイズ、MD5のチェックサム、許可属性、ファイルの種類、所有者およびグループなどについて行われる。比較の結果は、以下のように8文字の文字列と設定ファイルの場合はそれを表す「c」という文字、そしてファイル名という形式で表示される。
S.5....T c /etc/yum.conf |
|
すべてのRPMパッケージを検証するには、-Vaオプションだけでrpmコマンドを実行する。
# rpm -Va |
| 全ファイルを検証 |
特定のRPMパッケージに含まれるファイルについて検証するときは、パッケージを指定する。
# rpm -V samba-common |
| 特定のRPMパッケージを検証 |
特定のファイルを検証するときは、ファイル名を指定する。
# rpm -Vf /etc/yum.conf |
| 特定のファイルを検証 |
最近インストールしたRPMパッケージを調べるには
RPMパッケージをインストールしたりアップデートすると、その日時が記録される。そのため、rpmコマンドで--lastオプションを指定すると、新しい順でインストール済みのパッケージを表示できる。以下のようにrpmコマンドを実行すると、最近インストールまたはアップデートしたRPMパッケージが表示される。
$ rpm -qa --last | head |
headコマンドで最初の10行を表示しているが、これを指定しないとインストールされている全RPMファイルが表示されるので注意が必要だ。
また、例えば、
$ rpm -qa --last | more |
とすれば1画面ずつ確認できる。
$ rpm -qa --last | grep openssh |
のようにして、特定のRPMパッケージを検索することもできる。
ソースファイルからRPMファイルを作成するには
インストールしたいプログラムが、tarボールのみで配布されていることも多い。しかし、ソースファイルをそのままコンパイル/インストールすると、RPMによる恩恵(インストール済みプログラムの検索やプログラムのアップグレードなど)が得られないので、プログラムはできるだけRPMファイルでインストールしたいものだ。
「tarボールからRPMファイルを作成するには」で説明したとおり、SPECファイルが用意されていればrpmbuildコマンドでtarボールからRPMファイルを作成できる。しかし、ここで紹介するCheckInstallを使うと、SPECファイルが用意されていなくてもRPMファイルを作成できる。
まず、CheckInstallのWebサイト(http://asic-linux.com.mx/~izto/checkinstall/)からソースファイルをダウンロードしてインストールする。原稿執筆時点での最新版は、checkinstall-1.6.0beta2だ。
$ tar zxvf checkinstall-1.6.0beta2.tgz |
以上で、/usr/src/redhat/RPMS/i386ディレクトリにcheckinstall-1.6.0beta2-1.i386.rpmというファイルが作成されるので、これをインストールする。
# rpm -ihv checkinstall-1.6.0beta2-1.i386.rpm |
これでCheckInstallのインストール作業は終了だ。ここでは、checkinstallコマンドの動作確認のため、SylpheedのRPMファイルを作成してみる。Sylpheedのtarボールを展開したら、./configureコマンドを実行してMakefileを作成し、checkinstallコマンドを実行する。
$ tar jxf sylpheed-0.9.7.tar.bz2 |
以上で、/usr/src/redhat/RPMS/i386ディレクトリにsylpheed-0.9.7-1.i386.rpmが作成される。
# ls -l /usr/src/redhat/RPMS/i386/ |
RPMパッケージからファイルを取り出すには
rpmコマンドの問い合わせ機能はインストールしたファイルが対象となるため、インストール前にRPMファイルにどのようなファイルが含まれているかを調べたり、一部のファイルを取り出したりすることはできない。
インストール前にそのようなことを行いたいときは、RPMパッケージをcpio形式のアーカイブファイルに変換して、そこからファイルの一覧を表示したり、ファイルを取り出せばいい。
RPMファイルをcpioファイルに変換するには、rpm2cpioコマンドを使う。また、cpio形式のアーカイブファイルからファイルを取り出したり、ファイルの一覧を表示するにはcpioコマンドを使用する。
例えば、smartmontools-5.23-1.i386.rpmというRPMファイルに含まれるファイルを一覧表示するには、以下のコマンドを実行する。
$ rpm2cpio smartmontools-5.23-1.i386.rpm | cpio --list |
また、smartmontools-5.23-1.i386.rpmに含まれるファイルを取り出すには、作業用のディレクトリを作成して、そのディレクトリから以下のコマンドを実行する。すると、本来ファイルがインストールされるはずのディレクトリが作成され、その下にファイルが作られる。
$ mkdir work |
Red Hat LinuxでRPMの依存関係を調べるには
RPMパッケージのインストール時に、以下のように依存関係のエラーが発生することがある。
# rpm -ihv xxxxxx.rpm |
Red Hat Linuxの場合はRPMのデータベースが用意されているので、該当するファイルがどのパッケージに入っているかを簡単に調べることができる。例えば、インストール時に「libldap.so.1」が存在しないというエラーが出たときは、以下のコマンドでどのパッケージにlibldap.so.1が入っているかを表示させることができる。
# rpm -q --redhatprovides libldap.so.1 |
上記の例では、libldap.so.1はopenldap12-1.2.13-5に入っていることが分かるので、openldap12-1.2.13-5も同時にインストールすればいいことになる。
tarボールからRPMファイルを作成するには
Red Hat Linuxなどはパッケージ管理システムとしてRPMを採用しているが、インストールしたいプログラムがtarボールのみで配布されていることも多い。多くの場合、tarボールを展開してコンパイルを行い、インストールするのは簡単だ。しかし、この方法でインストールしたプログラムはRPMの管理からは外れてしまうので、RPMによって得られるサービス(インストール済みプログラムの検索やプログラムのアップグレードなど)が受けらない。
tarボールで配布されているプログラムの中には、RPMファイルを作成するためのSPECファイルを含んでいるものがある。このような場合は、rpmbuildコマンドでtarボールからRPMファイルを作成できる。具体的には、-taオプションを付けてrpmbuildコマンドを実行する。
# rpmbuild -ta xine-lib-1-rc0a.tar.gz |
RPMファイルは、通常の場所(Red Hat Linuxの場合は/usr/src/redhat/RPMS/i386/)に作成される。SPECファイルのないtarボールに対してrpmbuildコマンドを実行すると、エラーが発生する。
# rpmbuild -ta xxxxx.tar.gz |