LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 13279|回复: 41

AS3下安装Qmail!

[复制链接]
发表于 2004-2-28 15:10:53 | 显示全部楼层 |阅读模式
本帖操作环境是Redhat AS3,文章中提到的软件在LinuxSir首页有打包,方便大家下载!贴中提到的安装过程大部分参考网上文章!及参考cloud的文章,http://www.leftworld.net/cloud/doc/qmail.htm

首先进行安装ucspi-tcp-0.88
AS3的glibc的版本问题,打完补丁才能正常编译  
  
root: ~ $ tar zxvf ucspi-tcp-0.88.tar.gz  
root: ~ $ cd ucspi-tcp-0.88  
root: ~ $ patch -p1 < ucspi-tcp-0.88.a_record.patch    \\ 补丁所在路径
root: ~ $ patch -p1 < ucspi-tcp-0.88.errno.patch       \\ 补丁所在路径
root: ~ $ patch -p1 < ucspi-tcp-0.88.nobase.patch      \\ 补丁所在路径
root: ~ $ make  
root: ~ $ make setup check  

##################

安装qmail-1.03

root: ~ $ mkdir /var/qmail  
root: ~ $ mkdir /var/qmail/alias  

建立组及用户  

root: ~ $ groupadd nofiles  
root: ~ $ groupadd qmail  
root: ~ $ useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent  
root: ~ $ useradd qmaild -g nofiles -d /var/qmail -s /nonexistent  
root: ~ $ useradd qmaill -g nofiles -d /var/qmail -s /nonexistent  
root: ~ $ useradd qmailp -g nofiles -d /var/qmail -s /nonexistent  
root: ~ $ useradd qmailq -g qmail -d /var/qmail -s /nonexistent  
root: ~ $ useradd qmailr -g qmail -d /var/qmail -s /nonexistent  
root: ~ $ useradd qmails -g qmail -d /var/qmail -s /nonexistent  

打补丁及编绎安装qmail

root: ~ $ tar zxvf qmail-1.03.tar.gz  
root: ~ $ tar zxvf qmail-smtpd-auth-0.31.tar.gz  
root: ~ $ cp qmail-smtpd-auth-0.31/base64.* qmail-1.03                \\ 打smtp-auth补丁,支持smtp认证  
root: ~ $ patch -d qmail-1.03 < qmail-smtpd-auth-0.31/auth.patch      \\ 补丁路径
root: ~ $ cd qmail-1.03  
root: ~ $ patch -p1 < qmail-103.patch                                 \\ 补丁路径
root: ~ $ patch -p1 < qmailqueue-patch                                \\ 补丁路径
root: ~ $ patch -p1 < qmail-maildir++.patch                           \\ 补丁路径
root: ~ $ patch -p1 < qmail-1.03.errno.patch                          \\ 补丁路径
root: ~ $ patch -p1 < qmail-1.03.qmail_local.patch                    \\ 补丁路径
root: ~ $ vi qmail-smtpd.c                                            \\ 搜索函数straynewline中的451改为553

// 当你的服务器收到无效格式的邮件时,会发送:"I am not going to accept that message at the moment,you can try again later",对方服务器收到后,几秒钟后又会发送同样的邮件给你,造成多次的重复。
// 改为553后,你的服务器将直接发送:"I am not going to accept that message,don't try sending it again.",告诉对方的服务器不要再发这封无效的信件。

root: ~ $ make setup check  
root: ~ $ ./config-fast mail.snoopy.gov                                \\ 这里改为你的域名

添加别名用户

root: ~ $ touch /var/qmail/alias/.qmail-root  
root: ~ $ touch /var/qmail/alias/.qmail-postmaster  
root: ~ $ touch /var/qmail/alias/.qmail-mailer-daemon  
root: ~ $ chmod 644 /var/qmail/alias/.qmail*
root: ~ $ echo postmaster > /var/qmail/control/bouncefrom           \\ 退回邮件
root: ~ $ echo mail.snoopy.gov > /var/qmail/control/helohost        \\ 主机名(解决新浪拒收邮件问题)
root: ~ $ echo 10485760 > /var/qmail/control/databytes              \\ 接收邮件的最大容量 (0=无限制)??
root: ~ $ echo 40 > /var/qmail/control/concurrencylocal             \\ 本地同时投递邮件的数目
root: ~ $ echo 40 > /var/qmail/control/concurrencyremote            \\ 同时投递至远程主机的数目
  
