CentOS 5.6+Postfix+MySQL+Postfixadmin
MySQLとか楽にいじれるようになると有名なPHPMyAdminというのがあるけど、それのPostfix版みたいなイメージのがあるよ!と聞いて試してみた。
Webインターフェースでドメイン追加・削除したりメールアドレス管理とかしちゃって楽ですよ的なものらしい。
これを利用するためにはドメインとかをDBで管理する、PostfixのDB対応版が必要。
今追加してあるyumリポジトリには無かったけど、centosplusにSRPMがあったので、それを使った。
■設定に使う情報を決める
Postfix/Dovecot実行ユーザー
Linux ユーザーID 10000
Linux ユーザー名 vmailadmin
Linux グループ名 vmailadmin
□Maildir/のルートディレクトリ
/var/spool/mail/vhost
■設定
su -
service sendmail stop
# Postfix(DB対応版)をインストール
yum remove postfix
yum install pcre.x86_64 pcre-devel.x86_64 mysql-devel.x86_64
rpm -ivh http://ftp.riken.jp/Linux/centos/5.7/centosplus/SRPMS/postfix-2.3.3-2.3.centos.mysql_pgsql.src.rpm
cd /usr/src/redhat/SPECS/
vi postfix.spec
%define PGSQL 0
%define MYSQL 1
rpmbuild -ba postfix.spec
rpm -Uvh /usr/src/redhat/RPMS/x86_64/postfix-2.3.3-2.3.centos.mysql_pgsql.x86_64.rpm
alternatives –config mta
yum remove sendmail
# グループ/ユーザー追加
groupadd vmailadmin
useradd -u 10000 -s /bin/nologin -g vmailadmin vmailadmin
# Maildir/ルートディレクトリ作成
mkdir /var/spool/mail/vhost
chown vmailadmin:vmailadmin /var/spool/mail/vhost
chmod 771 /var/spool/mail/vhost
# Postfixの設定
vi /etc/postfix/mysql_virtual_alias_maps.cf
—————————————————————-
user = DBのユーザー
password = DBのユーザーのパスワード
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
—————————————————————-
vi /etc/postfix/mysql_virtual_domains_maps.cf
—————————————————————-
user = DBのユーザー
password = DBのユーザーのパスワード
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and active = ’1′
—————————————————————-
vi /etc/postfix/mysql_virtual_mailbox_maps.cf
—————————————————————-
user = DBのユーザー
password = DBのユーザーのパスワード
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
—————————————————————-
vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cf
—————————————————————-
user = DBのユーザー
password = DBのユーザーのパスワード
hosts = localhost
dbname = postfix
table = mailbox
select_field = quota
where_field = username
# additional_conditions = and active = ’1′
—————————————————————-
vi /etc/postfix/main.cf
—————————————————————-
#以下は各々の環境に合わせて編集
myhostname = mail.example.com
mydomain = example.com
myorigin = $myhostname
inet_interfaces = all
mydestination = $mydomain
relay_domains = $mydestination
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP unknown
#以下は追記
local_transport = virtual
virtual_transport = virtual
virtual_mailbox_base = /var/spool/mail/vhost
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_alias_domains = $virtual_alias_maps
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 10000
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
maximal_backoff_time = 800s
minimal_backoff_time = 100s
bounce_queue_lifetime = 60m
maximal_queue_lifetime = 60m
#mailbox_size_limit = 1024000000
message_size_limit = 20480000
#virtual_mailbox_limit = 51200000
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_overquota_bounce = yes
virtual_mailbox_limit_inbox = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain = $myhostname
smtpd_client_restrictions = reject_rbl_client bl.spamcop.net
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
broken_sasl_auth_clients = yes
—————————————————————-
vi /etc/postfix/master.cf
—————————————————————-
submission inet n – n – – smtpd
# -o smtpd_enforce_tls=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
—————————————————————-
# Postfix Admin のインストール
cd
wget http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.3.4/postfixadmin_2.3.4.tar.gz?r=&ts=1317889955&use_mirror=jaist
tar xfvz postfixadmin_2.3.4.tar.gz
mv postfixadmin-2.3.4 /var/www/postfixadmin
cd /var/www/
restorecon -R postfixadmin
cd postfixadmin
vi config.inc.php
—————————————————————-
# 編集
$CONF['configured'] = true;
$CONF['default_language'] = ‘ja’;
$CONF['database_type'] = ‘mysql’;
$CONF['database_host'] = ‘localhost’;
$CONF['database_user'] = ‘DBのユーザー’;
$CONF['database_password'] = ‘DBのユーザーのパスワード’;
$CONF['database_name'] = ‘postfix’;
$CONF['encrypt'] = ‘md5crypt’;
$CONF['page_size'] = ’50′;
$CONF['domain_in_mailbox'] = ‘YES’;
$CONF['aliases'] = ’100′;
$CONF['mailboxes'] = ’100′;
$CONF['maxquota'] = ’300′;
—————————————————————
vi /etc/httpd/conf.d/postfixadmin.conf
—————————————————————
Alias /postfixadmin “/var/www/postfixadmin”
Order allow,deny
Allow from all
—————————————————————
# Dovecotのインストール
yum install dovecot.x86_64 cyrus-sasl-plain.x86_64 cyrus-sasl-md5.x86_64 php53-imap.x86_64
service saslauthd stop
chkconfig saslauthd off
vi /etc/dovecot.conf
—————————————————————
protocols = imap imaps pop3 pop3s
mail_location = maildir:/var/spool/mail/vhost/%u
passdb sql {
args = /etc/dovecot-mysql.conf
}
userdb sql {
args = /etc/dovecot-mysql.conf
}
mechanisms = plain login digest-md5 cram-md5
pop3_uidl_format = %08Xu%08Xv
socket listen {
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
login_process_size = 64
—————————————————————
vi /etc/dovecot-mysql.conf
# default_pass_scheme は postfixadminのconfig.inc.phpと合わせる
—————————————————————
driver = mysql
default_pass_scheme = MD5-CRYPT
connect = dbname=postfix user=DBのユーザー host=/var/lib/mysql/mysql.sock password=DBのユーザーのパスワード
password_query = SELECT password FROM mailbox WHERE username = ‘%u’ AND active = ’1′
user_query = SELECT concat(‘/var/spool/mail/vhost/’, maildir) as home, 10000 as uid, 10000 as gid FROM mailbox WHERE username = ‘%u’ AND active = ’1′
—————————————————————
# MySQLの設定
mysql -u root
delete from mysql.user where user=”";
CREATE DATABASE postfix;
CREATE USER ‘DBのユーザー’@'localhost’ IDENTIFIED BY ‘DBのユーザーのパスワード’;
GRANT ALL PRIVILEGES ON `postfix`.* TO ‘DBのユーザー’@'localhost’;
FLUSH PRIVILEGES;
quit
# Postfix, Dovecotを自動起動するよう設定。
chkconfig postfix on
chkconfig dovecot on
service postfix start
service dovecot start
service httpd reload
# 下記URLにアクセスし、全てOKになっていることを確認。
# エラーが出ていて何か変更した場合は、service httpd reload しないと反映されない場合がある。
http://www.example.com/postfixadmin/setup.php
設定時に下記のようなものが画面に出力されるのでコピペする
—————————————————————-
vi /var/www/postfixadmin/config.inc.phpを編集
$CONF['setup_password'] = ‘なんか暗号化されたあれっぽい半角の文字列’;
—————————————————————-
Postfix + Dovecot 2 + PostfixAdmin + MySQL [がらくたネット]など参考にチクチクいじってみたら、あっさり動いたことは動いた。
何か色々できて便利だね!すごいね!
あ、メールサーバー運用してなかったわ。
PHPのセッション管理をmemcachedに投げる設定
yum -y install zlib-devel.x86_64
yum -y –enablerepo=remi install libmemcached.x86_64 libmemcached-devel.x86_64
pecl install memcached
vi /etc/php.d/memcached.ini
; Enable memcached extension module
extension=memcached.so
vi /etc/php.ini
; session.save_handler = files
session.save_handler = memcached
; session.save_path = “/var/lib/php/session”
session.save_path = “ktserver.localdomain:11211″
今回は Kyoto Tycoon を memcached 互換で動かしてそれに投げた。
libmemcached は remi リポジトリにあったのでそれを利用した。
session_start(); すると、ktserver.localdomain にセッションの値が保持される。
有効期限等の設定が別途必要。
サーバー名がktなのは実はKyotoTycoonだから。
Subversion+httpdでディレクトリ・ユーザー別のアクセス制御
CentOS 5.6 の場合。
vi /etc/httpd/conf.d/subversion.conf
<Location /repos>
DAV svn
SVNParentPath /var/www/svn
SVNAutoversioning on
AuthzSVNAccessFile /var/www/svn/svnaccess# 内部からのみアクセスする
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from 192.168.0.0/24AuthType Basic
AuthName “Authorization Realm”
AuthUserFile /etc/httpd/conf/.htpasswd
Require valid-user
</Location>
service httpd restart
設定は以上
コマンド類
リポジトリ作成
svnadmin create /var/www/svn/reponame
Basic認証
htpasswd /etc/httpd/conf/.htpasswd user_1
アクセス制御
vi /var/www/svn/.svnaccess
svnaccessファイルでユーザー毎、ディレクトリ別にアクセス許可を管理
書式
[リポジトリ名:ディレクトリ名]
例
[reponame:/]
usre_1 = rw
user_2 = r
KyotoTycoonのレプリケーション設定
CENTOS 5.6 に KYOTOTYCOON をSRPMからインストールの続き
マスター側の/etc/init.d/ktservctlを変更
#ulogdir=”$basedir/ulog”
ulogdir=”/var/log/ktserver/ulog”#sid=1
sid=1#ulim=1g
ulim=1g
起動スクリプト中でulimが必須になっているので、指定したくないならいじる。
sidは必須、無いと起動しない。
スレーブ側の/etc/init.d/ktservctlを変更
#mhost=”anotherhost.localdomain”
mhost=”masterkt.localdomain”#mport=”1978″
mport=”1978″#rtsfile=”$basedir/rts”
rtsfile=”$basedir/rts”#sid=1
sid=2#cmd=”$cmd -ulog $ulogdir -ulim $ulim -sid $sid”
cmd=”$cmd -ulog $ulogdir -sid $sid”
sidは他のサーバーと別の数字に変える。
マルチマスタにする場合、上記マスター側スレーブ側双方の設定を、アクティブマスター・スタンバイマスター双方に行う。
マルチマスターにしない場合は、スレーブ側だけ以下の用に変更
# if [ -n "$ulogdir" ] ; then
# cmd=”$cmd -ulog $ulogdir -ulim $ulim -sid $sid”
# fi
if [ -n "$ulogdir" ] ; then
cmd=”$cmd -ulog $ulogdir -ulim $ulim”
fiif [ -n "$sid" ] ; then
cmd=”$cmd -sid $sid”
fi
元のスクリプトではulogdirを指定しないとsidが反映されない。
CentOS 5.6 に KyotoTycoon をRPMからインストール
yum install rpm-build
wget –no-check-certificate https://github.com/kyohsuke/srpms/tarball/master
tar xfvz kyohsuke-srpms-c4e4fb1.tar.gz
cd kyohsuke-srpms-c4e4fb1
rpm -ivh kyototycoon-0.9.42-1.src.rpm
rpm -ivh kyotocabinet-1.2.58-1.src.rpm
cd /usr/src/redhat/SPECS
#yum remove gcc
yum install pkgconfig zlib-devel
yum install gcc44 gcc44-c++ boost-devel
yum install kernel-devel
ln -s /usr/bin/gcc44 /usr/bin/gcc
ln -s /usr/bin/g++44 /usr/bin/g++
rpmbuild -ba kyotocabinet.spec
rpm -ivh ../RPMS/x86_64/kyotocabinet-*
rpmbuild -ba kyototycoon.spec
rpm -ivh ../RPMS/x86_64/kyototycoon-*
vi /etc/init.d/ktservctl
#cmd=”ktserver”
cmd=”ktserver -plsv /usr/libexec/ktplugservmemc.so”#logfile=”$basedir/log”
logfile=”/var/log/ktserver”#dbname=”$basedir/casket.kch#bnum=2000000#msiz=128m#dfunit=8″
dbname=” *#bnum=2000#capsiz=128m#opts=f”
-plsv /usr/libexec/ktplugservmemc.so”
は、memcached互換で動かしたかったので。
* LRUにしたかったので、キャッシュDBを使用する。
bnum 2000バケット
capsiz メモリサイズ上限
opts flags対応オプション
参考
こなふぃ: Kyoto Cabint 1.2.50 と Kyoto Tycoon 0.9.38 の srpm
おっぱいミサイル(kyoto tycoonタグ)
途中で出たエラー
error trying to exec ‘cc1plus’: execvp: No such file or directory
C++ preprocessor “/lib/cpp” fails sanity check
シンボリックリンク張ってごまかした(手順途中にあるgcc44,g++44へのシンボリックリンク)
そこまでする理由は、このバージョンのgccが必要だから。
上記理由により、古いgccがあるとエラー出たりするので、最初にyum remove gcc