MySQL

MySQL で容量を確認するSQL

データベース毎の容量

SELECT
    table_schema                                         AS "データベース名"
  , FLOOR(SUM(data_length + index_length) / 1024 / 1024) AS "合計容量(MB)"
FROM information_schema.tables
GROUP BY
    table_schema
ORDER BY
    SUM(data_length + index_length) DESC
;

+-----------------------+------------------+
| データベース名        | 合計容量(MB)     |
+-----------------------+------------------+
| xxxxxxxx_xxxxxxxx     |             1995 |
| information_schema    |                0 |
+-----------------------+------------------+

テーブル毎の容量

use DATABASE_NAMEで確認したいデータベースに切り替えた後に実行。

SELECT
    table_name                                        AS "テーブル名"
  , FLOOR((data_length + index_length) / 1024 / 1024) AS "合計容量(MB)"
  , FLOOR((data_length) / 1024 / 1024)                AS "データ容量(MB)"
  , FLOOR((index_length) / 1024 / 1024)               AS "インデックス容量(MB)"
  , table_rows                                        AS "行数"
  , avg_row_length                                    AS "平均行容量"
  , engine                                            AS "ストレージエンジン"
FROM information_schema.tables
WHERE table_schema = database()
ORDER BY
    (data_length + index_length) DESC
;

+-------------------+------------------+---------------------+------------------------------+----------+-----------------+-----------------------------+
| テーブル名        | 合計容量(MB)     | データ容量(MB)      | インデックス容量(MB)         | 行数     | 平均行容量      | ストレージエンジン          |
+-------------------+------------------+---------------------+------------------------------+----------+-----------------+-----------------------------+
| aaa               |             1781 |                1132 |                          649 | 10340935 |             114 | InnoDB                      |
| bbb               |               99 |                  42 |                           56 |   842684 |              52 | InnoDB                      |
| ccc               |               53 |                  50 |                            3 |    97275 |             545 | InnoDB                      |
| ddd               |               48 |                  34 |                           13 |   614400 |              58 | InnoDB                      |
| eee               |               12 |                   5 |                            6 |    84417 |              68 | InnoDB                      |
| fff               |                1 |                   0 |                            0 |     7083 |              53 | InnoDB                      |
| ggg               |                0 |                   0 |                            0 |     2598 |              63 | InnoDB                      |
| hhh               |                0 |                   0 |                            0 |     1543 |              63 | InnoDB                      |
| iii               |                0 |                   0 |                            0 |      233 |              70 | InnoDB                      |
| jjj               |                0 |                   0 |                            0 |      233 |              70 | InnoDB                      |
| kkk               |                0 |                   0 |                            0 |       69 |             237 | InnoDB                      |
| lll               |                0 |                   0 |                            0 |      265 |              61 | InnoDB                      |
| mmm               |                0 |                   0 |                            0 |        1 |           16384 | InnoDB                      |
+-------------------+------------------+---------------------+------------------------------+----------+-----------------+-----------------------------+


Vagrant で VirtualBox のメモリ数を指定する

データ量の多いサイトだとパフォーマンスが悪くて、仕方がないので、
メモリ数を増やす。

変更前

デフォルトだと、589M割り当てられている。

[vagrant@vagrant-centos65 ~]$ free -m
             total       used       free     shared    buffers     cached
Mem:           589        545         44          0          5         41
-/+ buffers/cache:        497         91
Swap:         1224          7       1217

Vagrantfileにメモリ数を指定

  config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
  #
  #   # Customize the amount of memory on the VM:
     vb.memory = "2048"
  end

変更後

[vagrant@vagrant-centos65 ~]$ free -m
             total       used       free     shared    buffers     cached
Mem:          1877       1194        682          0          9        547
-/+ buffers/cache:        637       1240
Swap:         1224          0       1224

誤差があるが、あとで調べてみよう。

ついでにMySQLのバッファサイズも増やす

[mysqld]

innodb_buffer_pool_size=1024M
innodb_log_file_size=128M

MySQLとバーチャルホストディレクトリのバックアップ

バックアップシェル

$ vim /root/backup.sh

#!/bin/sh

# 何日分保存するか
period=3
# バックアップしたいディレクトリ(バーチャルホストディレクトリ)
wwwdir=/home
# バックアップ保存先ディレクトリ
dirpath=/root/backup
# 今日のバックアップを保存するディレクトリ
todaydir=`date '+%Y%m%d'`
# DBユーザー
dbuser=user
# DBパスワード
dbpassword=xxxxxxxx

# 今日のバックアップを保存するディレクトリを作成
mkdir $dirpath/$todaydir