/var/qmail/control/locals                                           \\ 确保文件中有缺省域名,否则投递失败的邮件将不知所踪

如果存在postfix和sendmail,或其他邮件服务,停用现在的mail服务,或则删除它!
  
root: ~ $ /etc/rc.d/init.d/sendmail stop  
root: ~ $ cp /var/qmail/bin/sendmail /usr/sbin/qmail.sendmail  
root: ~ $ rm -f /etc/alternatives/mta  
root: ~ $ ln -s /usr/sbin/qmail.sendmail /etc/alternatives/mta  
  
root: ~ $ ln -s /var/qmail/bin/sendmail /usr/lib/sendmail  
root: ~ $ ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail  
root: ~ $ chmod 777 /usr/sbin/sendmail                             \\ 这里特别要注意检查/usr/sbin/sendmail的属性.不然会导致装完后用igenus在web界面发信不成功

###################

安装vpopmail

root: ~ $ mkdir /home/vpopmail  
root: ~ $ mkdir /home/vpopmail/etc  

添加用户和组

root: ~ $ groupadd vchkpw  
root: ~ $ useradd -g vchkpw vpopmail  

添加mysql的vpopmail用户,用于操作vpopmail数据库  

AS3默认安装后,mysql缺少mysql-server-3.23.58-4.i386.rpm,装上去!然后测试是否可以正常使用

