Титла: postfix + mysql Публикувано от: Vik в Feb 10, 2006, 22:25 Здравейте на всички,
Започнах да се занимавам с инсталирането на мейл сървър. Но ми е за първи път. Реших да почна направо с postfix. Но ми е необходимо да поддържа няколко домейна. Но нещо не мога да се оправя. Самия сървър с един реален домейн работи - праща и приема. Но имам проблеми с интеграцията му с mysql. Следвах подробно тази статия http://postfixwiki.org/index.p....L_Setup Компилирах самия постфикс с подръжка на mysql и мисля че стана - поне като съдя какво ми излизаше на козолата при компилацията преди и след това. Създал съм си необходимите таблици в базата, както и потребителя на postfix - postfix. mysql -u postfix -p ...... си влиза в базата но като стартирам демона: Feb 10 22:18:03 mailer postfix/master[994]: daemon started -- version 2.2.8, configuration /etc/postfix Feb 10 22:18:04 mailer postfix/pickup[995]: 17C1E153FC: uid=0 from=<root> Feb 10 22:18:04 mailer postfix/cleanup[997]: 17C1E153FC: message-id=<20060210201804.17C1E153FC@edi_kakvo_si> Feb 10 22:18:04 mailer postfix/cleanup[997]: warning: connect to mysql server 127.0.0.1: Can't connect to MySQL server on '127.0.0.1' (111) Feb 10 22:18:04 mailer postfix/cleanup[997]: warning: 17C1E153FC: virtual_alias_maps map lookup problem for root@ffffffff Feb 10 22:18:04 mailer postfix/pickup[995]: warning: maildrop/C1AD8153E4: Error writing message file Feb 10 22:18:04 mailer postfix/pickup[995]: 3B0FA153FC: uid=0 from=<root> Нещо яко бъркам... последните редове от main.cf virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_gid_maps = static:12345 virtual_mailbox_base = /usr/local/virtual virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_limit = 51200000 virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_minimum_uid = 12345 virtual_transport = virtual virtual_uid_maps = static:12345 Тези файлове също са създадени по инструкциите. На няколко места в гуугл намерих че се заменя localhost с 127.0.0.1, но и това не помага. Всякаква помощ би ми била полезна Става дума за slackware - 10.2; 2.4.32, mysql mysql-4.1.14-i486-1 postfix-2.2.8 Титла: postfix + mysql Публикувано от: vlad73 в Feb 11, 2006, 14:08 Може би иде реч за грешки и в другите .cf файлове. Та ако искаш дай тяхното съдържание. Все пак погледни mysql-a преди това (и аз си патих с MySQL-а и неговото виждане за localhost). Всъщност под localhost за MySQL се разбира връзка през сокет, а при 127.0.0.1 - връзко по tcp, порт 3306. Та ако си създал юзера, дето ще се връзва да има права от localhost, а не от 127.0.0.1 това може да ти е проблем, все пак погледни и с netstat дали mysql-a слуша на 127.0.0.1:3306
успех! П.С.: Изглежда ми, че ти работи mysql поддръжката в postfixa, като не бях я активирал, имах доста екзотични съобщения за непознати протоколи или методи из логовете си. Титла: postfix + mysql Публикувано от: Vik в Feb 11, 2006, 14:59 netstat -a
Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 4 [ ] DGRAM 60 /dev/log unix 2 [ ACC ] STREAM LISTENING 215 /dev/gpmctl unix 2 [ ACC ] STREAM LISTENING 535 /var/run/mysql/mysql.sock unix 2 [ ] DGRAM 166 unix 2 [ ] DGRAM 63 cat /etc/postfix/master.cf # # Postfix master process configuration file. For details on the format # of the file, see the Postfix master(5) manual page. # # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - n - - smtpd #submission inet n - n - - smtpd # -o smtpd_etrn_restrictions=reject # -o smtpd_client_restrictions=permit_sasl_authenticated,reject #smtps inet n - n - - smtpd # -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes #submission inet n - n - - smtpd # -o smtpd_etrn_restrictions=reject # -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes #628 inet n - n - - qmqpd pickup fifo n - n 60 1 pickup cleanup unix n - n - 0 cleanup qmgr fifo n - n 300 1 qmgr #qmgr fifo n - n 300 1 oqmgr tlsmgr unix - - n 1000? 1 tlsmgr rewrite unix - - n - - trivial-rewrite bounce unix - - n - 0 bounce defer unix - - n - 0 bounce trace unix - - n - 0 bounce verify unix - - n - 1 verify flush unix n - n 1000? 0 flush proxymap unix - - n - - proxymap smtp unix - - n - - smtp # When relaying mail as backup MX, disable fallback_relay to avoid MX loops relay unix - - n - - smtp -o fallback_relay= # -o smtp_helo_timeout=5 -o smtp_connect_timeout=5 showq unix n - n - - showq error unix - - n - - error discard unix - - n - - discard local unix - n n - - local virtual unix - n n - - virtual lmtp unix - - n - - lmtp anvil unix - - n - 1 anvil scache unix - - n - 1 scache # # ==================================================================== # Interfaces to non-Postfix software. Be sure to examine the manual # pages of the non-Postfix software to find out what options it wants. # # Many of the following services use the Postfix pipe(8) delivery # agent. See the pipe(8) man page for information about ${recipient} # and other message envelope options. # ==================================================================== # # maildrop. See the Postfix MAILDROP_README file for details. # Also specify in main.cf: maildrop_destination_recipient_limit=1 # maildrop unix - n n - - pipe flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient} # # The Cyrus deliver program has changed incompatibly, multiple times. # old-cyrus unix - n n - - pipe flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user} # Cyrus 2.1.5 (Amos Gouaux) # Also specify in main.cf: cyrus_destination_recipient_limit=1 cyrus unix - n n - - pipe user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user} # # See the Postfix UUCP_README file for configuration details. # uucp unix - n n - - pipe flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient) # # Other external delivery methods. # ifmail unix - n n - - pipe flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient) bsmtp unix - n n - - pipe flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient Това беше съдържанието на master.cf Грешките които дава заради това че не поддържа mysql бяха други, мисля че се справих с този проблем като четох из гуъгл. Как мога оправя проблема с mysql? mysql -h localhost -u postfix -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 to server version: 4.1.14 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> exit Това така работи. Не съм променял нищо по настройките на постфикс освен най-необходимите неща - спрямо статията на Н. Антoнов. Това е съдържанието на /etc/my.cnf [client] #password = your_password port = 3306 socket = /var/run/mysql/mysql.sock # Here follows entries for some specific programs # The MySQL server [mysqld] port = 3306 socket = /var/run/mysql/mysql.sock skip-locking key_buffer = 16K max_allowed_packet = 1M table_cache = 4 sort_buffer_size = 64K read_buffer_size = 256K read_rnd_buffer_size = 256K net_buffer_length = 2K thread_stack = 64K # Don't listen on a TCP/IP port at all. This can be a security enhancement, # if all processes that need to connect to mysqld run on the same host. # All interaction with mysqld must be made via Unix sockets or named pipes. # Note that using this option without enabling named pipes on Windows # (using the "enable-named-pipe" option) will render mysqld useless! # #skip-networking server-id = 1 # Uncomment the following if you want to log updates #log-bin # Uncomment the following if you are NOT using BDB tables #skip-bdb [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash # Remove the next comment character if you are not familiar with SQL #safe-updates [isamchk] key_buffer = 8M sort_buffer_size = 8M [myisamchk] key_buffer = 8M sort_buffer_size = 8M [mysqlhotcopy] interactive-timeout Титла: postfix + mysql Публикувано от: vlad73 в Feb 11, 2006, 16:39 Дай да видим /etc/postfix/mysql_virtual_alias_maps.cf примерно.
Аз съм пуснал връзката по tcp, честно казано нямам идея как да опиша сокета в .cf файл на postfix-a. Всъщност сигурен ли си, че postfix-a ползва сокет? С mysql -h 127.0.0.1 -u postfix -p дали отново влизаш? А някакви простички операции с базата работят ли от името на този user? use <mail-db_name>; select * from <ime-na-njakoja-tablica>; Титла: postfix + mysql Публикувано от: Vik в Feb 11, 2006, 17:14 root@mailer:~# mysql -h 127.0.0.1 -u postfix -p
Enter password: ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111) Да всички операции работят в самия mysql cat /etc/postfix/mysql_virtual_alias_maps.cf user = postfix password = edi_kvo_si hosts = 127.0.0.1 dbname = postfix query = SELECT goto FROM alias WHERE address='%s' AND active = 1 когато адреса е localhost пак не става май нещо трябва да променя по настройките на mysql... Титла: postfix + mysql Публикувано от: n_antonov в Feb 11, 2006, 17:40 Както сам виждаш надявам се, проблемът е в твоя mysql.
Титла: postfix + mysql Публикувано от: Vik в Feb 11, 2006, 19:00 Да благодаря, оправих се. Имах тази опция която разрешава ползването на mysql само по sockets. Страното беше че тя беше набутана в стартиращият скрип на slack -a.
Сега обаче имам проблем с postfixadmin [Sat Feb 11 19:56:02 2006] [error] PHP Warning: mysql_real_escape_string(): Can't connect to local MySQL server through socket '/var/run/mysql/mysql.sock' (13) in /web/functions.inc.php on line 131 [Sat Feb 11 19:56:02 2006] [error] PHP Warning: mysql_real_escape_string(): A link to the server could not be established in /web/functions.inc.php on line 131 Нали тези данни за postfixadmin -а се записват само в config.inc.conf. Поне според документацията на postfixadmin това е така (струва ми се че е много оскъдна) Това са редовете от config.inc.php: $CONF['database_type'] = 'mysql'; $CONF['database_host'] = '127.0.0.1'; $CONF['database_user'] = 'postfix'; $CONF['database_password'] = 'edi_kakvo_si'; $CONF['database_name'] = 'postfix'; $CONF['database_prefix'] = ''; Става дума за postfixadmin-2.1.0 Инсталирал съм всичко спрямо правилата. Имам и един дръг въпрос. Този админ може ли да се ползва като уеб поща(нещо като squirrel mail)? Титла: postfix + mysql Публикувано от: vlad73 в Feb 11, 2006, 20:08
Аз не бих казал, че са много работещи тези операции. Доколкото ти огледах conf-a на mysql-a, мисля, че той слуша за мрежови заявки (все пак го провери това, че не съм много навътре с mysql-a), предполагам остава юзера да получи право да се логва... ще трябва да поразпиташ google, успех и да споделиш резултата. Титла: postfix + mysql Публикувано от: Vik в Feb 12, 2006, 10:52 Извинявай, но явно съм редактирал горното си съобщ. след като ти си написал твоето. Ще може ли да погледнеш
Титла: postfix + mysql Публикувано от: vlad73 в Feb 12, 2006, 21:24 Не ползвам postfixadmin, но все пак като webmail съм убеден че няма да работи, използвай squirrelmail-a, инсталира се просто с копиране и се настройва с малко ръчкане с един perl-скрипт, дето сичко си пита (на мен ми отне 10 мин първия път).
Колкото до проблема apache-php-mysql - там съм доста бос и едва ли мога да съм полезен. От това, което си написал ми се струва, че пак имаш проблем с local socket/tcp:
Най-безболезнено ми се види ако вземеш пак да подкараш нещата (с този юзер) да работят през сокет... естествено без да затриваш постигнатото за 127.0.0.1 Разбира се може и да греша - пак повтарям бос съм по темата. Успех! Титла: postfix + mysql Публикувано от: Vik в Feb 13, 2006, 17:27 Здравейте на всички отново,
Аз някак си се орпавих сам но исках днес да напиша как се справих за да може ако някой занапраед се сблъска с това да може да прочете някаде и на БГ. Поравих се из страницата на постфиксадмин и това намерих в форума им: if ($CONF['database_type'] == "mysql") $escaped_string = mysql_real_escape_string ($string); if ($CONF['database_type'] == "mysql") { if ( ! @mysql_thread_id() ) db_connect(); $escaped_string = mysql_real_escape_string ($string); } if ($CONF['database_type'] == "mysqli") $escaped_string = mysqli_real_escape_string ($string); if ($CONF['database_type'] == "pgsql") $escaped_string = pg_escape_string ($string); трябва да се добавят няколко реда във файла functions.inc.php Успех на всички. Всичко до тук работи много добре. Искам да попитам - какво бихте казали че е най-подходящо за WEB MAIL? |