# MySQLバックアップ
for i in `mysql -u$dbuser -p$dbpassword -e "show databases"`
do
    if [ $i == "Database" ]; then
        continue
    fi;
    mysqldump --single-transaction $i -u$dbuser -p$dbpassword --opt | gzip > $dirpath/$todaydir/mysql.$i.sql.tar.gz
done;

# ディレクトリバックアップ
for i in `ls $wwwdir`
do
   tar cvfz $dirpath/$todaydir/www.$i.tar.gz $wwwdir/$i
done
tar cvfz $dirpath/$todaydir/www.$i.tar.gz /var/www


olddir=`date -d "$period days ago" '+%Y%m%d'`
rm -rf $dirpath/$olddir

実行

$ chmod 0700 /root/backup.sh
$ /root/backup.sh

$ ll /root/backup
合計 4
drwxr-xr-x 2 root root 4096 12月 31 01:17 20131231

cron追加

$ crontab -e

0 4 * * * /root/backup.sh 1> /dev/null

さくらVPSでメールサーバー構築(Postfix+Dovecot2+ClamAV+SpamAssassin+Amavisd-new)

メールサーバーについて気になった事が有ったので、さくらVPS環境で、メールサーバー構築した際の備忘録です。

  • バーチャルドメインで運用を想定している為、MySQLを利用して、管理はPostfixAdminで行えるようにします。
  • 通信はTSLを利用します。
  • アンチウィルス、スパムフィルタを利用します。
メールサーバー Postfix 2.6.6
POP、IMAPサーバー Dovecot 2.0.9
アンチウィルスソフトウェア ClamAV 0.97
スパムフィルタソフトウェア SpamAssassin 3.3.1
メールサーバー、アンチウィルスソフトウェア、スパムフィルタソフトウェアのインターフェースソフトウェア Amavised-new 2.8.0
メールアカウント管理 PostfixAdmin 2.3.6

PostfixAdminのインストールと設定

PostfixAdmin からソースをダウンロードして、解凍後、公開ディレクトリにFTPなどでアップロードします。今回は公開ディレクトリを下記のような形で設定し、PostfixAdminを配置しました。

/home/webadmin/public_html ← ドキュメントルート 
/home/webadmin/public_html/postfixadmin 

PostfixAdminで使用するDB、Userの作成

データベースをpostfix、ユーザーをpostfixで作成しました。

create database postfix GRANT ALL PRIVILEGES ON *.* TO 'postfix'@'localhost' IDENTIFIED BY 'XXXXXXXX' WITH GRANT OPTION; 

PostfixAdminの設定

設定ファイルは、config.inc.phpですが、config.local.phpというファイルがある場合は、設定を上書きするので、config.local.phpを作成して、設定内容を記述します。

 
vi /home/webadmin/public_html/postfixadmin/config.local.php 

<?php $CONF['configured'] = true; 
$CONF['setup_password'] = 'changeme'; // ブラウザからアクセスした後に設定する 
$CONF['default_language'] = 'ja'; 
$CONF['database_type'] = 'mysqli'; 
$CONF['database_host'] = 'localhost'; 
$CONF['database_user'] = 'postfix'; 
$CONF['database_password'] = 'XXXXXXX'; 
$CONF['database_name'] = 'postfix'; 
$CONF['database_prefix'] = ''; 
$CONF['admin_email'] = 'postmaster@ドメイン名'; 
$CONF['encrypt'] = 'md5crypt'; // パスワードの暗号化方式 
$CONF['page_size'] = '100'; 
$CONF['domain_path'] = 'YES'; // メールボックス用に、ドメインごとにディレクトリを作成する /home/virtual/virtualdomain.com/ 
$CONF['aliases'] = '100'; 
$CONF['mailboxes'] = '100'; 
$CONF['maxquota'] = '100'; 
$CONF['quota'] = 'YES'; 
$CONF['backup'] = 'NO'; 
$CONF['sendmail'] = 'NO'; 
$CONF['fetchmail'] = 'NO'; 
$CONF['new_quota_table'] = 'YES'; // dovecotのバージョンが1.2以下の場合はNOにする。 
$CONF['user_footer_link'] = 'http://ドメイン名/postfixadmin/users/main.php'; 

// procmail使用時の設定 
// メールディレクトリ自動作成 
$CONF['mailbox_postcreation_script'] = 'sudo /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh'; 
// メールディレクトリ自動削除 
$CONF['mailbox_postdeletion_script'] = 'sudo /usr/local/bin/postfixadmin/postfixadmin-mailbox-postdeletion.sh'; 
// ドメインディレクトリ自動削除 
$CONF['domain_postdeletion_script'] = 'sudo /usr/local/bin/postfixadmin/postfixadmin-domain-postdeletion.sh'; 
?>