root: ~ $ cp /usr/lib/mysql/* /usr/lib/  
root: ~ $ cp /usr/include/mysql/* /usr/include/
root: ~ $ service mysqld start
root: ~ $ mysql -p
                                       
mysql>create database vpopmail;                                    \\ 进入mysql命令行

mysql>grant all on vpopmail.* to vpopmail@localhost identified by "snoopyxp";  

编译安装vpopmail

root: ~ $ tar zxvf vpopmail-5.2.1.tar.gz  
root: ~ $ cd vpopmail-5.2.1  
root: ~ $ vi vmysql.h  
   
#define MYSQL_UPDATE_SERVER "localhost"                             \\ mysql服务器名
#define MYSQL_UPDATE_USER "vpopmail"                                \\ 用户名
#define MYSQL_UPDATE_PASSWD "snoopyx"                               \\ 改成你设置的密码
  
#define MYSQL_READ_SERVER "localhost"                               \\ mysql服务器名  
#define MYSQL_READ_USER "vpopmail"                                  \\ 用户名
#define MYSQL_READ_PASSWD "snoopyx"                                 \\ 改成你设置的密码  
  
创建tcp.smtp文件(或者使用/etc/tcp.smtp)
  
root: ~ $ vi /home/vpopmail/etc/tcp.smtp  
  
  127.0.0.1:allow,RELAYCLIENT=""  
:allow  
  
root: ~ $ cd /home/vpopmail/etc  
root: ~ $ tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp  

进行编译

root: ~ $ ./configure  --prefix=/home/vpopmail                      \\ 指定安装路径  
                --enable-mysql=y                                     \\ 是否应用Mysql数据库  
                --enable-incdir=/usr/include/mysql                   \\ Mysql数据库include文件所在目录  
                --enable-libdir=/usr/lib/mysql                       \\ Mysql数据库lib文件所在目录  
                --enable-default-domain=snoopy.gov                   \\ 定义虚拟域名  
                --enable-passwd=n                                    \\ 是否使用系统密码验证方式  
                --enable-defaultquota=10485760                       \\ 定义缺省邮箱大小,10485760为10MB,20971520为20MB,52428800为50MB  
                --enable-tcprules-prog=/usr/local/bin/tcprules       \\ 指定tcprules目录  
                --enable-tcpserver-file=/home/vpopmail/etc/tcp.smtp  \\ 指定tcprules应用规则文件  
                --enable-vpopuser=vpopmail                           \\ vpopmail的用户  
                --enable-vpopgroup=vchkpw                            \\ vpopmail的组  
                --enable-ip-alias-domains=n                          \\ 在虚拟域中允许通过反向IP地址查找虚拟域名  
                --enable-sqwebmail-pass=y                            \\ sqwebmail密码验证支持
                --enable-hardquota=10000000                          \\ 限制磁盘限额为10M就需要使用下面这个配置参数,若磁盘限额超出,将拒绝接受该用户的新邮件,并返回一封拒绝信息邮件,其中的信息可以定制
root: ~ $ make  
root: ~ $ make install-strip  

创建虚拟域

root: ~ $ cd /home/vpopmail/bin  
root: ~ $ ./vadddomain 域名 (密码)
\\ 在mysql数据库vpopmail中自动生成vpopmail表单,生成的密码是postmaster@域名帐户的密码,以后登陆qmailadmin就是使用postmaster登陆的

root: ~ $ ./vadduser 用户名 密码
\\ 会自动往表vpopmail中添加用户数据,用户添加到默认的域里面。如果要添加到其他的虚拟域,用户名要带域名,如pink@snoopy.gov)  
如果不成功的话,则必须先删除创建的域,./vdeldomain 域名 不要使用手工操作mysql删除域和用户帐号(除非你特别熟悉),否则会引起系统帐户的紊乱

########################

smtp-auth的设置  

root: ~ $ chmod 4755 vchkpw  
root: ~ $ chown root.root vchkpw  

\\ 如果使用带验证的smtp,smtp进程要调用密码验证程序,则必须要使用 setuid 和setgid。提高vchkpw的权限,才能完成setgid操作。  

接下来安装cmd5checkpw
  
root: ~ $ tar zxvf cmd5checkpw-0.22.tar.gz  
root: ~ $ cd cmd5checkpw-0.22  
root: ~ $ make  
root: ~ $ mkdir /usr/man  
root: ~ $ mkdir /usr/man/man8  
root: ~ $ make install  
   
注意,因为使用vpopmail,所以checkpassword可以不用安装!

生成qmail的启动脚本

root: ~ $ cp /var/qmail/boot/home /var/qmail/rc  
root: ~ $ vi /var/qmail/rc                                           \\ 对rc文件进行修改,以决定投送方式  
  
#!/bin/sh  
  
# Using splogger to send the log through syslog.  
# Using dot-forward to support sendmail-style ~/.forward files.  
# Using qmail-local to deliver messages to ~/Mailbox by default.  
  
exec env - PATH="/var/qmail/binPATH" qmail-start ./Maildir/ splogger qmail &  
  
#vi /var/qmail/smtp //编辑smtp服务的启动脚本  
  
#!/bin/sh
# -c 100                // 指同时并行连接数为100
QMAILDUID=qmaild
NOFILESGID=nofiles

/usr/local/bin/tcpserver -H -R -c 100 -l 0 -t 1 -v -p -x /home/vpopmail/etc/tcp.smtp.cdb -u $QMAILDUID -g $NOFILESGID 0 smtp /var/qmail/bin/qmail-smtpd mail.snoopy.gov /home/vpopmail/bin/vchkpw /bin/true /bin/cmd5checkpw /bin/true 2>&1 | /var/qmail/bin/splogger smtpd 3 &

root: ~ $ vi /var/qmail/pop3                                         \\ 编辑pop3服务的启动脚本  
  
#!/bin/sh

/usr/local/bin/tcpserver -l mail.snoopy.gov -U -c 100 -H -R 0 pop3 /var/qmail/bin/qmail-popup mail.snoopy.gov  /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir &
                  
root: ~ $ chmod 755 /var/qmail/rc  
root: ~ $ chmod 755 /var/qmail/smtp  
root: ~ $ chmod 755 /var/qmail/pop3  
  
运行qmail并测试

root: ~ $ /var/qmail/rc  
root: ~ $ /var/qmail/smtp  
root: ~ $ /var/qmail/pop3  
root: ~ $ ps aux | grep "qmail"                                      \\ 查看qmail的服务进程是否已完全正常启动  

如果qmail已正常启动,用outlook测试qmail的smtp和pop3是否正常,注意由于vpopmail支持虚拟域名,在outlook中设置邮件帐号时,用户名后要加上域名,像pink@snoopy.gov。smtp是带认证的,在outlook中也要作相应设置。建议先将qmail测试正常后再安装igenus。如果qmail出现问题,可查看mysql中的vpopmail数据库,/var/log下的mysqld和maillog日志记录  

注意: 如果你在X下用X的kmail客户端测试,smtp的验证要选择LOGIN,POP的验证选择纯文本(APOP是错的,虽然有时候mail客户端会自动检测条到APOP上面),如果有好几个验证方式给你选择的话。

如果能发信,但收不到,这个时候看一下/var/log/maillog会找到答案的,一般是由于找不到libmysqlclient.so.12这个mysql库文件造成的,前面我之所以要copy到/usr/lib下就是因为这个问题
  
######################

安装并运行igenus  

root: ~ $ tar zxvf igenus_2_20030516_snap.tgz -C /var/www/html   
建temp文件夹
root: ~ $ cd /var/www/html/igenus  
root: ~ $ mkdir temp  
root: ~ $ chmod -R 0755 temp  
root: ~ $ chown -R vpopmail:vchkpw temp  

修改httpd.conf  

root: ~ $ vi /etc/httpd/conf/httpd.conf  

Group Apache  
User Apache  
修改为:  
Group vchkpw  
User vpopmail  
  
AddDefaultCharset ISO-8859-1  
修改为  
AddDefaultCharset GB2312                                            \\ 使默认页面为中文,2.x的apache需要修改
  
root: ~ $ /etc/rc.d/init.d/httpd restart                            \\ 重启apache,使修改生效  

修改config_inc.php文件

root: ~ $ cd /var/www/html/config  
root: ~ $ vi config_inc.php  
  
$CFG_BASEPATH = "/var/www/html/igenus";  
  
$CFG_MYSQL_HOST = 'localhost';  
$CFG_MYSQL_USER = 'vpopmail';  
$CFG_MYSQL_PASS = 'snoopy';                                          \\ 改成你的密码  
$CFG_MYSQL_DB = 'vpopmail';  
  
$CFG_TEMP = $CFG_BASEPATh."/temp";

重新编制Mysql数据库表格
  
root: ~ $ mysql -u root -p

mysql>use vpopmail;  
mysql>alter table vpopmail drop primary key;  
mysql>alter table vpopmail add column pw_id int(5) NOT NULL primary key auto_increment;  
mysql>create table address (id int(11) unsigned NOT NULL auto_increment,pw_id int(5) unsigned NOT NULL default '0',name varchar(64) NOT NULL default '', email varchar(128) NOT NULL default '',UNIQUE KEY id (id),KEY pw_id (pw_id)) TYPE=MyISAM;  
mysql>CREATE TABLE stow (id int(11) unsigned NOT NULL auto_increment,pw_id int(5) NOT NULL default '0',name varchar(64) NOT NULL default '',http varchar(128) NOT NULL default '',memo varchar(255) NOT NULL default '',PRIMARY KEY (id)) TYPE=MyISAM PACK_KEYS=1;   
mysql>quit;  

编辑qmail自启动脚本  
  
root: ~ $ vi /etc/rc.d/init.d/qmail                                   \\ 编辑自动运行脚本  
  
#! /bin/sh  
# chkconfig: 2345 90 90  
# description: qmail (include smtp and pop3) auto start/stop scripts.  
  
. /etc/rc.d/init.d/functions  
  
case "$1" in  
  
start)  
echo -n "start qmail:"  
/var/qmail/rc &  
echo "."  
  
echo -n "start smtp service:"  
/var/qmail/smtp  
echo "."  
  
echo -n "start pop3 service:"  
/var/qmail/pop3  
echo "."  
;;  
  
stop)  
echo "stop qmail:"  
killproc qmail-send  
killproc qmail-clean  
killproc qmail-rspawn  
killproc qmail-lspawn  
killproc splogger  
killproc tcpserver  
;;  
  
*)  
exit 1  
;;  
esac  
  
exit 0  
  
root: ~ $ chmod 755 /etc/rc.d/init.d/qmail  
root: ~ $ chkconfig --add qmail                              
\\ 现在只要你启动系统就会自动运行

igenus在安装和使用过程中出现错误的解决方法
  
1.登录时出现的错误。  
编辑/usr/loal/lib/php.ini,修改:  
register_globals = On  

2.发邮件时出现528错误,其实这是php在编译过程中找不到/usr/sbin/sendmail文件造成的,qmail使用/var/qmail/bin/sendmail发信
解决方法:  
a.添加链接  
root: ~ $ ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail  
b.停止apache运行  
c.重新编译php即可   

########################

安装ezmlm and ezmlm-idx使qmail支持邮件列表功能

1.注意:为了启用maillist的MySQL支持,你必须首先建立mysql管理用户:(Ex:user:ezmlm,pass:ezmlm)

root: ~ $ mysql -p  
>use mysql;  
>create database ezmlm;
>grant all on ezmlm.* to ezmlm@localhost identified by "密码";
>flush privileges;  
>exit;  

root: ~ $ mysqladmin -u root -psnoopyxp create ezmlm

2.ezmlm-idx包含有对ezmlm的修正和补充,他们是一个整体。
  
root: ~ $ cd /home/software  
root: ~ $ tar -zxvf ezmlm-0.53.tar.gz  
root: ~ $ tar -zxvf ezmlm-idx-0.40.tar.gz  
root: ~ $ mv  -Rf ezmlm-idx-0.40/* ezmlm-0.53/                       \\ 将ezmlm-idx-0.40下的文件覆盖到ezmlm-0.53下  
root: ~ $ cd ezmlm-0.53  
root: ~ $ patch < idx.patch  
root: ~ $ patch < ezmlm-idx-0.53.400.unified_41.patch  
root: ~ $ make mysql                                                 \\ MySQL 支持  
root: ~ $ make clean  
root: ~ $ make man  
root: ~ $ make ch_GB                                                 \\ 汉字GB2312支持  

修改conf-sqlcc文件  
内容为:-I/usr/include/mysql  
  

修改conf-sqlld  
内容为: -L/usr/lib/mysql -lmysqlclient -lnsl -lm -lz  
-lz是增加zip压缩支持
  
修改conf-bin  
第一行:/var/qmail/bin/ezmlm  
  
修改conf-man  
第一行:/var/qmail/man  
  
修改conf-qmail  
第一行:/var/qmail  
  
root: ~ $ make setup  
  
修改/usr/local/qmail/bin/ezmlm/ezmlmrc将"To:##L@##H"修改为"To:<#L#>@<#H#>",主要是修改用邮件客户端收到信之后,收件人地址显示格式错误。

邮件列表收到的信息乱码解决方法:

在/home/vpopmail/domains/snoopy.gov/maillistname/下建立一个charset的文件
root: ~ $ touch charset
root: ~ $ chown vpopmail:vchkpw charset
root: ~ $ chmod go-r charset
root: ~ $ vi charset                                                   \\ 添加一行gb2312  

这样你发一份邮件到pink@snoopy.gov 你收到的信息将可以正确的显示中文了!
  
在你建立一个基于MySQL的maillist之前,你必须保证ezmlm库中已存在一个对应的表(其实我发现没有表,ezmlm会自动建立,只是会提示错误):  

Ex:你想建一个基于MySQL的maillist:testlist  

root: ~ $ /var/qmail/bin/ezmlm/ezmlm-mktab -d testlist | mysql -uezmlm -pezmlm -f ezmlm
  
这样就在ezmlm库中为testlist建立了一系列相关表格:  

+------------------------+  
| Tables |  
+------------------------+  
| testlist |  
| testlist_allow |  
| testlist_allow_slog |  
| testlist_cookie |  
| testlist_deny |  
| testlist_deny_slog |  
| testlist_digest |  
| testlist_digest_cookie |  
| testlist_digest_mlog |  
| testlist_digest_slog |  
| testlist_mlog |  
| testlist_mod |  
| testlist_mod_slog |  
| testlist_slog |  
+------------------------+  
  
你可以用一下命令察看,安装了qmailadmin后可以使用qmailadmin管理邮件列表了

root: ~ $ mysqlshow -uezmlm -pezmlm ezmlm  

######################

安装autorespond

root: ~ $ tar zxvf autorespond-2.0.2.tar.gz  
root: ~ $ cd autorespond-2.0.2  

修改Makefile文件  
将其中的INSTALL_DIR =修改为 /var/qmail/bin  
root: ~ $ make  
root: ~ $ make install  
root: ~ $ cp autorespond /usr/local/bin  

######################

安装qmailadmin  
安装之前先确认你是否已经安装了vpopmail,并使用vchkpw  
是否已经安装ezmlm。  
是否已经安装autorespond。  
确认以上的工作已完成,可以开始安装qmailadmin
  
root: ~ $ cd /tmp/software  
root: ~ $ tar zxvf qmailadmin-1.0.6.tar.gz  
root: ~ $ cp en-us qmailadmin-1.0.6/html/en  
root: ~ $ cp en-us qmailadmin-1.0.6/html/en-us

注:以上两步,为了汉化qmailadmin。en-us取自iceblood的qmail安装包
  
root: ~ $ cd qmailadmin-1.0.6  
root: ~ $ cd qmailadmin-1.0.6  
root: ~ $./configure --enable-cgibindir=/var/www/cgi-bin --enable-htmldir=/var/www/html/igenus --enable-ezmlmdir=/var/qmail/bin/ezmlm (确保你的ezmlm程序文件在此目录下)
root: ~ $ make  
root: ~ $ make install-strip  
root: ~ $ mkdir -p /var/www/html/images/qmailadmin  
root: ~ $ mv images/*.* /var/www/html/images/qmailadmin/                   \\ 复制images下的图片到/var/www/html/images/qmailadmin下

######################
安装sqwebmail

root: ~ $ cd /tmp/sofeware
root: ~ $ tar zxvf sqwebmail-3.5.0-cn.tar.gz
root: ~ $ cd sqwebmail-3.5.0
root: ~ $ ./configure  --with-db=db                                        \\ 如果你没有安装GDBM库,那么请加上这个,默认系统如果找到了GDBM库会使用GDBM库
                        --enable-webpass=yes
                        --without-authpam  
                        --without-authpwd  
                        --without-authshadow  
                        --without-authldap  
                        --without-authuserdb  
                        --without-authpwd  
                        --with-authvchkpw  
                        --with-authdaemon                                   \\ 激活web页面修改密码功能模块
                        --enable-cgibindir=/var/www/cgi-bin/sqwebmail
                        --enable-imagedir=/var/www/html/sqwebmail
                        --disable-utf7-folder-encoding                      \\ 去掉IMAP文件夹编码支持
                        --with-cachedir=/tmp/sqwebmail                      \\ 缓存目录
                        --with-cacheowner=bin                               \\ 缓存目录所有者default: bin
                        --enable-mimetypes=/var/www/html/
                        --enalbe-mimecharset=gb2312
                        --enable-unicode=gb2312
root: ~ $ make configure-check
root: ~ $ make  
root: ~ $ make install-strip
root: ~ $ make install-configure
root: ~ $ /usr/local/share/sqwebmail/libexec/authlib/authdaemond start  

注意,以后必须启动这个进程进行身份验证,发现安装sqwebmail后,这个进程不启动那么我的邮件系统就没法登陆,总是说密码验证错误,qmailadmin倒可以登陆

su -c "/usr/local/share/sqwebmail/cleancache.pl" bin

  
现在,重起你主机系统,设置你的outlook或者foxmail.接受邮件了,也可以通过webmail访问你的mail系统了   
http://localhost/cgi-bin/sqwebmail/sqwebmail

通过webmail接受你的邮件信息,sqwebmail我只是装上测试一下,看看效果,它对中文支持比较差,也没有比较好的中文版本,大家还是觉得用igenus比较好
http://localhost/cgi-bin/qmailadmin 通过web方式管理和添加用户了  
  
补充:在/home/vpopmail/domains/snoopy.gov下面建立一个.qmailadmin-limits文件,这个文件本身没有在里面写  
maxpopaccounts 100
default_quota 10485760  

这样用qmailadmin添加账号的最大数目就是100,每个邮箱的配额就是10485760,10M

此贴只适合AS3,其他系统没试过!
发表于 2004-2-28 16:12:37 | 显示全部楼层
发表于 2004-3-2 09:48:19 | 显示全部楼层
在编译sqwebmail时出现错误,

  1. make[2]: Entering directory `/usr/local/src/sqwebmails/sqwebmail-3.5.0/bdbobj'
  2. Compiling bdbobj.c
  3. bdbobj.c: In function `bdbobj_open':
  4. bdbobj.c:117: warning: passing arg 2 of pointer to function from incompatible pointer type
  5. bdbobj.c:117: incompatible type for argument 4 of indirect function call
  6. bdbobj.c:117: too few arguments to function
  7. make[2]: *** [bdbobj.o] Error 1
  8. make[2]: Leaving directory `/usr/local/src/sqwebmails/sqwebmail-3.5.0/bdbobj'
  9. make[1]: *** [all] Error 2
  10. make[1]: Leaving directory `/usr/local/src/sqwebmails/sqwebmail-3.5.0/bdbobj'
  11. make: *** [all-recursive] Error 1
复制代码

请大侠帮忙看看是怎么会事。下面是提示出错的那一段:

  1.   obj->dbf=0;
  2.         if (db_create(&obj->dbf, NULL, 0) == 0)
  3.         {
  4.                 if ( (*obj->dbf->open)(obj->dbf, filename, NULL,
  5.                         dbtype, flags, 0664))
  6.                                                                                             117,1-8       35%

  7.                         (*obj->dbf->close)(obj->dbf, DB_NOSYNC);
  8.                         obj->dbf=0;
  9.                 }
  10.         }
  11.                                                                                                               
  12.         if (obj->dbf)
复制代码


源函数如下:


  1. int bdbobj_open(struct bdbobj *obj, const char *filename, const char *modestr)
  2. {
  3. #if     DB_VERSION_MAJOR < 2
  4.                                                                                                               
  5. int     flags=O_RDONLY;
  6.                                                                                                               
  7. #else
  8.                                                                                                               
  9. int     flags=DB_RDONLY;
  10.                                                                                                               
  11. #endif
  12.                                                                                                               
  13. DBTYPE  dbtype=DB_HASH;
  14.                                                                                                               
  15.         for ( ; *modestr; modestr++)
  16.                 switch (*modestr)       {
  17.                 case 'c':
  18.                 case 'C':
  19. #if     DB_VERSION_MAJOR < 2
  20.                         flags=O_RDWR|O_CREAT;
  21. #else
  22.                         flags=DB_CREATE;
  23. #endif
  24.                         break;
  25.                 case 'w':
  26.                 case 'W':
  27. #if     DB_VERSION_MAJOR < 2
  28.                         flags=O_RDWR;
  29. #else
  30.                         flags=0;
  31. #endif
  32.                         break;
  33.                                                                                             51,1          20%

  34.                 case 'n':
  35.                 case 'N':
  36. #if     DB_VERSION_MAJOR < 2
  37.                         flags=O_RDWR|O_CREAT|O_TRUNC;
  38. #else
  39.                         flags=DB_CREATE|DB_TRUNCATE;
  40. #endif
  41.                                                                                                               
  42.                         break;
  43.                                                                                                               
  44.                 case 'b':
  45.                 case 'B':
  46.                         dbtype=DB_BTREE;
  47.                         break;
  48.                                                                                                               
  49.                 case 'e':
  50.                 case 'E':
  51.                         dbtype=DB_RECNO;
  52.                         break;
  53.                 }
  54.                                                                                                               
  55.         bdbobj_close(obj);
  56.                                                                                                               
  57. #if DB_VERSION_MAJOR < 3
  58. #if DB_VERSION_MAJOR < 2
  59.         if ( (obj->dbf=dbopen(filename, flags, 0664, dbtype, 0)) != 0)
  60. #else
  61.         if ( db_open(filename, dbtype, flags, 0664, 0, 0, &obj->dbf) == 0)
  62. #endif
  63. #else
  64.         obj->dbf=0;
  65.         if (db_create(&obj->dbf, NULL, 0) == 0)
  66.         {
  67.                 if ( (*obj->dbf->open)(obj->dbf, filename, NULL,
  68.                         dbtype, flags, 0664))
  69.                                                                                             117,1-8       35%

  70.                         (*obj->dbf->close)(obj->dbf, DB_NOSYNC);
  71.                         obj->dbf=0;
  72.                 }
  73.         }
  74.                                                                                                               
  75.         if (obj->dbf)
  76. #endif
  77.         {
  78. #ifdef  FD_CLOEXEC
  79.                                                                                                               
  80. #if DB_VERSION_MAJOR < 2
  81.         int     fd=(*obj->dbf->fd)(obj->dbf);
  82. #else
  83.         int     fd;
  84.                                                                                                               
  85.                 if ((*obj->dbf->fd)(obj->dbf, &fd))
  86.                         fd= -1;
  87. #endif
  88.                                                                                                               
  89.                 if (fd >= 0)    fcntl(fd, F_SETFD, FD_CLOEXEC);
  90. #endif
  91.                                                                                                               
  92.                                                                                                               
  93.                 obj->has_dbf=1;
  94.                 return (0);
  95.         }
  96.         return (-1);
  97. }
  98.                                                                                                               
复制代码
发表于 2004-3-2 10:10:29 | 显示全部楼层
请问,在locale为英文的环境下没法汉化,是不是要把locale设为中文后再进行汉化?
发表于 2004-3-24 16:33:48 | 显示全部楼层

patch怎么提示出错?

patch -p1 < ../ucspi-tcp-0.88.a_record.patch
提示:-bash:patch :command not fund

应该如何解决,谢谢!
 楼主| 发表于 2004-3-24 18:37:46 | 显示全部楼层
是不是管理员帐号啊??
发表于 2004-3-25 10:36:26 | 显示全部楼层
是啊,用root登陆的.
发表于 2004-3-25 13:34:36 | 显示全部楼层
我的邮箱为什么会成为负数,只有5M,现在用了7M ,成了-2M了,有办法解决吗?
发表于 2004-3-25 16:50:50 | 显示全部楼层

帮忙啊~~

上面的文章非常不错!
但是我按照上面的方法装出现了一个问题!
就是我的mysql的mysql.sock文件生成在/opt/mysql/var这个目录中.而在vpopmail建立虚拟域的时候,用./vadddomain 域名生成表单的时候出现了错误.
Please enter password for postmaster:
enter password again:
could not connect to mysql update server Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) with database
could not connect to mysql update server Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
vmysql: sql error[c]: MySQL server has gone away
vmysql: sql error: MySQL server has gone away
vmysql: sql error[3]: MySQL server has gone away
vmysql: sql error[c]: MySQL server has gone away
vmysql: sql error[c]: MySQL server has gone away
vmysql: sql error: MySQL server has gone away
vmysql: sql error[3]: MySQL server has gone away
vmysql: sql error[2]: MySQL server has gone away
Error: Unable to chdir to vpopmail/users directory
它确在/var/lib/mysql/mysql.sock找mysql.sock文件.
当然找不到了.请问各位有什么方法来解决.是让MYSQL的mysql.sock生成路径改变呢?还是让vpopmail去/opt/mysql/var去找这个文件?
请各位帮帮,非常感谢!
 楼主| 发表于 2004-3-25 17:04:42 | 显示全部楼层
最初由 冷雪 发表
我的邮箱为什么会成为负数,只有5M,现在用了7M ,成了-2M了,有办法解决吗?


as3下的igenus都会!到现在我自己也解决不了,,,,

用别的webmail吧,过阵解决方法出来了我贴出来
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表