ads

วันพุธที่ 31 กรกฎาคม พ.ศ. 2556

ลง PHP-MSSQL on CentOS 6

ลง PHP-MSSQL on CentOS 6

เดิมที่เคยลงไว้แล้วสำหรับการ compile freetds ใน php แบบ manual compile เอง
แต่อันนี้มาแนะนำสำหรับ server บางที่ใช้การ ลงแบบ yum install ก็จะต่างกันไปขั้นตอนน้อยลง  แต่ขึ้นอยู่กับว่า mirror ที่ใช้ด้วย

# rpm -ivh http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
โหลด remi.repo ที่มี freetds

# cd /etc/yum.repos.d/
# wget http://rpms.famillecollet.com/enterprise/remi.repo
# yum install freetds freetds-devel

Enable php-mssql ขึ้นมา
# yum install --enablerepo=remi php-mssql

แก้ไขไฟล์ configure freetds  /etc/freedts.conf

[global]
        # TDS protocol version
        tds version = 7.2
        dump file = /var/log/freetds.log
        dump file append = yes
        text size = 64512

[MSSQL]
        host = 10.66.9.11 ( ip เครือง database )
        port = 1433
        tds version = 7.2

tds version ตรงนี้ต้องตรวจสอบว่าที่เราใช้อยู่เป็น version ได ในที่นี้ใช้ sql server 2008 ใช้เป็น protocal tds version 7.2
เวอร์ชั่นอื่นๆ ตรวจสอบได้ที่ http://freetds.schemamania.org/userguide/choosingtdsprotocol.htm


แล้วทำการ restart apache สักรอบ

ตรวจสอบว่า php มี mobule ต่างรองรับ msslq แล้วหรือยัง

# php -i | grep mssql

อ้างถึง
/etc/php.d/mssql.ini,
mssql
mssql.allow_persistent => On => On
mssql.batchsize => 0 => 0
mssql.charset => no value => no value
mssql.compatability_mode => Off => Off
mssql.connect_timeout => 5 => 5
mssql.datetimeconvert => On => On
mssql.max_links => Unlimited => Unlimited
mssql.max_persistent => Unlimited => Unlimited
mssql.max_procs => Unlimited => Unlimited
mssql.min_error_severity => 10 => 10
mssql.min_message_severity => 10 => 10
mssql.secure_connection => Off => Off
mssql.textlimit => Server default => Server default
mssql.textsize => Server default => Server default
mssql.timeout => 60 => 60

แสดงว่า module ต่างๆ มาครบแล้ว


คำสั่ง ทดสอบ แบบ command line สำหรับการลง freetds ในส่วน version ต้องตรวจสอบว่า Database ที่เราใช้เป็น version ได
ในที่นี้เป็น sql server 2008 ซึ่งจะเป็น TDS version 7.2

# TDSVER=7.2 tsql -H 10.66.9.11 -p 1433 -U User_name
Password:
ใส่พาสเวิร์ดที่ใช้

locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Error 100 (severity 11):
        unrecognized msgno

แล้วทดสอบการรัน query ตัวอย่างเป็นการเรียกให้ดึงค่าเวลาวันเวลาในปัจจุบัน

1> select convert( varchar(30), getdate(), 120 ) as Now
2> go
Enter

Now
2013-06-11 10:48:52
(1 row affected)
1>

ตอบค่ามาได้ถูกต้อง


ทดลองสร้าง file php มาไฟล์หนึ่ง user - password ที่ใช้แล้วใส่ ค่าเพื่อดึงข้อมูล
<?php
error_reporting(E_ALL);
echo "<pre>\n";
$DB_HOST = "10.66.9.11:1433";
$DB_USER = "userofdatabase";
$DB_PASSWORD = "password";
$DB_DBNAME = "DATABASE_NAME";

$db = mssql_connect ($DB_HOST,$DB_USER,$DB_PASSWORD) or die("\nCan't connect to database server: ".$DB_HOST);
mssql_select_db($DB_DBNAME, $db) or die("\nCan't select database name: ".$DB_DBNAME);

$sql = "
        sp_who
";

$rs = mssql_query($sql, $db) or die("SQL ERROR: \n".$sql);

echo "<pre>\n";
while($row=mssql_fetch_assoc($rs)){
        print_r($row);
}
echo "</pre>\n";
mssql_close($db);

?>

แสดงค่าออกมาได้ถูกต้องแสดงว่าทำงานได้ครบ

การลบ binlog ใน mysql

การลบ binlog ใน mysql

เครืองที่เป็น Master leplicate กันมักประสบปัญหาเรืองนี้คือ mysqld-bin.0000xx  log ไฟล์มีขนาดใหญ่และเยอะมากจนทำให้พื้นที่ hdd โตเกินจำเป็น  เช่น