バーチャルドメインメールを保存しておくディレクトリ、ユーザーの作成

バーチャルドメインでは、メールボックスとUNIXユーザーは切り離されて、メールは指定したバーチャルドメイン用のメールボックスに配送されます。そのユーザーを作成します。

 #groupadd -g 5000 virtual #useradd -g 5000 -u 5000 virtual 

設定後、http://ドメイン/postfixadmin/setup.phpにアクセスします。

imap関数がないとWarningが出たので、

 
# yum install php-imap 

としてインストールしました。インストール後はapacheを再起動します。

 
# /sbin/service/httpd restart 

その後、http://ドメイン/postfixadmin/setup.phpにアクセスし、Warningが出ないことを確認したら、パスワードの設定をして、管理画面からドメイン、ユーザーを追加します。

セットアップが完了したら、セットアップ用のファイルを削除します。

 
# rm -f /home/webadmin/public_html/postfixadmin/setup.php 
# rm -f /home/webadmin/public_html/postfixadmin/motd* 

Postfixのインストールと設定

さくらVPSにははじめからPostfixがインストールされています。

インストール済みのPostfixが対応しているルックアップテーブルを表示して、MySQLに対応しているか確認します。

 
# postconf -m btree cidr environ hash ldap mysql nis pcre proxy regexp static unix 

mysqlと表示されているのでMySQLに対応していることが確認できます。

PostfixからMySQLへアクセスする為のファイルを作成します。

 
# vi /etc/postfix/mysql_virtual_alias_maps.cf 

user = postfix 
password = XXXXXX 
hosts = localhost 
dbname = postfix 
table = alias 
select_field = goto 
where_field = address 

# vi /etc/postfix/mysql_virtual_domains_maps.cf 

user = postfix 
password = XXXXXX 
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 = postfix 
password = XXXXXX 
hosts = localhost 
dbname = postfix 
table = mailbox 
select_field = maildir 
where_field = username 

# vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cf 

user = postfix 
password = XXXXXX 
hosts = localhost 
dbname = postfix 
table = mailbox 
select_field = quota 
where_field = username 
#additional_conditions = and active = '1' 

Postfixの設定ファイルを編集します。

設定ファイルを変更する場合は全て、オリジナルのバックアップをとってから行いました。

 
# cp /etc/postfix/{main.cf,main.cf.org} 
 
# vi /etc/postfix/main.cf 

#inet_interfaces = localhost #コメントアウト 
#inet_protocols = all #コメントアウト 
#mydestination = $myhostname, localhost.$mydomain, localhost #コメントアウト 

#最終行に追加 
myhostname = wwwXXXXX.sakura.ne.jp #さくらのホスト名 
inet_interfaces = all # 外部からのメールも受信する 
inet_protocols = ipv4 mydestination = $myhostname, localhost 
relay_domains = $mydestination 
home_mailbox = Maildir/ 
smtpd_banner = $myhostname ESMTP unknown 

# Virtual Domain w/MySQL 
local_transport = local 
virtual_transport = procmail # メールの配送はprocmail 

procmail_destination_recipient_limit = 1 
virtual_mailbox_base = /home/virtual 
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 = 5000 
virtual_uid_maps = static:5000 
virtual_gid_maps = static:5000 

maximal_backoff_time = 800s 
minimal_backoff_time = 100s 
bounce_queue_lifetime = 60m 
maximal_queue_lifetime = 60m 
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_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination 

# SpamAssasin 
# procmailと連携するようにする。 
mailbox_command = /usr/bin/procmail 
# End SpamAssasin 

# amavisd-new 
# amavisd-newと連携するように設定 
content_filter=smtp-amavis:[127.0.0.1]:10024 
# End amavisd-new 

新規ユーザーが追加されたらホームディレクトリに Mairdir/ を自動で作成されるようにする。

 
# mkdir -p /etc/skel/Maildir/{new,cur,tmp} 
# chmod -R 700 /etc/skel/Maildir/ 

サブミッションポート587番ポートを利用する。

 
# cp /etc/postfix/{master.cf,master.cf.org} 
# vi /etc/postfix/master.cf 

#最終行に追加 
submission inet n - n - - smtpd 
# amavisd-new
smtp-amavis unix -    -    n    -    2  smtp
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
127.0.0.1:10025 inet n    -    n    -    -  smtpd
    -o content_filter=
    -o local_recipient_maps=
    -o relay_recipient_maps=
    -o smtpd_restriction_classes=
    -o smtpd_client_restrictions=
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o mynetworks=127.0.0.0/8
    -o strict_rfc821_envelopes=yes
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000
# End amavisd-new

