連載
» 2002年03月09日 00時00分 公開

実用qmailサーバ運用・管理術(7):GUI管理ツールの導入とユーザー情報のSQL化 (3/3)

[鶴長鎮一,@IT]
前のページへ 1|2|3       

ユーザー管理をSQLデータベースで

 qmailadminで設定したユーザーの情報は、~vpopmail/domains/バーチャルドメイン名/ディレクトリのvpasswdファイルに保存され、その後cdbファイルに変換されてそれぞれのコマンドから利用されます。これはqmailadminの仕様ではなく、vpopmailによるものです。

 vpopmailは、vpasswdやcdbファイル以外に、SQLデータベースやLDAPを使ったユーザー情報の保存や参照が可能です。大規模な運用には、こうしたバックエンドの利用は欠かせません。そこで、SQLデータベースでユーザー情報を管理できるようにしてみましょう。

コラム PostgreSQLの対応状況

 inter7社のWebページ(http://www.inter7.com/vpopmail/features.html)には、「Support for Mysql, Oracle, PostgreSQL」とあります。実際、ソースを展開してみるとvpgsql.cやvpgsql.hというPostgreSQL用のCソースやヘッダファイルが存在します。しかし、ソース添付のINSTALLにはこれを組み込む方法が明記されていません。

  正式な対応にはもう少し時間を必要とするようです。


 vpopmailでは、SQLデータベースとしてOracle、Sybase、MySQLをサポートしています(PostgreSQLについてはコラム「PostgreSQLの対応状況」参照)。ここでは、最も手軽に導入できるMySQLを選択します。MySQLの概要やインストール手順については、筆者が以前したためた快速MySQLでデータベースアプリ!を参照してください。

 ここでMySQLを採用したのは、筆者がひいきにしているということもありますが、何より実装がシンプル()なので実行速度が速いことと無料(コラム「MySQLのライセンス」参照)で入手できるというメリットがあるからです。

注:裏を返せば、複雑なことは簡単にできない場合もあるということです。例えば、副問い合わせには対応していません。

 OracleやSybase、LDAPを使いたい場合は、README.XXファイルを参考にしてください。ただし、各モジュールとREADMEでバージョンの整合が取れていないところもあり、READMEに書いてあるとおりにしても、うまくいかない場合があるので注意が必要です。

コラム MySQLのライセンス

 MySQL自体を販売したりインストールするなど、商用利用する場合は商用ライセンスを購入する必要があります。しかし、個人や社内での使用などの用途であれば適応されません。

  商用利用する場合でも、MySQLと併せて提供するプログラムのソースコードを含めて公開すればGPLライセンスが適用され、支払い義務はなくなります。


MySQL対応化作業

 前回紹介した、vpopmailのインストール手順は以下のようになっていました。

(1)ソースの展開

    ↓

(2)グループ:vchkpw、ユーザー:vpopmailの作成

    ↓

(3)configure、make、make installの実行

    ↓

(4)tcp.smtpファイルの準備、crontabの編集

    ↓

(5)rcスクリプトの準備、実行

 MySQLを導入した場合は、(3)以降の手順が次のようになります。

(3)vmysql.hの編集、configure、make、make install-stripの実行

    ↓

(4)データベースの準備

    ↓

(5)tcp.smtpファイルの準備、crontabの編集

    ↓

(6)rcスクリプトの準備、実行

 では、手順(3)から見ていきましょう。まずはvpopmail-5.2ディレクトリ下にあるvmysql.hファイルを編集します。

〜省略〜
#define MYSQL_UPDATE_SERVER "localhost" MySQLサーバを指定
#define MYSQL_UPDATE_USER "root" MySQLサーバのデータを更新する際のユーザー名
#define MYSQL_UPDATE_PASSWD "password" MySQLサーバのデータを更新する際のパスワード

#define MYSQL_READ_SERVER "localhost" MySQLサーバを指定
#define MYSQL_READ_USER "root" MySQLサーバのデータを参照する際のユーザー名
#define MYSQL_READ_PASSWD "password" MySQLサーバのデータを参照する際のパスワード

〜省略〜
vmysql.h

 使用するデータベース名やテーブル名を置き換えたい場合は、vmysql.hの該当個所を変更する必要がありますが、ここではデフォルトのまま使用することにします。

 configureは、「--enable-mysql=y」をオプションに付け加えます。

# ./configure --enable-roaming-users=y --enable-mysql=y

 MySQLのインストール状態によっては、libmysqlclient.aとmysql.hの存在するディレクトリを指定する必要があります。configureがうまくいかない場合は、この作業を行いましょう。大抵は自動的に検出されるはずです。

# ./configure     --enable-roaming-users=y --enable-mysql=y \
        --enable-sqlincdir=/usr/local/include/mysql \
        --enable-sqllibdir=/usr/local/lib/myqsl

 configureが終わったらコンパイルとインストールです。

# make
# make install-strip

 次に手順(4)のデータベースの準備に移ります。データベース「vpopmail」を用意し、vpopmailユーザーに対して特権を設定します。

# mysqladmin create vpopmail
# mysql
mysql > grant select,insert,update,delete,create on vpopmail.* to vpopmail@localhost identified by 'password';
Query OK, 0 rows affected (0.00 sec)

 vpopmailの動作には4つのテーブルが必要ですが、vadddomain、vdominfoコマンドなどを実行することで自動的に作成されます。

 cdbファイルによる認証を行っていたときに作成された、既存のcdbファイルのデータをMySQLへインポートするには次のようにします。

# vconvert -c -m
converting fileserver2.tsurunaga.co.jp done

 この時点で、vconvertなどのMySQL対応になったvpopmailコマンドが使用できない場合は、MySQLのライブラリをライブラリパスに追加する必要があります。環境変数LD_LIBRARY_PATHを利用する場合は次のようにします。

# export LD_LIBRARY_PATH=/usr/lib/mysql/
bash系の場合(指定するディレクトリは適宜変更すること)

# setenv LD_LIBRARY_PATH /usr/lib/mysql/
csh系の場合(指定するディレクトリは適宜変更すること)

 ldconfigを使用する場合は、/etc/ld.so.confファイルに、

/usr/lib/mysql/
(指定するディレクトリは適宜変更すること)

の1行を追加し、

# ldconfig

を実行します。

 最終的には、データベースは以下のような構成になります(この時点でlastauthなどのテーブルがなくても、利用する際に自動生成されます)。

# mysqlshow vpopmail
Database: vpopmail
+-------------+
|   Tables    |
+-------------+
| dir_control |
| lastauth    |
| relay       |
| vpopmail    |
+-------------+

 次に手順(5)として、POP Before SMTPのためにSMTPのリレーコントロールを設定します。上のテーブル構成表からも分かるとおり、POPで接続してきたユーザーの記録もMySQLサーバで管理され、そのデータを基に/etc/tcp.smtp.cdbファイルを作成します。前回同様に/etc/tcp.smtpファイルを用意し、1時間に1回、接続情報中の寿命が過ぎたデータを削除するようにcrontabの編集を行います。

# vi /etc/tc.smtp
127.:allow,RELAYCLIENT=""

# crontab -e
01 * * * * /home/vpopmail/bin/clearopensmtp

 最後に、手順(6)としてrcスクリプトを用意しますが、前回と特に変わるところはありません。ただし、libmysqlclient.aが適切にリンクされていないなどの理由で実行できない場合は、前述の方法で/etc/ld.so.confファイルを修正します。

 これでMySQLサーバをバックエンドに持ったvpopmailができあがりました。しかし、残念ながらqmailadminから利用する場合は再度qmailadminをインストールする必要があります。

# ./configure
    --enable-htmldir=/home/httpd/html/ Apacheのドキュメントルート
    --enable-cgibindir=/home/httpd/cgi-bin/ Apacheのcgi-binディレクトリ
# make clean
# make
# make install-strip

 qmailadminの操作方法はvpopmailと同様、変わりません。試しにqmailadmin経由でPOPアカウントを追加してみましょう。MySQLサーバに登録されたかどうかを確認するには、以下のようにします。

# mysql vpopmail
mysql> select pw_name from vpopmail;
+------------------+
| pw_name          |
+------------------+
| postmaster       |
| 追加したユーザー  |
+------------------+
2 rows in set (0.00 sec)

応用も広がるSQLの導入

 今回は、バーチャルドメインをWebブラウザで管理できるqmailadminとMySQL対応版vpopmailを紹介しました。WebというインターフェイスとSQLというバックエンドを併せ持つことで、大規模な運用にも耐えられ、かつ管理コストを抑えることができます。また、SQLデータベース中のテーブルをほかのアプリケーションでも利用することで、簡単なWebアプリケーションが構築できるなど、SQLの導入は単に高速性のメリットだけでなく、データの共有化を図るなどの可用性をもたらします。

 残念ながらqmailadminのすべてを紹介し切れませんでしたが、quotaやIMAPに興味のある方はぜひREADMEに目を通してみてください。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。