-rw-rw----  1 mysql mysql   10485760 Mar 11  2010 ibdata1
-rw-rw----  1 mysql mysql  268435456 Mar 11  2010 ib_logfile0
-rw-rw----  1 mysql mysql  268435456 Feb 16  2010 ib_logfile1
-rw-rw----  1 mysql mysql  268435456 Feb 16  2010 ib_logfile2
drwx------  2 mysql mysql       4096 Feb 16  2010 mysql
-rw-rw----  1 mysql mysql 1073741894 Mar 16  2010 mysqld-bin.000001
-rw-rw----  1 mysql mysql 1073742024 Mar 16  2010 mysqld-bin.000002
-rw-rw----  1 mysql mysql 1073741890 Mar 16  2010 mysqld-bin.000003
-rw-rw----  1 mysql mysql 1073742087 Mar 17  2010 mysqld-bin.000004
-rw-rw----  1 mysql mysql 1073741985 Mar 17  2010 mysqld-bin.000005
-rw-rw----  1 mysql mysql 1073741929 Mar 17  2010 mysqld-bin.000006
-rw-rw----  1 mysql mysql 1073742387 Mar 19  2010 mysqld-bin.000007
-rw-rw----  1 mysql mysql 1073741902 Mar 22  2010 mysqld-bin.000008
-rw-rw----  1 mysql mysql 1073742301 Mar 24  2010 mysqld-bin.000009
-rw-rw----  1 mysql mysql 1073742016 Apr 19  2010 mysqld-bin.000010
-rw-rw----  1 mysql mysql 1073742294 Apr 20  2010 mysqld-bin.000011
-rw-rw----  1 mysql mysql 1073742217 Apr 21  2010 mysqld-bin.000012
-rw-rw----  1 mysql mysql 1073742741 May 21  2010 mysqld-bin.000013
-rw-rw----  1 mysql mysql 1073741945 Apr  8  2011 mysqld-bin.000014
-rw-rw----  1 mysql mysql 1073741999 Oct  2  2011 mysqld-bin.000015
-rw-rw----  1 mysql mysql 1073742188 Apr  2  2012 mysqld-bin.000016
-rw-rw----  1 mysql mysql 1073741903 Jun  9  2012 mysqld-bin.000017
-rw-rw----  1 mysql mysql 1073742107 Aug  3  2012 mysqld-bin.000018
-rw-rw----  1 mysql mysql 1073742015 Oct  4  2012 mysqld-bin.000019
-rw-rw----  1 mysql mysql 1073742151 Feb 16 17:47 mysqld-bin.000020
-rw-rw----  1 mysql mysql  844116141 Jun  7 10:37 mysqld-bin.000021
-rw-rw----  1 mysql mysql        440 Jun  7 10:37 mysqld-bin.index
srwxrwxrwx  1 mysql mysql          0 Feb 16  2010 mysql.sock

สังเกตว่าเครืองนี้มีไฟล์ปีเก่าๆ ด้วย  เราจะทำการเคลียร์ทิ้งด้วย command กันครับ การลบทิ้งทื่อๆ เลยก็ได้ครับแต่อาจจะไม่ปลอดภัยหาก
เลยใช้วิธีการ purge แบบนี้ดีกว่า

เข้า mysql
# mysql -u root -p 
> flush logs; 
หลังจากคำสั่งนี้  ระบบจะทำการสร้าง bin logใหม่และไปเรียกใช้ log นี้แทน  เมื่อ ls -al ดูจะเป็น

-rw-rw----  1 mysql mysql   10485760 Mar 11  2010 ibdata1
-rw-rw----  1 mysql mysql  268435456 Mar 11  2010 ib_logfile0
-rw-rw----  1 mysql mysql  268435456 Feb 16  2010 ib_logfile1
-rw-rw----  1 mysql mysql  268435456 Feb 16  2010 ib_logfile2
drwx------  2 mysql mysql       4096 Feb 16  2010 mysql
-rw-rw----  1 mysql mysql 1073741894 Mar 16  2010 mysqld-bin.000001
-rw-rw----  1 mysql mysql 1073742024 Mar 16  2010 mysqld-bin.000002
-rw-rw----  1 mysql mysql 1073741890 Mar 16  2010 mysqld-bin.000003
-rw-rw----  1 mysql mysql 1073742087 Mar 17  2010 mysqld-bin.000004
-rw-rw----  1 mysql mysql 1073741985 Mar 17  2010 mysqld-bin.000005
-rw-rw----  1 mysql mysql 1073741929 Mar 17  2010 mysqld-bin.000006
-rw-rw----  1 mysql mysql 1073742387 Mar 19  2010 mysqld-bin.000007
-rw-rw----  1 mysql mysql 1073741902 Mar 22  2010 mysqld-bin.000008
-rw-rw----  1 mysql mysql 1073742301 Mar 24  2010 mysqld-bin.000009
-rw-rw----  1 mysql mysql 1073742016 Apr 19  2010 mysqld-bin.000010
-rw-rw----  1 mysql mysql 1073742294 Apr 20  2010 mysqld-bin.000011
-rw-rw----  1 mysql mysql 1073742217 Apr 21  2010 mysqld-bin.000012
-rw-rw----  1 mysql mysql 1073742741 May 21  2010 mysqld-bin.000013
-rw-rw----  1 mysql mysql 1073741945 Apr  8  2011 mysqld-bin.000014
-rw-rw----  1 mysql mysql 1073741999 Oct  2  2011 mysqld-bin.000015
-rw-rw----  1 mysql mysql 1073742188 Apr  2  2012 mysqld-bin.000016
-rw-rw----  1 mysql mysql 1073741903 Jun  9  2012 mysqld-bin.000017
-rw-rw----  1 mysql mysql 1073742107 Aug  3  2012 mysqld-bin.000018
-rw-rw----  1 mysql mysql 1073742015 Oct  4  2012 mysqld-bin.000019
-rw-rw----  1 mysql mysql 1073742151 Feb 16 17:47 mysqld-bin.000020
-rw-rw----  1 mysql mysql  844116141 Jun  7 10:37 mysqld-bin.000021
-rw-rw----  1 mysql mysql         98 Jun  7 10:37 mysqld-bin.000022
-rw-rw----  1 mysql mysql        440 Jun  7 10:37 mysqld-bin.index
srwxrwxrwx  1 mysql mysql          0 Feb 16  2010 mysql.sock

mysqld-bin.000022  คือไฟล์ที่เพิ่มเข้ามา  แล้วเราก็ทำการเคลียร์ log เก่าๆ นั้นได้เลยสั่ง

> purge binary logs to 'mysqld-bin.000022';
ระสักพัก
Query OK, 0 rows affected (25.39 sec)

แค่นี้เราก็ลดพื้นที่ไปได้มากแล้วล่ะครับ
========================================


อีกกรณีหนึ่ง หากเราไม่ชัวร์ว่า จะมี app ไดมาใช้ log เก่ากว่า 3-4 วันหรือไม่  หรือกลัวว่าจำเป็นต้อง restore กลับไปวันก่อน
อาจจะใช้เป็นคำสั่งแบบ ระบุวันที่ก็ได้เป็น