# procmail
procmail unix - n n - - pipe
  flags=R user=virtual argv=/usr/bin/procmail -t -m USER=${user} DOMAIN=${nexthop} /etc/procmailrc
# End procmail

最後に自動起動の設定をして終了です。

 
# /sbin/chkconfig postfix on 

dovecot2のインストールと設定

yumでインストールする。

 
# yum install dovecot dovecot-mysql 

dovecot2の設定ファイルは/etc/dovecot/dovecot.confですが、/etc/dovecot/conf.d/以下に.confファイルを作成すれば自動で読みこんでくれるので、00-base.confというファイルを作成し設定を行います。

 
# vi /etc/dovecot/conf.d/00-base.conf 
# debug
auth_debug_passwords = yes
auth_verbose = yes
auth_debug = yes

listen = *
disable_plaintext_auth = no
auth_mechanisms = plain login digest-md5 cram-md5

# mail dir
mail_location = maildir:/home/virtual/%d/%u
first_valid_uid = 5000
first_valid_gid = 5000
mail_plugins = quota

protocol imap {
  imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
  mail_plugins = $mail_plugins imap_quota
}
protocol pop3 {
  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
passdb {
  driver = sql
  args = /etc/dovecot/dovecot-postfixadmin-mysql.conf
}
userdb {
  driver = sql
  args = /etc/dovecot/dovecot-postfixadmin-mysql.conf
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
  }
}
plugin {
  quota = maildir:User quota
}

次に、/etc/dovecot/conf.d/10-auth.confを編集します。

 
# cp /etc/dovecot/conf.d/{10-auth.conf,10-auth.conf.org} 
# vi /etc/dovecot/conf.d/10-auth.conf 

#auth_mechanisms = plain #コメントアウト 
#!include auth-system.conf.ext #コメントアウト 

次に、MySQLへの接続ファイルを作成します。

 
# vi /etc/dovecot/dovecot-postfixadmin-mysql.conf 
driver = mysql 
connect = host=/var/run/mysqld/mysqld.sock 
dbname=postfix 
user=postfix 
password=XXXXXX 
default_pass_scheme = MD5-CRYPT 
password_query = SELECT password FROM mailbox WHERE username = '%u' AND active = '1' 
user_query = SELECT concat('/home/virtual/', maildir) AS home, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = '%u' AND active = '1' 

次に、認証用ライブラリをインストールします。

 
# yum install cyrus-sasl-plain cyrus-sasl-md5 

最後自動起動の設定をして終了です。

 
# /sbin/chkconfig dovecot on 

ClamAVのインストールと設定

yumでインストール

# yum install clamd

バックアップを取って、設定(実行ユーザー(root)にする)

# cp /etc/{clamd.conf,clamd.conf.org} 
# vi /etc/clamd.conf

#User clam #コメントアウト

起動と自動起動設定

# /etc/init.d/clamd start
# chkconfig clamd on

ウイルス定義ファイル更新機能を有効化と、定義ファイルの更新

# sed -i 's/Example/#Example/g' /etc/freshclam.conf
# freshclam

ClamAVとPostfixの連携設定

# vi /etc/clamd.conf

#TCPSocket 3310 #コメントアウト

/etc/init.d/clamd restart

Amavised-newのインストールと設定

yumでインストール

# yum install amavisd-new

バックアップを取って、設定

# cp /etc/amavisd/{amavisd.conf,amavisd.conf.org} 
# vi /etc/amavisd/amavisd.conf

# COMMONLY ADJUSTED SETTINGS:
$undecipherable_subject_tag = ''; #←追加(パスワード付ZIPファイル受信時メール件名に「***UNCHECKED***」と付加されないようにする。)

@bypass_spam_checks_maps  = (1);  # controls running of anti-spam code #←コメントアウト解除(amavisd-newではスパムチェックは行なわないようにする。スパムチェックはprocmail経由でspamcコマンドで行なう)

$mydomain = 'wwwXXXXX.sakura.ne.jp';   # a convenient default for other settings #←コメントアウト解除してホスト名に変更する

#$QUARANTINEDIR = undef;      # -Q #←コメントアウト(ウィルスメールは隔離しない)

#$virus_admin               = undef; #←コメントアウト(ウィルス検知メールを管理者宛に通知しない)

### BLOCKED ANYWHERE
# qr'^UNDECIPHERABLE$',  # is or contains any undecipherable components
# qr'^\.(exe-ms|dll)$',                   # banned file(1) types, rudimentary #←コメントアウト(exeファイルを受信できるようにする)
# qr'^\.(exe|lha|cab|dll)$',              # banned file(1) types


