转移邮件服务器:postfix

原邮件服务器硬盘损害,已经无法工作,需要转移到新服务器上。
原来的服务器是debian etch,新服务器是ubuntu feisty。

首先安装:
sudo aptitude install postfix postfix-mysql courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl postfix-tls libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin openssl libpam-mysql amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 unzoo libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop pax razor pyzor dcc-client

首先创建mysql数据库,因为原来已经创建,直接导入就可以了。
把原来的mysql-virtual*文件拷贝到/etc/postfix/目录下,注意若mysql用户密码发生变化,要进行相应的修改。
然后修改文件权限:

chmod o= /etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cf

创建vmail用户:

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m

对/etc/postfix/main.cf进行修改定制:

postconf -e ‘myhostname = server1.example.com’
postconf -e ‘mydestination = server1.example.com, localhost, localhost.localdomain’
postconf -e ‘mynetworks = 127.0.0.0/8’
postconf -e ‘virtual_alias_domains =’
postconf -e ‘ virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf’
postconf -e ‘virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf’
postconf -e ‘virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf’
postconf -e ‘virtual_mailbox_base = /home/vmail’
postconf -e ‘virtual_uid_maps = static:5000’
postconf -e ‘virtual_gid_maps = static:5000’
postconf -e ‘smtpd_sasl_auth_enable = yes’
postconf -e ‘broken_sasl_auth_clients = yes’
postconf -e ‘smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination’
postconf -e ‘transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf’
postconf -e ‘content_filter = amavis:[127.0.0.1]:10024’
postconf -e ‘receive_override_options = no_address_mappings’

这部分需要具体检查,我把myorigin这个给注释掉了,对于多域名的邮件列表有影响。

saslauthd相关设置,和DEBIAN不大一样,和UBUNTU EDGY也不尽相同:

sudo rm -fdr /var/spool/postfix/var/run/saslauthd
sudo mv /var/run/saslauthd /var/spool/postfix/var/run/saslauthd
sudo ln -s /var/spool/postfix/var/run/saslauthd /var/run/saslauthd
sudo adduser postfix sasl

修改/etc/default/saslauthd文件,把START修改为yes。
修改/etc/pam.d/smtp文件:

auth required pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1

account sufficient pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1

对应的用户名密码数据库要进行替换。

修改/etc/courier/authdaemonrc文件,把authmodulelist的值变为”authmysql”。

修改/etc/init.d/postfix文件,在FILES部分:

FILES=”etc/localtime etc/services etc/resolv.conf etc/hosts \
etc/nsswitch.conf etc/nss_mdns.config etc/postfix/sasl/smtpd.conf etc/sasldb2″

这个原来是有sasldb2文件的,但是在ubuntu feisty下没有这个文件,但执行起来没有问题,比较奇怪。

修改/etc/courier/authmysqlrc文件:

MYSQL_SERVER localhost

MYSQL_USERNAME mail_admin

MYSQL_PASSWORD mail_admin_password

MYSQL_PORT 0

MYSQL_DATABASE mail

MYSQL_USER_TABLE users

MYSQL_CRYPT_PWFIELD password

#MYSQL_CLEAR_PWFIELD password

MYSQL_UID_FIELD 5000

MYSQL_GID_FIELD 5000

MYSQL_LOGIN_FIELD email

MYSQL_HOME_FIELD “/home/vmail”

MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,’@’,-1),’/’,SUBSTRING_INDEX(email,’@’,1),’/’)

重新启动服务:

/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-pop restart
/etc/init.d/courier-pop-ssl restart
/etc/init.d/postfix restart
/etc/init.d/saslauthd restart

修改/etc/aliases文件,可以根据自己的需要进行修改。

修改vi /etc/amavis/conf.d/15-content_filter_mode文件,去掉几个注释:

use strict;

# You can modify this file to re-enable SPAM checking through spamassassin

# and to re-enable antivirus checking.