# mysql -u root -p -e "PURGE BINARY LOGS BEFORE '2013-06-02 01:00:00';"
ใส่ password root ไประบบก็จะทำการ clean log ก่อนวันที่ 2/06/2013

=======================================

เพิ่มเติมในส่วน configure my.cnf
expire_logs_days = 5
ระบุไว้เพื่อให้เก็บ bin log ย้อนหลังไว้ 5 วัน

อีกวิธีใส่คอมมาน purge ไว้ใน contrab ให้เคลียร์ย้อนหลังกี่วันก็ว่ากันไป
mysql> PURGE BINARY LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 7 DAY);

script tar ไฟล์ไว้แบคอัพครับ

แปะไว้กันลืมเป็นการใช้คำสั่ง tar บีบไฟล์  แล้วต้งเวลาลบ
สามารถเอาไปประยุกต์ใช้ในการแบคอัพไฟล์  เมื่อใช้เร่วมกับ crontab  ได้ครับ  ลองดู


#!/bin/sh
### the date of today ###
Ext=`date +%Y%m%d%H%M`

### the date of yesterday ###
Yd=`date +%d`
Yd=`expr $Yd - 1`
Ydate=`date +%Y%m$Yd`

dest_file="/BACKUPMail/mail-$Ext.tar.gz"
source_file="/home/mail/"

/bin/tar cvfz $dest_file $source_file

sleep 3
### delete file that store over 3days in this directory ###
find /BACKUPMail/ -mtime +3 | xargs rm -rf

exit 0

เอาไปประยุกต์ใช้กันครับ  source  กับ dest_file ตามที่เราต้องการ

การทำ Replicate MySQL


ทำ Replicate MySQL ครับ

หลังจากลง MySQL เสร็จแล้ว ( ขอข้ามขั้นตอนนี้เพราะเคยเขียนไว้แล้วกระทู้ล่างๆ นี้ )
วันนี้มาทำ กับเครื่องดังนี้โดยสิ่งที่มีดังนี้

1.  Master ผมเป็น FreeBSD 6.2 
ลง MySQL แบบผ่าน ports เปลี่ยนพาร์ท  data แล้วไว้ที่  /home/mysqldata

2.  Slave เป็น Debian 4.0 
ลง MySQL แบบผ่าน apt-get เปลี่ยนพาร์ท data แล้วไว้ที่ /home/mysqldata 

เพื่อง่ายต่อการแบคอัพข้อมูลครับ   ลงแบบผ่านซอสคอมไพล์เองก็ได้  แบบกระทู้ก่อนที่เคยเขียนไว้  

1.ที่เครื่อง Master 
- เข้าใช้ MySQL

# mysql -u root -p   

ใส่พาสเวิร์สไป เข้าไปสู่พร้อมของ mysql
>

ทำการแกร้งสิทธิ์ให้เครื่องสลาฟ  ให้มีสิทธิ์ดึงข้อมูล  โดยคำสั่งนี้
GRANT REPLICATION SLAVE ON *.* TO root@"เครือง slave.ชื่อโดเมน" IDENTIFIED BY 'พาสเวิร์ส root ของ slave';

ทำการแก้ไขไฟล์ config   my.cnf  ( ที่ต้องก๊อปมาเองก่อนแล้ว )
# vi /etc/my.cnf    แล้วใส่ค่านี้เพิ่มเข้าไป

server-id       = 1
log-bin=mysql-bin
server-id               = 1
binlog-ignore-db        = mysql
replicate-ignore-db     = mysql

เสร็จแล้วเซฟออกมา
2. ที่เครื่อง Slave
ทำการแก้ไขไฟล์คอนฟิก  my.cnf  ( ที่ก๊อปมาเองแล้วก่อนหน้านี้เช่นกัน  ในเครืองนี้เก็บใน /etc/mysql/my.cnf )

# vi /etc/mysql/my.cnf    

แล้วใส่ค่าไปดังนี้

[mysqld]
master-host= ไอพีเครื่อง Master
master-user=root
master-password= พาสเวิร์ส root ของ slave
master-port=3306
server-id=2

เสร็จแล้ว เซฟออกมา
restart service ทั้ง 2 เครือ่งสักที
มาสเตอร์  freeBSD

- /usr/local/etc/rc.d/mysql-server stop
- /usr/local/etc/rc.d/mysql-server start

slave Debian4

- /etc/init.d/mysql stop
- /etc/init.d/mysql start


ตรวจสอบการทำงานของการ replicate
ที่เครื่อง slave เข้า MySQL
แล้วลองดูสเตตัส  การทำ slave  ดังนี้

> mysql> SHOW SLAVE STATUS\G

*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: 10.0.0.217
                Master_User: root
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: mysql-bin.000003
        Read_Master_Log_Pos: 424
             Relay_Log_File: bebe-relay-bin.000005
              Relay_Log_Pos: 235
      Relay_Master_Log_File: mysql-bin.000003
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            Replicate_Do_DB: 
        Replicate_Ignore_DB: 
         Replicate_Do_Table: 
     Replicate_Ignore_Table: 
    Replicate_Wild_Do_Table: 
Replicate_Wild_Ignore_Table: 
                 Last_Errno: 0
                 Last_Error: 
               Skip_Counter: 0
        Exec_Master_Log_Pos: 424
            Relay_Log_Space: 235
            Until_Condition: None
             Until_Log_File: 
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File: 
         Master_SSL_CA_Path: 
            Master_SSL_Cert: 
          Master_SSL_Cipher: 
             Master_SSL_Key: 
      Seconds_Behind_Master: 0
1 row in set (0.00 sec)

จะโชว์สถานะของสลาฟทั้งหมด  ว่า running อยู่ ทั้ง IO และ slave SQL  มาสเตอร์เครือ่งไหน  แล้ว log บนมาสเตอร์เขียนที่ไฟล์ไหน