# #   this entry; when running chrooted one may prefer socket "$MYHOME/clamd".
# ↓追加(/var/run/clamav/clamd.sockはソケット名変更)
['ClamAV-clamd',
  \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],
  qr/\bOK$/m, qr/\bFOUND$/m,
  qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],

起動と自動起動設定

# /etc/init.d/amavisd start
# chkconfig amavisd on

SpamAssassin設定

起動と自動起動設定

# /etc/init.d/spamassassin start
# chkconfig spamassassin on

バックアップを取って設定

# cp /etc/mail/spamassassin/{v310.pre,v310.pre.org}
# vi /etc/mail/spamassassin/v310.pre


loadplugin Mail::SpamAssassin::Plugin::TextCat #←コメントアウト解除

rootユーザーでSpamAssassin設定ファイル最新化スクリプト作成

# cd ~
# vi spamassassin-update
#!/bin/bash

# SpamAssassin設定ファイル最新版ダウンロード
cd /etc/mail/spamassassin
wget -qN http://www.flcl.org/~yoh/user_prefs

# 設定ファイル更新時のみSpamAssassin再起動
diff user_prefs user_prefs.org > /dev/null 2>&1
if [ $? -ne 0 ]; then
    cp user_prefs local.cf

    # スパム判断したメールを添付形式にしないように設定
    echo "report_safe 0" >> local.cf

    # スパム判断したメールの件名に「***SPAM***」を付加するように設定※受信メールサーバーがPOPの場合のみ
    echo "rewrite_header Subject ***SPAM***" >> local.cf

    # SpamAssassin再起動
    /etc/rc.d/init.d/spamassassin restart > /dev/null
fi
cp user_prefs user_prefs.org

実行権限追加

# chmod +x spamassassin-update

一度実行して、最新にする

# ./spamassassin-update

cronに登録する

# mv spamassassin-update /etc/cron.daily/

procmailの設定ファイルを新規作成する

# vi /etc/procmailrc
SHELL=/bin/bash
PATH=/usr/bin:/bin
DEFAULT=/home/virtual/$DOMAIN/$USER\@$DOMAIN/
LOCKFILE=/home/virtual/procmail.lock
LOGFILE=/home/virtual/procmail.log
#VERBOSE=ON

# SpamAssassin Spam Check
:0fw
|/usr/bin/spamc


:0
*^X-Spam-Flag: YES
$SPAM

ログの設定

# vi /etc/logrotate.d/procmail
/home/virtual/procmail.log {
    missingok
    nocreate
    notifempty
}

メールディレクトリの自動作成・削除

PostfixAdminを使ってアカウント追加・削除する際に、ディレクトリを自動で作成・削除するようにスクリプトを作成する。

メールボックス作成・削除スクリプト用ディレクトリ作成

# mkdir /usr/local/bin/postfixadmin

PostfixAdminに有るスクリプトをコピー

# cp /home/webadmin/public_html/postfixadmin/ADDITIONS/postfixadmin-domain-postdeletion.sh /usr/local/bin/postfixadmin
# cp /home/webadmin/public_html/postfixadmin/ADDITIONS/postfixadmin-mailbox-postcreation.sh /usr/local/bin/postfixadmin
# cp /home/webadmin/public_html/postfixadmin/ADDITIONS/postfixadmin-mailbox-postdeletion.sh /usr/local/bin/postfixadmin

削除したメールボックスを保存するディレクトリを作成

# mkdir /home/virtual/.deleted-maildirs
# chmod 0700 /home/virtual/.deleted-maildirs
# chown virtual:virtual /home/virtual/.deleted-maildirs

スクリプトの編集(メールボックス作成)

# vi /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh
#basedir=/var/spool/maildirs #←コメントアウト
basedir=/home/virtual        #←追加
# ↓コメントアウト
#maildirmake "$maildir"
#if [ ! -d "$maildir" ]; then
#    echo "$0: maildirmake didn't produce a directory; bailing out."
#    exit 1
#fi

exit 0の前に追加

mkdir "$maildir"
if [ ! -d "$maildir" ]; then
    echo "$0: mkdir didn't produce a directory; bailing out."
    exit 1
fi

mkdir "${maildir}cur"
if [ ! -d "${maildir}cur" ]; then
    echo "$0: mkdir didn't produce a directory; bailing out."
    exit 1
fi

mkdir "${maildir}new"
if [ ! -d "${maildir}new" ]; then
    echo "$0: mkdir didn't produce a directory; bailing out."
    exit 1
fi

mkdir "${maildir}tmp"
if [ ! -d "${maildir}tmp" ]; then
    echo "$0: mkdir didn't produce a directory; bailing out."
    exit 1
