エンタープライズ:特集 2003/09/05 21:00:00 更新


特集:第1回 RPM活用でLinuxサーバ運用の手間を軽減 (5/5)

パッケージ管理には専用のデータベースが用意されている

 インストールしたパッケージの情報は、Red Hat Linuxの場合/var/lib/rpm/ディレクトリ下に保存されている。

# cd /var/lib/rpm/
# ls
Basenames     Group       Providename     Requireversion  __db.001
Conflictname  Installtid  Provideversion  Sha1header      __db.002
Dirnames      Name        Pubkeys         Sigmd5          __db.003
Filemd5s      Packages    Requirename     Triggername

 上記リスト中の「__db.001」ファイルなどが、RPMの主な情報データベースになる。データベースが壊れていると思われた場合、これらのファイルを削除して次の方法で新しく作り直すことができる。

# rm -rf /var/lib/rpm/__db.*
# rpm -vv --rebuilddb

 ここで挙げた「-vv」は、デバッグ情報を表示する共通オプションであり、画面上にパッケージのさまざまな情報が表示出力される。データベースを再構築するオプションは「--rebuilddb」であり、本来はこのオプションで実行するだけでもよい。ただし、Red Hat Linux 9では、このオプションだけを使うと次のようなエラー表示となってしまう。

# rpm --rebuilddb
エラー: db4 error(16) from dbenv->remove: デバイスもしくはリソースがビジー状態です

 このメッセージについては、www.rpm.orgサイトでも「見苦しいメッセージ」だと確認されているものだ。しかし実害はなく、無視しても構わない。データベースファイルそのものは更新されている(ファイルのタイムスタンプを確認してみよう)。なお、データベースファイルはコピー保存後にファイルを削除し、データベースファイルを作成するのが公式な手順となっている(http://www.rpm.org/hintskinks/repairdb-2003-06/)。

rpmの基本的な操作方法〜パッケージ管理

 RPMパッケージの基本情報は「-q」というクエリーオプションで調べることができる。続けて以下のようなオプションがよく用いられる。

オプション(パラメータ)
内     容
-a インストールされているパッケージ名をすべて表示する
-R 依存しているパッケージを表示する
-d パッケージが提供しているドキュメント、マニュアルを表示する
-c パッケージを設定するためのファイルを表示する
-i パッケージの概略を表示する
--provides パッケージの提供する機能を表示する

 例えばSambaのパッケージがインストールされているかを調べるのであれば、次のように入力するだけでもよい。

# rpm -q samba
samba-2.2.7a-8.9.0

 ここではバージョン2.2.7aのパッケージがインストールされていることが分かった。しかし、パッケージ名が正確に分からない場合もある。前述したalsa(サウンド関連のドライバ)をインストールしたが、単に「alsa」と入力して検索しても見つからない。

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

 このような場合には、いちど「-a」オプションを含めてすべてのパッケージを表示させ、grepで絞り込んでいくのがよい。「-a」オプションに続く文字列(引数)は必要ないが、大量のパッケージ名が一気にスクロールしてしまい確認しきれないだろう。

# rpm -qa |grep alsa
alsa-lib-0.9.6-1.fr
alsa-driver-0.9.6-1.fr
alsa-lib-devel-0.9.6-1.fr

 これで先の3つのパッケージがインストールされていることが、バージョン名と共に分かる。

 「-d」と「-c」のオプションは、そのパッケージをよく知るために便利だ。大抵のコマンドは、manコマンドのオンラインマニュアルを読めば概略と機能、利用可能なオプションが書かれている。しかし、manよりも詳細な情報がドキュメントとして用意されている場合もある。通常は/usr/share/doc/ディレクトリ下にあるが、「-d」オプションで正確な配置ディレクトリが調べられる。コマンドの入力時にはどちらも「-q」に続けてハイフン無しで指定可能だ。例えば、Postfix(メール配送エージェント)パッケージのドキュメントを調べたいのであれば、次のように入力する。

# rpm -qd postfix |more
/usr/share/doc/postfix-1.1.12/0README
/usr/share/doc/postfix-1.1.12/ACKNOWLEDGEMENTS.TLS
/usr/share/doc/postfix-1.1.12/CHANGES.TLS
/usr/share/doc/postfix-1.1.12/COMPATIBILITY
/usr/share/doc/postfix-1.1.12/HISTORY
/usr/share/doc/postfix-1.1.12/INSTALL
/usr/share/doc/postfix-1.1.12/LICENSE
/usr/share/doc/postfix-1.1.12/PORTING
/usr/share/doc/postfix-1.1.12/README-Postifx-SASL-RedHat.txt
/usr/share/doc/postfix-1.1.12/README.TLS
/usr/share/doc/postfix-1.1.12/README_FILES/DB_README

〜以下略〜

 これらのドキュメントにはプログラムを設定するためのconfファイルなどの情報も含まれる。しかし、その所在はプログラムごとに決まっており、実際の配置ディレクトリはディストリビューションごとにも異なっている場合がある。例えば、/etc/ディレクトリ下に直接置くものもあれば、/usr/local/etc/下、独自のディレクトリを作成していることもある。そのような際には「-c」オプションを使えば明らかだ。

# rpm -qc postfix
/etc/postfix/access
/etc/postfix/aliases
/etc/postfix/aliases.db
/etc/postfix/canonical
/etc/postfix/main.cf
/etc/postfix/master.cf
/etc/postfix/pcre_table
/etc/postfix/post-install
/etc/postfix/postfix-script
/etc/postfix/regexp_table
/etc/postfix/relocated
/etc/postfix/transport
/etc/postfix/virtual
/etc/rc.d/init.d/postfix

 上記のように、ここではPostfixパッケージ内に含まれる主要な設定ファイルが/etc/postfix/ディレクトリ下にすべてあり、起動時の設定は/etc/rc.d/init.d/下であることが分かる。

 Linuxの場合、FHS規格による推進こそあるものの(参考特集)、実際のところはまだまだ設定ファイルの配置に統一性がないのが実情だ。複数のディストリビューションを利用しているユーザーにとっては、「-qc」オプションで調べるのがよいだろう。特にサーバ系プログラムでは、オリジナルのドキュメントに記載されているディレクトリに配置されていない場合が多い。

 RPMのバイナリパッケージとメンテナンスは以上のポイントを押さえておけばよいだろう。次回は、src.rpmからバイナリパッケージを作る方法や、カスタムパッケージの作り方について解説していく。

関連記事
▼Linux Tips|RPMカテゴリー

関連リンク
▼Linux チャンネル

前のページ | 1 2 3 4 5 |      

[渡辺裕一,ITmedia]