แล้วมาดูฝั่ง Master บ้าง
ลอกอิน MySQL

>   แล้วสั่ง
> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      424 |              | mysql            | 
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

ดูที่ไฟล์เป็นตัวเดียวกัน  ok และระดับหนึ่ง

ทดสอบโดย ผ่านหน้า interface ของ phpmyadmin ก็ได้
โดยลองทดสอบสร้าง database มาสักตัวหนึ่ง  ตารางสักตาราง  จากฝั่ง Master  ( ที่นี้คือ 10.0.0.217)
ดังรูปผมสร้าง ดาต้าเบส ชื่อ REP1 ตารางชื่อ test  ใส่ฟิวไปฟิวหนึ่ง ชื่อ id  แล้วก็ลองใส่ค่า 55555

แล้วลองเปิดดูที่เครือง  Slave ( ที่นี้คือ 10.0.0.232 )

จะเห็นได้ว่ามีตารางโผล่มาอีกอันคือ REP1 และข้อมูลด้านในเหมือนกันกับ ตัว master เด๊ะ ๆ  
เป็นอันว่าสำมะเร็จครับ   การทำ Replicate MySQL


หากก๊อปมาแล้วบางที ฟังชั่นการ Replicate หลุด 
ฟ้องว่าไม่เจอ ตัวมาสเตอร์เราต้องทำการเชื่อมต่อใหม่ด้วยคำสั่ง 


CHANGE MASTER TO MASTER_HOST='ip ตัวมาสเตอร์', MASTER_USER='user ที่ระบุในคอนฟิกในการ rep', MASTER_PASSWORD='password ที่ระบุในการทำ rep';

พิ่มเติมในกรณีที่เกิดเหตุขัดข้องทำให้การ replicate ไม่ทำการ sync กันไม่ว่าจะเป็นไฟดับ  หรือ รีบูทเครืองแล้วเออเรอร์
สตาร์ทเซอร์วิสแล้วยังไส่ sync กัน    ให้ทำการ  stop service ทั้ง2 ฝั่ง
แล้ว  copy ข้อมูลของตัว master ทั้งหมด  ยกเว้น  ที่ขึ้นต้นว่า mysql ต่างๆ นั้นไม่ต้องเอามา
แล้วไปวางบนเครื่อง slave และลบ log ไฟล์เก่าบน slave ออกให้หมด
แล้วค่อยสตาร์ท service ทั้งสองเครืองขึ้นมาใหม่   แล้วลองเทสดู

แก้บั๊ก Boardcom 1Gb, 10Gb ใน Dell R610 กับ Debain 5.0.3

แก้บั๊ก Boardcom ใน Dell R610 กับ Debain 5.0.3 

หรือ รุ่นอื่นๆ ในขั้นตอนการลง  จะพบว่ามันฟ้องว่าไม่มี firmware ของการ์ดแลนด์ตัวนี้ 
the missing firmware file are : bnx2-09-4.0.5.fw ( รุ่นนี้ใช้การ์ด Broadcom NetXtreme II BCM5709 1000Base-T )  
พอดีเครื่องนี้มี LAN แบบ pci ผมเลย ignore ไปก่อนใช้แลนด์บนการ์ด  ( ถ้าไม่มีต้องหาไดร์เวอร์ใส่แผ่นมาลงก่อน) 
แล้วก็ลงตามปกติไปเรื่อยๆ  แล้วหาเฟิร์มแวร์ที่มันต้องการมาให้

# cd /usr/src
# wget http://http.us.debian.org/debian/pool/non-free/f/firmware-nonfree/firmware-bnx2_0.18_all.deb
# dpkg -i firmware-bnx2_0.18_all.deb 

รอสักครู่  แล้วรีบูทลองดู
# reboot   
หลังจากนั้นลองเปลียนสายไปเสียบแล้วเปลียน ขา interface ในไฟล์ /etc/network/interface เอาดูก็จะเวิร์คแล้วยุ่งยากนิดหนึ่ง


อ้อ !!!!   อย่าเพิ่งดีใจไป  หลังจากบูทมาจะเจอ bug ของ grub อีกอย่างหนึ่งแบบที่เคยเจอก็แก้ตามนี้เลยครับ
เพิ่มเติมการเจอและแก้บั๊ก Debian กับ R610
โปรเจคนี้ต้องใช้การ์ด 10Gb ในการถ่ายโอนข้อมูลในเครื่องเดลรุ่นนี้ใช้การ์ด Broadcom NetXtreme II BCM57711 XGb
แน่นอนมันไม่รู้จักโดยดีฟอล ตอนลงก็หาไดร์เวอร์ใส่ใน usb ไดร์ให้มันเห็นซึ่งก็เห็นจริงครับแต่ใช้ไม่ได้ครับ  ไฟไม่ติด  
ตอนลงใส่ ไดร์เวอร์ firmware-bnx2x_0.22_all.deb  ไว้แล้ว

ต้องใช้วิธีคอมไพล์ kernel ( แบบแมนนวล) ครับคือจะใช้ apt-get install linux-kernel xxxxxx ไม่ได้เพราะเคอนอลที่ผ่านการเทสทาง debian มาแล้วเจอมายังเก่าครับ ( ณ ตอนนี้คือ 2.6.26-2 )
ซึ่งยังไม่ใหม่พอ  ต้องไปดาวโหลด kernel มาเมกเองซึ่งใหม่กว่าได้ที่เวป
http://www.kernel.org/pub/linux/kernel/v2.6/
ตอนผมโหลดมาได้ เวอร์ชั่น linux-2.6.32.8  แล้วก็ทำการคอมไพล์มือตามกระทู้
http://www.prasobkarn.com/board/index.php?topic=59.0    ได้เลย

โดยสิ่งที่ต้องเลือกพิเศษคือ 
- device driver > ของnetwork > 10G น่ะให้เลือกเป็นลงไว้เลย
แล้วก็เมกลุยต่อกันเลย