fi

chown -R virtual:virtual "$maildir"
chmod -R 700 "$maildir"

スクリプトの編集(メールボックス削除)

# vi /usr/local/bin/postfixadmin/postfixadmin-mailbox-postdeletion.sh
#basedir=/var/spool/maildirs
basedir=/home/virtual
#trashbase=/var/spool/deleted-maildirs
trashbase=/home/virtual/.deleted-maildirs
#subdir=`echo "$1" | sed 's/@.*//'`
subdir=$1

スクリプトの編集(ドメイン削除用)

# vi /usr/local/bin/postfixadmin/postfixadmin-domain-postdeletion.sh
#basedir=/var/spool/maildirs
basedir=/home/virtual
#trashbase=/var/spool/deleted-maildirs
trashbase=/home/virtual/.deleted-maildirs

実行権限追加

# chmod 0700 /usr/local/bin/postfixadmin/postfixadmin*

apacheがsudo出来るように設定する

# visudo
Defaults    requiretty
Defaults:apache    !requiretty #←追加


root    ALL=(ALL)       ALL
apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh #←追加
apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/postfixadmin-mailbox-postdeletion.sh #←追加
apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/postfixadmin-domain-postdeletion.sh #←追加

再起動して確認

/etc/init.d/postfix restart
/etc/init.d/dovecot restart
/etc/init.d/spamassassin restart
/etc/init.d/clamd restart
/etc/init.d/amavisd restart

TSLの設定追記…

MySQL で テーブルのコピー

ちょっとデータ追加したり、試しにカラム追加したい時等、コピーしてバックアップとっておくとき便利です。

/* aaaテーブルのスキーマをコピーしてテーブル作成 */
> CREATE TABLE back_aaa LIKE aaa;
/* aaaテーブルのデータをINSERT */
> INSERT INTO back_aaa SELECT * FROM aaa;

MySQLの自動起動設定

MySQLの自動起動設定がされてなかったのでしたというメモ。

[root@suusuke ~]# /etc/rc.d/init.d/mysqld start
mysqld を起動中:                                           [  OK  ]

[root@suusuke ~]# chkconfig mysqld on ← 自動起動設定
[root@suusuke ~]# chkconfig --list mysqld
mysqld         	0:off	1:off	2:on	3:on	4:on	5:on	6:off

VMWare Server の開発環境作り直し

インストールしたもののメモです。

OSインストール

Index of /Linux/centos/5/isos/i386. CentOS5.7を今回は使用しました。
ISOファイルをダウンロードして、最小構成でインストール。

VMWare Toolsインストール

VMWare上のCentOSは時間がずれるのでVMWare Toolsをインストール。
VMWare Serverの管理画面から[Install VMware Tools…]を選択します。
選択すると、CDドライブにインストール用のファイルがセットされます。

[root@localhost ~]# mount /dev/cdrom /mnt/
[root@localhost ~]# cd /mnt/
[root@localhost ~]# /etc/yum.conf
gpgcheck=0 ← 0に変更

[root@localhost ~]# cp VMwareTools-7.7.6-203138.i386.rpm /tmp/
[root@localhost ~]# cd /tmp/
[root@localhost ~]# yum localinstall VMwareTools-7.7.6-203138.i386.rpm
[root@localhost ~]# /etc/yum.conf
gpgcheck=1 ← 元に戻す

一旦、サーバを停止しvmxファイルを変更します。

tools.syncTime = "TRUE" ← TRUEに変更

サーバを再度起動し、grubの設定を変更します。
このパラメータの追加(divider=10)はCentOS5.7では合った方が精度が良いよ?とナレッジに記載あったので追加しました。
VMware KB: Timekeeping best practices for Linux guests.

[root@localhost ~]# vi /boot/grub/grub.conf
kernel /vmlinuz-2.6.18-274.el5 ro root=/dev/VolGroup00/LogVol00 divider=10

ntpdインストール

[root@localhost ~]# yum install ntp
[root@localhost ~]# vi /etc/ntp.conf 
tinker panic 0
restrict 127.0.0.1
restrict default kod nomodify notrap
server 0.vmware.pool.ntp.org
server 1.vmware.pool.ntp.org
server 2.vmware.pool.ntp.org
driftfile /var/lib/ntp/drift

[root@localhost ~]# vi /etc/ntp/step-tickers 
0.vmware.pool.ntp.org
1.vmware.pool.ntp.org

[root@localhost ~]# service ntpd start
[root@localhost ~]# chkconfig ntpd on

インストールと設定

まずはifconfigでipを確認して、puttyまたはpoderosaで接続する。