#

# Default antivirus checking mode

# Uncomment the two lines below to enable it back

#

@bypass_virus_checks_maps = (

\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

#

# Default SPAM checking mode

# Uncomment the two lines below to enable it back

#

@bypass_spam_checks_maps = (

\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

1; # insure a defined return

修改 /etc/amavis/conf.d/50-user文件,添加:

$pax=’pax’;

修改/etc/postfix/master.cf文件,添加:

[…]

amavis unix – – – – 2 smtp

-o smtp_data_done_timeout=1200

-o smtp_send_xforward_command=yes

127.0.0.1:10025 inet 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 receive_override_options=no_unknown_recipient_checks,no_header_body_checks

-o smtpd_bind_address=127.0.0.1

修改/etc/spamassassin/local.cf,添加:

[…]

# dcc

use_dcc 1

dcc_path /usr/bin/dccproc

dcc_add_header 1

dcc_dccifd_path /usr/sbin/dccifd

#pyzor

use_pyzor 1

pyzor_path /usr/bin/pyzor

pyzor_add_header 1

#razor

use_razor2 1

razor_config /etc/razor/razor-agent.conf

#bayes

use_bayes 1

use_bayes_rules 1

bayes_auto_learn 1

启动服务:

adduser clamav amavis
/etc/init.d/amavis restart
/etc/init.d/clamav-daemon restart
/etc/init.d/clamav-freshclam restart
/etc/init.d/postfix restart

参考:
http://www.howtoforge.com/virtual_postfix_mysql_quota_courier_ubuntu_edgy
http://wlx.westgis.ac.cn/322/

spamassassin的antidrug.cf

收到我的debian服务器发出的邮件:

/etc/cron.daily/amavisd-new:
String found where operator expected at (eval 909) line 1, near “”you” “are””
(Missing operator before “are”?)
String found where operator expected at (eval 909) line 1, near “”are” “running””
(Missing operator before “running”?)
String found where operator expected at (eval 909) line 1, near “”running” “SA””
(Missing operator before “SA”?)
Number found where operator expected at (eval 909) line 1, near “”SA” 3.0.0″
(Missing operator before 3.0.0?)
String found where operator expected at (eval 909) line 1, near “3.0.0 “or””
(Missing operator before “or”?)
String found where operator expected at (eval 909) line 1, near “”or” “higher””
(Missing operator before “higher”?)
String found where operator expected at (eval 909) line 1, near “”higher” “you””
(Missing operator before “you”?)
String found where operator expected at (eval 909) line 1, near “”you” “already””
(Missing operator before “already”?)
String found where operator expected at (eval 909) line 1, near “”already” “have””
(Missing operator before “have”?)
String found where operator expected at (eval 909) line 1, near “”have” “antidrug””
(Missing operator before “antidrug”?)
String found where operator expected at (eval 909) line 1, near “”antidrug” “and””
(Missing operator before “and”?)
String found where operator expected at (eval 909) line 1, near “”and” “this””
(Missing operator before “this”?)
String found where operator expected at (eval 909) line 1, near “”this” “file””
(Missing operator before “file”?)
config: unclosed ‘if’ in /etc/spamassassin/antidrug.cf: if you are running SA 3.0.0 or higher, you already have antidrug and this file

然后再去浏览/etc/spamassassin/antidrug.cf,发现已经在SA3.0以上版本中已经不需要这个文件了。
于是删除之,并把crontab中对应的项进行处理。

mailman中使用postfix建立多域

mailman: 2.1.9
debian etch
服务器上很早就搭建了postfix和mailman服务,但后来又产生新要求,要求mailman中再添加一个域名。原来做过多次尝试,一直未果。

今天把服务器升级为etch,顺便把x和gnome都干掉了。然后想看看这个问题能不能解决,就又试验起来了。

http://www.python.org/cgi-bin/faqw-mm.py?query=virtual+domain&querytype=simple&casefold=yes&req=search
开始都是以为要查询virtual domain,进入了误区,结果一直无解。

官方文档:http://www.gnu.org/software/mailman/mailman-install/node13.html
看了上面的文档后,又实验了多种配置,还是有问题,发到新邮件列表的信一直自动转发到老邮件列表上,导致查无此人。

Reporting-MTA: dns; debian.westgis.ac.cn
Received-From-MTA: smtp; debian.westgis.ac.cn ([127.0.0.1])
Arrival-Date: Sat, 30 Dec 2006 12:09:02 +0800 (CST)
Original-Recipient: rfc822;westdc@lists.westgis.ac.cn
Final-Recipient: rfc822;westdc@list.cngis.org
Action: failed
Status: 5.1.1
Remote-MTA: dns; 127.0.0.1
Diagnostic-Code: smtp; 550 5.1.1 : Recipient address rejected: User unknown in virtual mailbox table
Last-Attempt-Date: Sat, 30 Dec 2006 12:09:12 +0800 (CST)

修改mm_cfg.py里的相关参数,都试验了一遍,错误信息依旧。然后查看到syslog里的出错信息,也是邮件地址的后缀自动变换了,非常奇怪。
于是检查postfix的main.cf设置,看到:

myorigin = list.cngis.org

想到了是否和这个配置有关系,于是首先修改为另外一个地址,然后再次试验,错误依旧,但错误信息发生了变化!
于是把这个配置注释掉,万事大吉!
想想好像这个地方原来是专门为配置mailman而加上的,没想到错误会出现在这里。当时好像是参照网上的教程直接搬下来的,还是官方的文档可靠阿。

这个问题已经都快半年没有解决了,今天终于解决了,爽阿。
此办法的缺点:各域名之间不能创建同名的邮件列表,即不能同时创建a@dom1.org和a@dom2.org。这个问题在mailman 2.2的版本中得到了解决。

构建DEBIAN软件包

一直没有系统地看过,这个讲的很详细:
http://debian.linuxsir.org/doc/inthedebianway/debian_build_package.html

1. 声明

* 版本信息:

本文档的最新版本将张贴于: LinuxSir.Org论坛 Debian 发行版讨论区 ;

也可以从 http://debian.linuxsir.org/ 获取.
* 反馈:

所有评论, 错误报告, 其他信息以及批评, 请邮寄到 etony@tom.com ;

或在LinuxSir.Org论坛 Debian发行版讨论区 张贴.
* 版权信息:

本文档的版权(c)2006-2007 归 etony C.F.AN 所有.

转载请注明源自 http://debian.linuxsir.org/ . Continue reading "构建DEBIAN软件包"

在debian/ubuntu中查询软件包的依赖关系

如何在debian/ubuntu中查询某软件的依赖关系?或者该软件的反向依赖关系?

我一直以来都是在GUI界面synaptic下查询这些问题的,没想到用命令很简单就能得到结果。

1 查询依赖关系:

wlx@cngis:~$ apt-cache depends proj
proj
依赖: libc6
建议: proj-ps-doc

2 查询反向依赖关系:

wlx@cngis:~$ apt-cache rdepends proj
proj
Reverse Depends:
qgis
xastir
thuban
qgis
python-mapscript
proj-ps-doc
postgresql-8.1-postgis
php5-mapscript
php4-mapscript
perl-mapscript
mapserver-bin
libqgis0-dev
libgrass
libgdal1-1.3.1
grass
gpx2shp
cgi-mapserver

简单吧,这样我就应该知道proj是轻易不能动的,是个基础包阿。

bibus的安装

看到别人使用bibus与openoffice制作的论文模板,感觉很好用。
原来一直想找一个linux下的文献管理软件,但试验了很多,感觉都不好用,或者不太适合。
又:听说openoffice 3将会集成文献管理功能,或许到时会好的多。

首先,可以直接把bibus的repository挂上:

sudo nano /etc/apt/source.list
#add repos
deb http://switch.dl.sourceforge.net/sourceforge/bibus-biblio ./
sudo aptitude update
sudo aptitude install python-sqlite2 bibus bibus-doc-en

其网站声明支持debian testing(估计指debian sarge)和ubuntu breezy,我在ubuntu edgy下也能使用。
但是其版本好像稍微落后,而且我看官方中有提供中文支持,但是安装后没有中文locale显示,但在文献中使用中文没有问题。
因此,就直接从CVS中取出了最新版本,打算在本地编译deb包,来看看有没有什么变化。
编译完成后,发现仍然无法显示中文locale。
浏览代码后,发现是其提供的locale有问题。
删除了locale/cn目录,修改locale/zh_cn为locale/zh_CN。(因为在ubuntu edgy下,中文默认locale是zh_CN)。
然后有重新编译了po文件:

msgfmt bibus.po -o bibus.mo

当然,其中翻译不满意的,可以运行poedit再来修改,呵呵。
最终就可以打包了:

dch -i
dpkg-buildpackage -rfakeroot

水木的MetalslugX还作了一个CNKI的插件,但我使用后发现好像不支持现在的CNKI了,或许,近期CNKI改版过?还有一个中文”…等”的插件,这个我没使用。

debian testing上安装oracle 10g

安装10g express一直有问题,决定安装oracle 10g版本。
这个安装要比xe版复杂得多。

一、安装前的准备

1.硬件要求

Oracle建议内存为512MB或以上,至少1G交换分区,并且需要400MB的临时目录空间。
使用以下的命令查看你的内存和交换分区大小:

# grep MemTotal /proc/meminfo
# grep SwapTotal /proc/meminfo

你可以使用以下方法添加临时交换分区:

su – root
dd if=/dev/zero of=tmpswap bs=1k count=900000
chmod 600 tmpswap
mkswap tmpswap
swapon tmpswap

可以通过以下命令查看临时空间大小:

#df /tmp

可以自己新建临时目录,安装完后再删除

#su – root
#mkdir /opt/tmp
#chown root.root /opt/tmp/
# chmod 1777 /opt/tmp
# echo TEMP
# export TEMP=/opt/tmp
# export TEMPDIR=/opt/tmp

对硬盘空间大小的限制,建议预留3G空间。

2.系统参数调整

修改/etc/sysctl.conf,添加

#我的机器只有1G内存
kernel.shmmax = 1073741824
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000

执行
#/sbin/sysctl -p

设置shell限制,在/etc/security/limits.conf添加
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

修改login设置,修改 /etc/pam.d/login,添加
session required /lib/security/pam_limits.so

在/etc/profile中添加以下语句:

if [ $USER = “oracle” ]; then
if [ $SHELL = “/bin/ksh” ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi

3、安装设置

确保你已经安装了下列软件

sudo apt-get install gcc make binutils lesstif2 libc6 libc6-dev rpm libmotif3 libaio1 libstdc++5 gawk
确保你的系统中有以下组和用户,方法:

#grep dba /etc/group
#grep oinstall /etc/group
#grep nobody /etc/group

#id oracle
#id nobody

切换到root,添加oralce帐户

#su – root
#groupadd dba # group of users to be granted SYSDBA system privilege
#groupadd oinstall # group owner of Oracle files
#useradd -c “Oracle software owner” -g oinstall -G dba -d /opt/oracle oracle
#passwd oracle
输入oracle密码

debian中需要额外的添加nobody用户组:
#groupadd nobody
系统nogroup组中已经有nobody用户,把nobody用户添加到新建的nobody组中,
#usermod -G nobody nobody

建立oracle目录
#su root
#mkdir /opt/oracle
#chown -R oralce.oinstall /opt/oracle
mkdir -p /u01/app
chown -R oracle.oinstall /u01/app
debian需要额外的做以下操作:
# ln -s /usr/bin/awk /bin/awk
# ln -s /usr/bin/rpm /bin/rpm
# ln -s /usr/bin/basename /bin/basename
# ln -s /etc /etc/rc.d

模拟redhat-3进行安装,新建一个文件/etc/redhat-release,写入以下内容:
Red Hat Enterprise Linux AS release 3 (Taroon)

二、开始安装

你可以从http://mirrors.cn99.com上下载oracle 10g,按以下方法进行解压:
su – oracle
wget http://mirrors.cn99.com/oracle/10g/10201_database_linux32.zip
unzip 10210_database_linux32.zip
若是远程连接到服务器,则需要这样操作:
ssh -X oracle@your_server_ip
export ORACLE_BASE=/u01/app
export ORACLE_SID=orcl #你可以自己命名sid
#确保此时环境中没有ORACLE_HOME 和TNS_ADMIN
$ unset ORACLE_HOME
$ unset TNS_ADMIN

可以将这些写进.bash_profile
export ORACLE_BASE=/opt/oracle
export ORACLE_SID=oralin
unset ORACLE_HOME
unset TNS_ADMIN

umask 022

执行
cd database
LC_ALL=en_US ./runInstaller

三、安装后

oracle启动脚本/etc/init.d/oracle

su
nano /etc/init.d/oracle


#!/bin/bash
#
# /etc/init.d/oracledb
#
# Run-level Startup script for the Oracle Instance, Listener, and
# Web Interface

export ORACLE_HOME=/u01/app/oracle/oracle/product/10.2.0/db_1/
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin

ORA_OWNR="oracle"

# if the executables do not exist -- display error

if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]
then
echo "Oracle startup: cannot start"
exit 1
fi

# depending on parameter -- startup, shutdown, restart
# of the instance and listener or usage display

case "$1" in
start)
# Oracle listener and instance startup
echo -n "Starting Oracle: "
su $ORA_OWNR -c "$ORACLE_HOME/bin/lsnrctl start"
su $ORA_OWNR -c $ORACLE_HOME/bin/dbstart
touch /var/lock/oracle

su $ORA_OWNR -c "$ORACLE_HOME/bin/emctl start dbconsole"
su $ORA_OWNR -c "$ORACLE_HOME/bin/isqlplusctl start"
echo "OK"
;;
stop)
# Oracle listener and instance shutdown
echo -n "Shutdown Oracle: "
su - $ORA_OWNR -c "$ORACLE_HOME/bin/isqlplusctl stop"
su - $ORA_OWNR -c "$ORACLE_HOME/bin/emctl stop dbconsole"
su - $ORA_OWNR -c "$ORACLE_HOME/bin/lsnrctl stop"
su - $ORA_OWNR -c $ORACLE_HOME/bin/dbshut
rm -f /var/lock/oracle

echo "OK"
;;
reload|restart)
$0 stop
$0 start
;;
*)
echo "Usage: `basename $0` start|stop|restart|reload"
exit 1
esac
exit 0

chmod 755 /etc/init.d/oracledb
update-rc.d oracledb defaults 99

可以通过/etc/init.d/oracle start来启动oracle.

参考:
1 http://sysop.com.cn/system5504,1.html
2 https://help.ubuntu.com/community/Oracle10g
3 http://mirrors.cn99.com/oracle/10g/

dbstart无法启动

安装完成后一直有问题,
su oracle
dbstart
提示:
“Failed to auto-start Oracle Net Listene using /ade/vikrkuma_new/oracle/bin/tnslsnr”
解决办法:

To solve this problem please follow the steps.

Step 1 Edit $ORACLE_HOME/bin/dbstart
Step 2 Goto line 78
Step 3 Replace the line with
ORACLE_HOME_LISTNER=$ORACLE_HOME
Step 4 Save and exit the editor.
Step 5 Now reexecute the dbstart

见:http://forums.oracle.com/forums/thread.jspa?messageID=1094708&#1094708