ถ้าไม่มีอะไรผิดพลาด  พอรีบูทมาเครื่องก็จะพบการเน็ทเวิร์ค 10Gb และสเตตัสไฟติด  ping ต่างๆ ได้ตามต้องการ

----------------------
อ๊ะๆๆๆ ยังไม่จบ   
ลืมไปจนได้  เพราะตอนเทสก็เทสกันบนการ์ด external ซึ่ง ไม่มีปัญหาซึ่งพอหลังจาก reboot เข้า kernel ใหม่แล้ว
ทำให้ไดร์เวอร์เก่าที่เคยลงไว้กับ  การ์ด Broadcom NetXtreme II BCM5709 1000Base-T  ไม่มีอีกแล้ว
เลยต้องมาแก้ต่อ  แต่จะลงตัว  firmware-bnx2_0.18_all.deb  มันกลับเจอเออเร่อครับพี่น้อง... - -"

W: Possible missing firmware /lib/firmware/e100/d102e_ucode.bin for module e100
W: Possible missing firmware /lib/firmware/e100/d101s_ucode.bin for module e100
W: Possible missing firmware /lib/firmware/e100/d101m_ucode.bin for module e100

ไม่เจอเฟิร์มแวร์ตัวการ์ด อีกแม่เอ๊ย  

ต้องลง firmware-linux ใหม่อีก
เพิ่ม deb http://ftp.de.debian.org/debian sid main non-free  ลงใน /etc/apt/source.lst  
แล้ว 
 # apt-get update
 # apt-get install firmware-linux-nonfree

แล้ว reboot เครื่อง
ทีนี้แหละ ก็จะเห็นครบทุก interface แล้วทั้ง 100 ทั้ง 1,000 ทั้ง 10,000  วิ่งกันให้หูดับตับไหม้กันไปเลย  แลบลิ้น
กว่าจะได้ใช้เฮ่อ....

แต่นี่ยังดีนะ  os บางตัว คอมไพล์ใหม่ยังใช้การ์ดไม่ได้เลย

เมื่อ yum ไม่เจอ software เวอร์ชั่นใหม่ จะอัพเกรดยังไงล่ะ

อันนี้เจอในกรณี CentOS 5 ซึ่ง yum install ตัว php ไว้ซึ่งไม่ว่าจะอัพเดทแล้ว
# yum update  มันก็เจอล่าสุดเป้น php 5.2 

ซึ่งจริงๆ แล้วใน mirror มันระบุแล้วว่าซัพพอร์ทล่าสุดมาที่ 5.3 แล้วจะอัพยังไงเอย่  ทำดังนี้
โหลด repos จากไซต์อื่นมาใช้เลย


# rpm -ivh http://repo.webtatic.com/yum/centos/5/`uname -i`/webtatic-release-5-0.noarch.rpm

ติดตั้ง php 
# yum --disablerepo=* --enablerepo=webtatic install php

ถ้าเคยติดตั้งไปแล้วก็ใช้การอัพเดท 
# yum --disablerepo=* --enablerepo=webtatic update php

ได้เวอร์ชั่นใหม่แล้ว  ลองเทสดู
# php -v

PHP 5.3.3 (cli) (built: Aug  7 2010 14:49:50) 
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

ปล. อันนี้ยกตัวอย่างจาก php ลองแอพพลายกับโปรแกรมตัวอื่นดู  หากลงจาก yum 

table ใน mysql crashed

หลายท่านเจอเหตุการ์แบบนี้แน่ๆ ไม่ว่าจะเกิดจากไฟดับ หรือเครืองค้าง  กดปิดเครื่องโดยไม่ชัตดาวน์
อันเป็นสาเหตุให้ table crashed ไป
ดูในไฟล์ log  xxxxx.err จะฟ้องประมาณ Table './xxxx/xxxx' is marked as crashed and should be repaired

ซ่อมแซมแบบทั่วไปโดยใช้คำสั่ง

[code] # mysqlcheck -o -u root -pพาสเวิร์ด --all-databases --auto-repair[/code]

- พาสเวิร์ด แทนด้วย พาสเวิร์ดของ root

แต่ก็ใช่ว่าทุกครั้งจะหายได้  บางทีไม่หายอีกต้องทำวิธีต่อไปโดยใช้ myisam แทนในการซอ่มตารางดังต่อไปนี้
ให้ cd เข้าไปยัง part database ตัวที่มีปัญหา
แล้วใช้คำสั่ง
[code] # myisamchk -r ชื่อเทเบิลที่มีปัญหา.MYI[/code]

ดังนี้

[code]# myisamchk -r post_question.MYI
- recovering (with sort) MyISAM-table 'post_question.MYI'
Data records: 199804
- Fixing index 1[/code]

จะทำการจัดเรียง index ใหม่ให้เข้ากับขั้อมูลที่แท้จริง
เท่านี้ก็ก็ผ่านแล้วครับ

install postfix mailserver Debian 6

  หลังจากครั้งก่อนลงเครือง postfix ไว้ยิงเมลออกอย่างเดียวไปแล้ว   ครั้งนี้เบื้องบนมีความต้องการอยากได้
mail server postfix ที่เต็มระบบเพื่อนำมาแทน Qmail server ที่เคยทำไว้ใช้นานแล้วเหมือนกัน  ได้จัดให้  ลองผิดลองถูกหลายวันเลย
เอามาแชร์ไว้

1. ก่อนอื่นเพื่อความแน่นอน ทำการอัพเกรดซอฟแวร์ server ก่อน
[code] # apt-get update
 # apt-get upgrade[/code]

2. install software ที่ต้องใช้ในการติดตั้งครั้งนี้ครับ  บน debian ก็ apt ทีเดียวรวดเลยครับ
รวมถึงพวก apache mysql phpmyadmin จัดเลยทีเดียว
[code]
# apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server dovecot-common dovecot-imapd dovecot-pop3d libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl telnet mailutils php5 php5-ldap php5-mysql phpmyadmin apache2[/code]