viコマンドでvimを使うようにする

何かとvimの方が便利なので、aliasで設定

[root@localhost ~]# vi /etc/bashrc 

alias vi='vim' ← 追加

[root@localhost ~]# source /etc/bashrc 

不要なサービス停止

yum自動アップデート停止

[root@localhost ~]# /etc/rc.d/init.d/yum-updatesd stop
yum-updates を停止中:                                      [  OK  ]
[root@localhost ~]# yum remove yum-updatesd

SELinuxを無効化

[root@localhost ~]# vi /etc/sysconfig/selinux
#SELINUX=enforcing
SELINUX=disabled

iptables停止・自動起動無効

[root@localhost ~]# service iptables stop
[root@localhost ~]# chkconfig iptables off

RPMリポジトリを追加

[root@localhost ~]# rpm -import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
[root@localhost ~]# vi /etc/yum.repos.d/utterramblings.repo

[utterramblings]
name=Jason's Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=0
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

enabled=0にしているので、通常のyumコマンドではこのリポジトリは使われない。

使う場合は

[root@localhost ~]# yum --enablerepo=utterramblings install パッケージ
[root@localhost ~]# yum --enablerepo=utterramblings update パッケージ

とする。

再起動

[root@localhost ~]# reboot

Apache,PHP,MySQLインストール

[root@localhost ~]# yum --enablerepo=utterramblings install httpd httpd-devel php php-mbstring php-devel php-mcrypt php-pear php-mysql php-gd mysql-server

Apache,MySQLの起動と自動起動設定

[root@localhost ~]# chkconfig httpd on
[root@localhost ~]# chkconfig mysqld on
[root@localhost ~]# service httpd start
[root@localhost ~]# service mysqld start

MySQLのユーザ設定

rootのパスワードを設定して、パスワードがブランクのユーザを削除

[root@localhost ~]# mysql -u root
mysql> set password for root@localhost=password('password');
mysql> exit

[root@localhost ~]# mysql -u root -p
mysql> DELETE FROM mysql.user WHERE Password = '';
mysql> exit

Apacheの設定

sampleユーザ追加

[root@localhost ~]# adduser sample
[root@localhost ~]# su - sample
[root@localhost ~]# chmod 755 /home/sample/

[sample@localhost ~]$ mkdir ~/public_html

[sample@localhost ~]$ vi ~/public_html/phpinfo.php ← 確認用
<?php
phpinfo();


&#91;sample@localhost ~&#93;$ exit
&#91;/bash&#93;

<h4>バーチャルホスト設定</h4>

[root@localhost ~]# vi /etc/httpd/conf.d/vhosts.conf

NameVirtualHost *:80# sample<VirtualHost *:80>
        DocumentRoot /home/sample/public_html
        ServerName test.sample.com
        <Directory "/home/sample/public_html">
                Options Indexes FollowSymLinks MultiViews Includes ExecCGI
                AddType text/html .shtml
                AddHandler server-parsed .shtml
                AddHandler cgi-script .cgi .pl
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>

確認

[root@localhost ~]# httpd -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server test.sample.com (/etc/httpd/conf.d/vhosts.conf:5)
         port 80 namevhost test.sample.com (/etc/httpd/conf.d/vhosts.conf:5)
Syntax OK

Windowsのhostsファイル変更

C:\Windows\System32\drivers\etc\hosts

192.168.1.3       test.sample.com

http://test.sample.com/phpinfo.phpにアクセスして確認.

ここまでで一通り開発環境が出来ました。
ソースのアップはrsync等で同期すると簡単にできると思います。

Windowsからrsyncを利用する方法も書きました。
suusuke – blog – Windows で rsync を使用する.

追加

ここからは有ると便利な設定等を追記していきます。

PHP Xdebugインストール

gcc,gcc-c++インストール

[root@localhost ~]# yum -y install gcc gcc-c++

Xdebugインストール

既にphp-devel,php-pearはインストールしてある状態なのでpeclコマンドでインストール。

[root@localhost ~]# pecl install xdebug

....


Build process completed successfully
Installing '/usr/lib/php/modules/xdebug.so'
install ok: channel://pecl.php.net/xdebug-2.1.2
configuration option "php_ini" is not set to php.ini location
You should add "extension=xdebug.so" to php.ini

/usr/lib/php/modules/xdebug.soにxdebug.soがインストールされました。

php.iniに追記

/etc/php.ini

zend_extension="/usr/lib/php/modules/xdebug.so"

SQLの実行結果(SELECT)を見やすくする方法

psql

psql => \x
psql => select * from users;

mysql

mysql> select * from users \G;