- จะขึ้นหน้าต่างให้เราใส่ตั้ง password สำหรับ mysql5
- postfix  จะขึ้นหน้าเลือกออฟชั่นในการลง ให้เลือก internet site
- ตั้งชื่อในการใช้งาน dns ให้เห็นคอนเฟิก postfix ซึ่งมักจะใช้ชื่อเครื่องเรานั้่นเอง  ลองดูจาก uname -a ก็ได้

เสร็จขึ้นตอนนี้  ก็ลองเข้าใช้งาน mysql
[code]# mysql -u root -p[/code]

แล้วสร้าง database ในการ install mailserver เลยครับตั้งชื่อว่า postfix

[code]CREATE DATABASE postfix;[/code]

[code]USE posfix;[/code]

สร้าง user และกำหนดสิทธิ์ user ( แทนค่า admin ด้วย user ที่เราต้องการ, แทน admin_password ด้วย password ที่ต้องการ

[code]GRANT SELECT, INSERT, UPDATE, DELETE ON postfix.* TO 'admin'@'localhost' IDENTIFIED BY 'admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON posfix.* TO 'admin'@'localhost.localdomain' IDENTIFIED BY 'admin_password';
FLUSH PRIVILEGES;[/code]

แล้วสร้างตารางต่างๆไว้รองรับเมล์ postfix
[code]CREATE TABLE domain (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );[/code]
[code]CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );[/code]
[code]CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );[/code]
[code]CREATE TABLE transport ( domain varchar(128) NOT NULL default '', transport varchar(128) NOT NULL default '', UNIQUE KEY domain (domain) );[/code]
[quote]quit[/quote]

ตรวจไฟล์ my.cnf ว่าค่าตรงค่า bind ได้ตัั้งไว้ไหม
# vi /etc/mysql/my.cnf
bind-address = 127.0.0.1

ออกมาแล้ว restar service รอบหนึ่ง
# /etc/init.d/mysql restart

3 Install postfix admin ก่อนเลยครับ  ตรวจสอบเวอร์ชั่นใหม่ๆ ได้ที่นี่ http://postfixadmin.sourceforge.net/
เหตุที่ลงตัวนี้ก่อนเพราะตัวโปรกแกรมนี้ค่อนข้าง fix ชื่อตารางด้านในไว้แล้วครับ  ถ้าเปลียตอนหลังยุ่งยากมากแล้วโอกาสไม่เวิรคสูงครับ  ( เคยปวดหัวมาแล้ว )
หลังจากดาวโหลดมาในตอนแรกแล้วก็นำไปไว้ในพาร์ทของเวปเราเลยครับ

# cd /var/www
# tar -xzf  postfixadmin-2.3.3.tar.gz
# mv  postfixadmin-2.3.3.tar.gz  postfixadmin
# cd  postfixadmin

แก้ configure.inc.php  
$CONF['configured'] = true;
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'admin';
$CONF['database_password'] = 'admin_password';
$CONF['database_name'] = 'postfix';

แล้วเปิดเข้าหน้า postfixadmin
http://ipaddress/postfixadmin/setup.php
โปรแกรมจะตรวจสอบระบบที่ต้องการของเครืองเรา  เมื่อผ่านหมดจะขึ้นให้เราใส่ ระหัสในการติดตั้ง
[img]http://img84.imageshack.us/img84/8908/001rea.jpg[/img]

เมื่อใส่ไปแล้วมันจะเด้งการ gent code ออกมาด้านบนครับ   เราต้องก๊อประหัสนนี้ไปใส่ในไฟล์  configure.inc.php  อีกทีครับ
$CONF['setup_password'] = 'รหัสที่ได้จากการ gen';
[img]http://img9.imageshack.us/img9/6259/002ren.jpg[/img]

เมื่อใส่เสร็จก็ refresh หน้าเวปครั้งหนึ่งก็จะโผล่หน้าให้เรา add  e-mail  admin ที่จะเป็นผู้เข้ามาใช้หน้าจัดการหน้านี้แล้ัวครับ
ใส่ไป admin@yourdomain.com  ใส่ตามที่ระบบคุณใช้ละกันตรับ
[img]http://img29.imageshack.us/img29/2451/003rey.jpg[/img]

เมื่อเสร็จก็ ok แล้วครับ   ลองทดสอบเข้าใช้งานได้ที่
url  http://youraddress.com/postfixadmin/  แล้วใส่  e-mail adminที่เราตั้งไปเมื่อสักครู่นั่นเอง
แต่ระบบข้างในยังใช้งานไม่ได้จริง  เราต้องไปเซ็ตระบบ postfix mail server ให้ลิงค์กับมันเสียก่อนครับ

4. สร้างไฟล์ configure ไว้สำหรับในการเรียกค่าคอนฟิกจาก postfix ให้มาเรียกใช้

# vi /etc/postfix/mysql_virtual_mailbox_domains.cf
[code]hosts = 127.0.0.1
user = admin
password = admin_password
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = 0 and active = 1[/code]

# vi /etc/postfix/mysql_virtual_mailbox_maps.cf
[code]hosts = 127.0.0.1
user = admin
password = admin_password
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
[/code]

# vi /etc/postfix/mysql_virtual_alias_maps.cf
[code]hosts = 127.0.0.1
user = admin
password = admin_pasword
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = 1[/code]

# vi /etc/postfix/mysql_virtual_forwardings.cf
[code]user = root
password = admin_password
dbname = postfix
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1
[/code]

# vi /etc/postfix/mysql_virtual_email2email.cf
[code]user = admin
password = admin_password
dbname = postfix
query = SELECT email FROM users WHERE email='%s'
hosts = 127.0.0.1[/code]


กำหนดค่า permition ไฟล์ทั้งหมด
[code]chmod o= /etc/postfix/mysql_virtual_*.cf
chgrp postfix /etc/postfix/mysql_virtual_*.cf[/code]

กำหนด group
[code]groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m[/code]

ตรวจสอบค่าในไฟล์ /etc/postfix/main.cf  ตามนี้ครับ

[code]smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = /usr/share/doc/postfix

# TLS parameters
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

myhostname = mail.yourdomain.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = mail.yourdomain.com, localhost, localhost.localdomain
relayhost =
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
html_directory = /usr/share/doc/postfix/html
message_size_limit = 30720000
#virtual_alias_domains = mysql:/etc/postfix/mysql_virtual_mailbox_domains.cf
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_forwardings.cf, mysql:/etc/postfix/mysql_virtual_email2email.cf
#virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
#virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_mailbox_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf

#relay_domains = mysql:/etc/postfix/mysql_relay_domains.cf
relay_domains = mysql:/etc/postfix/mysql_relay_domains.cf
virtual_mailbox_base = /home/vmail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
virtual_create_maildirsize = yes
virtual_maildir_extended = yes
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
relay_domains =
mailman_destination_recipient_limit = 1
transport_maps = hash:/etc/postfix/transport

### add after by rukwa ###
mynetworks_style = subnet
smtpd_helo_required = no
strict_rfc821_envelopes = no
smtpd_reject_unlisted_sender = no
smtpd_reject_unlisted_recipient = no[/code]


[color=red]- ค่า mynetworks = ค่าเน็ทเวิร์คที่จะยอมให้วงไหนใช้ mail เครื่องนี้บ้างก็ใส่เพิ่มตรงนี้ไปครับ
- ค่า mydestination = เปลียนจาก yourdomain เป็นโดมนของคุณใช้อยู่[/color]


5.สร้าง SSL Certificate ให้ postfix
[code]# cd /etc/postfix
# openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509[/code]

แล้วใส่ค่าตามที่ระบบเราเป็น
Country Name (2 letter code) [AU]:TH
State or Province Name (full name) [Some-State]:Bangkok
Locality Name (eg, city) []:Klongteoy
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany, LLC
Organizational Unit Name (eg, section) []:Email Services
Common Name (eg, YOUR name) []:server.yourdomain.com
Email Address []:support@yourdomain.com

เซ็ต permittion ให้ smtp
[code]# chmod o= /etc/postfix/smtpd.key[/code]

6. ตั้งค่า saslauthd ให้ mysql
[code]# mkdir -p /var/spool/postfix/var/run/saslauthd[/code]
ก๊อปไฟล์เก่าเก็บแบคอัพไว้ก่อน
# cp -a /etc/default/saslauthd /etc/default/saslauthd.bak

แก้ไฟล์ /etc/default/saslauthd  ให้มีค่าดังนี้
[code]START=yes
DESC="SASL Authentication Daemon"
NAME="saslauthd"
MECHANISMS="rimap"
MECH_OPTIONS=""
THREADS=5
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"[/code]

สร้างไฟล์ /etc/pam.d/smtp แล้วใส่ค่าดังนี้ไป  แก้ admin และ password เป็นค่าที่คุณระบุไว้ในไฟล์คอนเฟิก
# vi  /etc/pam.d/smtp
[code]auth    required   pam_mysql.so user=admin passwd=admin_password host=127.0.0.1 db=postfix table=users usercolumn=email passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=admin passwd=admin_password host=127.0.0.1 db=posfix table=users usercolumn=email passwdcolumn=password crypt=1[/code]

สร้างไฟล์ /etc/postfix/sasl/smtpd.conf  แล้วใส่ค่าดังนี้
# vi /etc/postfix/sasl/smtpd.conf
[code]pwcheck_method: saslauthd
mech_list: plain login
auxprop_plugin: rimap[/code]

add  user sasl แล้วทำการรีสตาร์เซอซ์วิสเพื่อเริ่มค่าคอนฟิกใหม่
[code]# adduser postfix sasl
# service postfix restart
# service saslauthd restart[/code]

7. Configure Dovecot
แก้ไขไฟล์ /etc/postfix/master.cf  เพิ่มเติมในส่วนค่า dovecot ไว้ที่ด้านล่างสุดดังนี้
[code]dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}[/code]

แก้ไขไฟล์  โดย coppy เก็บไฟล์ต้นฉบับไว้ก่อนกันพลาด
# cp -a /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.bak
# vi /etc/dovecot/dovecot.conf   ใส่ค่าดังนี้

[code]disable_plaintext_auth=no
protocols = imap imaps pop3 pop3s
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/home/vmail/%d/%n/Maildir

ssl_cert_file = /etc/ssl/certs/dovecot.pem
ssl_key_file = /etc/ssl/private/dovecot.pem

namespace private {
    separator = .
    prefix = INBOX.
    inbox = yes
}

protocol lda {
    log_path = /home/vmail/dovecot-deliver.log
    auth_socket_path = /var/run/dovecot/auth-master
    postmaster_address = postmaster@yourdomain.com
    mail_plugins = sieve
    global_script_path = /home/vmail/globalsieverc
}

protocol pop3 {
    pop3_uidl_format = %08Xu%08Xv
}

auth default {
    user = root

    userdb sql {
        args = /etc/dovecot/dovecot-mysql.conf
    }
    passdb sql {
        args = /etc/dovecot/dovecot-mysql.conf
    }

    socket listen {
        master {
            path = /var/run/dovecot/auth-master
            mode = 0600
            user = vmail
        }

        client {
            path = /var/spool/postfix/private/auth
            mode = 0660
            user = postfix
            group = postfix
        }
    }
}
[/code]

แก้ไขไฟล์ /etc/dovecot/dovecot-sql.conf   ( เปลียน user - password ตามระบบที่คุณใช้ )
# vi /etc/dovecot/dovecot-sql.conf
[code]driver = mysql
connect = host=127.0.0.1 dbname=postfix user=admin password=admin_password
default_pass_scheme = CRYPT
password_query = SELECT email as user, password FROM users WHERE email='%u';[/code]