psqlもmysqlも縦でカラムを表示するようになるので崩れずに見やすくSELECTの実行結果を確認できるようになります。

Snow Leopard に PHP5.3 の環境に PHP4.4.9 をインストール

普段は迷わずPHP5.3使うのですが、今やってるサイトがPHP4なのでインストールしたときのログを残しておきます。

前提

  • PHPはシステムにもともと入ってるPHP5.3(portsでインストールしたものでない)
  • ApacheはportsでインストールしたApache2.2
  • どのようにするか

    PHP4はソースからインストールする。makeしてできるApahceのモジュールのMIMEタイプを『application/x-h-httpd-php4』で作成する。バーチャルホストの設定でPHP4で動くようにする。

    make準備

    [suusuke@macbook ~]$ curl -o php-4.x.tar.gz -L http://jp2.php.net/get/php-4.4.9.tar.gz/from/this/mirror
    [suusuke@macbook ~]$ tar zxvf php-4.x.tar.gz
    [suusuke@macbook ~]$ cd php-4.4.49
    

    sapi/apache2handler/sapi_apache2.cを変更する。

    #define PHP_MAGIC_TYPE "application/x-httpd-php"
    

    #define PHP_MAGIC_TYPE "application/x-httpd-php4"
    

    configure

    とりあえず最低限、必要そうなものをオプションに追加しました。
    また、Snow Leopardでconfigureする時はlresolvを有効にする必要があるようなので、『EXTRA_LIBS=-lresolv』で指定する。

    [suusuke@macbook ~]$ EXTRA_LIBS=-lresolv \ 
     ./configure --prefix=/usr/local/lib/php-4.4.9 \
     --with-apxs2=/usr/sbin/apxs \
     --enable-mbstring \
     --with-pgsql=/opt/local/lib/postgresql83 \
     --with-pdo-pgsql=/opt/local/lib/postgresql83 \
     --with-mysql \
     --with-pdo \
     --with-gd \
     --with-png-dir=/opt/local \
     --with-jpeg-dir=/opt/local \
     --with-zlib-dir=/opt/local
    

    ないものは基本portでインストール。
    今回インストールしたのは

    [suusuke@macbook ~]$ sudo port install libpng
    [suusuke@macbook ~]$ sudo port install jpeg
    

    の二つ。

    MySQL、PostgreSQLのインストールについてはSnow Leopard に PostgreSQL インストールSnow Leopard に MySQL 再インストールを参照。

    make

    [suusuke@macbook ~]$ make
    [suusuke@macbook ~]$ sudo make install
    

    設定

    [suusuke@macbook ~]$ sudo cp php.ini-recommended /usr/local/lib/php-4.4.9/lib/php.ini
    

    PHP.iniのinclude_pathにPEARのパスを追加。。。したいところだったんだけど、PEARがインストールされない。。。
    とりあえず、PEARは未だにPEAR::DB使ってるんみたいなんで、手動で入れることに。

    aliasの設定

    ~/.bashrc

    alias php4=/usr/local/lib/php-4.4.9/bin/php
    

    反映

    [suusuke@macbook ~]$ source ~/.bashrc
    

    確認

    [suusuke@macbook ~]$ php4 -v
    PHP 4.4.9 (cli) (built: Mar 26 2011 10:08:22)
    Copyright (c) 1997-2008 The PHP Group
    Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
    

    バーチャルホストの設定

    # test.php5.info
    <VirtualHost *:80>
        DocumentRoot "/Library/WebServer/Documents/php5/public_html"
        ServerName test.php5.info
        <Directory "/Library/WebServer/Documents/php5/public_html">
            AllowOverride All
            order deny,allow
            allow from All
        </Directory>
    </VirtualHost>
    
    # test.php4.info
    <VirtualHost *:80>
        DocumentRoot "/Library/WebServer/Documents/php4/public_html"
        ServerName test.php4.info
        <Directory "/Library/WebServer/Documents/php4/public_html">
            AllowOverride All
            order deny,allow
            AddType application/x-httpd-php4 .php
            allow from All
        </Directory>
    </VirtualHost>
    

    phpinfo();で確認してみる。

    削除したいときは

    /usr/local/lib/php-4.4.9
    php-x.x.x/
          bin/ 	PHPコマンドなど
          etc/ 	pear設定ファイル
          include/ 	ヘッダファイルなど
          lib/php 	PEARライブラリディレクトリ
          man/ 	マニュアル
    
    /opt/local/apache2/modules/libphp4.so
    

    を削除するだけ。

    参考にさせてもらったサイト

    http://www.atmarkit.co.jp/fcoding/articles/macxphp/02/macxphp02a.html