แก้ permittion ไฟล์
[code]# chgrp vmail /etc/dovecot/dovecot.conf[/code]
[code]# chmod g+r /etc/dovecot/dovecot.conf[/code]

restart service
# /etc/init.d/dovecot restart

เช็คดู /var/log/mail.log  ถ้าขึ้นตามนี้แสดงว่า  work แล้ว
[code]Jul 29 14:45:01 mail postfix/pipe[31225]: 85CB33C010: to=<postmaster@yourdomain.com>, orig_to=<root>, relay=dovecot, delay=0.01, delays=0/0/0/0.01, dsn=2.0.0, status=sent (delivered via dovecot service)
Jul 29 14:45:01 mail postfix/qmgr[31125]: 85CB33C010: removed[/code]

8. Configure Mail Aliases
แก้ไขไฟล์ /etc/aliases ให้เป็นดังนี้
[code]postmaster:    root
root:   postmaster@gmmdigital.com[/code]

แล้วรันคำสั่งเพื่อรับค่าใหม่ แล้วรี service อีกรอบ
[code]# newaliases[/code]
[code]# service postfix restart[/code]


ลองเช็คค่า configure ใช้คำสั่ง
# postconf -n    จะแสดงค่าที่ระบบใช้อยู่ครับ

[code]alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
broken_sasl_auth_clients = yes
config_directory = /etc/postfix
html_directory = /usr/share/doc/postfix/html
inet_interfaces = all
mailbox_size_limit = 0
message_size_limit = 30720000
mydestination = mail.yourdomain.com, localhost, localhost.localdomain
myhostname = mail.yourdomain.com
mynetworks = 127.0.0.0/8
mynetworks_style = subnet
myorigin = /etc/mailname
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps
readme_directory = /usr/share/doc/postfix
recipient_delimiter = +
relay_domains =
relayhost =
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_helo_required = no
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_reject_unlisted_recipient = no
smtpd_reject_unlisted_sender = no
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
strict_rfc821_envelopes = no
transport_maps = hash:/etc/postfix/transport
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_gid_maps = static:5000
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_mailbox_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_transport = dovecot
virtual_uid_maps = static:5000[/code]


8 . ทดสอบการใช้งาน
# telnet localhost 25
[quote]Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 mail.gmmdigital.com ESMTP Postfix (Debian/GNU)
ehlo localhost
250-mail.yourdomain.com
250-PIPELINING
250-SIZE 30720000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN[/quote]
ok smtp ทำงานโอเค

[quote]
# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
+OK Dovecot ready.[/quote]
ok  pop3 ทำงานแล้ว

ต่อไปทดสอบการ add domainและ user  ผ่านหน้า postfixadmin login เข้าไปแล้วสร้าง Domain สักชื่อแล้ว add mailbox ไว้
[img]http://img263.imageshack.us/img263/1346/004rel.jpg[/img]
( ในรูปภาพสร้างโดเมน test.com )

แล้วเข้าไปดูในพาร์ท server  ที่ /home/vmail/   จะต้องมีโดเมน test.com แล้วสร้างให้เรา auto แล้วภายในนั้นมี  folder แยกตามแต่ละคนเลยดังนี้
root@mail:/home/vmail/test.com# ls -al
total 12
drwx------ 14 vmail vmail   96 Jul 29 14:35 .
drwxr-xr-x 13 vmail vmail 4096 Jul 29 10:23 ..
drwx------  3 vmail vmail    8 Jul 29 00:07 00001
drwx------  3 vmail vmail    8 Jul 28 19:07 add18
drwx------  3 vmail vmail    8 Jul 29 00:08 cong
drwx------  3 vmail vmail    8 Jul 28 19:07 gogo
drwx------  3 vmail vmail    8 Jul 29 01:00 jatujak
drwx------  3 vmail vmail    8 Jul 28 18:02 ken
drwx------  3 vmail vmail    8 Jul 28 18:30 mygod
drwx------  3 vmail vmail    8 Jul 29 14:35 ohho
drwx------  3 vmail vmail    8 Jul 28 17:26 pramote
drwx------  3 vmail vmail    8 Jul 28 17:29 rukawa
drwx------  3 vmail vmail    8 Jul 29 00:07 who
drwx------  3 vmail vmail    8 Jul 28 17:39 work

ทีนี้เราลองเปิด outlook ขึ้นมาแล้ว  set account มาสักชื่อหนึ่งแล้วชี้ smpt และ pop3 มายัง server ที่เราเทสเลยครับ
จะต้อง login ได้และไดัรับ e-mail ต้อนรับ ครับถ้าไม่ได้   แสดงว่ามีข้อผิดพลาดให้
เช็คที่
/var/log/mail.log  ครับว่าขึ้นอะไร  
กรณีที่ login หน้า outlook ไม่ได้  ให้ไปดูไฟล์ /etc/dovecot/dovecot.conf เลยครับ  ว่าผิดตรงไหน

แล้วค่อยเทสให้ระบบส่งเมล์ไปหา  user นั้นด้วยเลย  ด้วยคำสั่ง
# mailx  user1@test.com    <enter>
cc:   ใส่ หรือ <enter> ผ่าน
Subject:   yoursubject
< ข้อความที่จะส่ง >  แล้ว <enter>
Ctrl + D เพื่อส่งจดหมาย

แล้วไปเช็ค  log และจดหมายในไฟล์เดอร์ของ user นั้นๆ ครับว่ามีมาป่าว  ถ้ามาแล้วก็ย้อนไปเทสผ่านหน้าจัดการ postfixadmin
และเซ็๖ accout บน outlook ตามด้านบนอีกที  ถ้าผ่านหมดก็เรียบร้อยแล้วครับ   ระบบ mail server postfix โอ้ว  ยาวเฟื้อย  :P


แหล่งอ้างอิง: http://library.linode.com/email/postfix/dovecot-mysql-debian-6-squeeze