很早就想试下Linux下的Postfix服务,也看了网上很多相关的教程,但是每当我看到那长长的篇幅就打退堂鼓了,但是有些东西在技术的道路上始终是要经历和面对的,这些天就一直在鼓捣着这东东,现在把自已的经历写出来,希望能对大家有点用.对于大侠来讲,这些算不了什么,但至少相对我这种还在Linux门外徊徘的人来说,它是我学习的一个历程.其中 蓝色字体需用户输入,白色字体是系统显示,红色字体是我加入的说明.
[root@redhat ~]#hostname //主机名称 |
1 |
2 |
3 |
4 |
5 |
BerKeleyDB | Comperss-Raw-zlib | IO-Compress-Base | IO-Compress-Zlib | Compress-Zlib |
IO-Zlib | Array-Compcre | Sub-Updevel | Test-Simple | Test-Exception |
Tree-Dag-Node | Test-Warn | Net-SsLeay | IO-Socket-SSL | IO-String |
Algorithm-Diff | Text-Diff | Archive-Tar | Archive-Zip | DBI |
DBD-Mysql | IO-Socket-INET6 | IP-country | File-Temp | NetAddr-IP |
NET-CIDR-Lite | NET-IP | NET-Ident | Digest-SHA | Digest-SHAL |
Digest-HMAC | NET-DNS | Version |
NET-DNS-Resolver -Programmable |
HTML-Tagset |
HTML-Parser | Extutils-CBuilder | Encode-Detect | Extutils-Parsexs | Error |
GD | GD-securityImage |
GD-securityImage -util |
Unix-Syslog |
Sys-Hostname -Long |
Regexp-Common | URI | Mail-SPF | Mail-SPF-Query | TimeDate |
Pod-Escapes | Pod-Simple | Test-Pod | MailTools | Mail-DKIM |
Crypt-Openssl- Random |
Crypt-Openssl-RSA | Mail-DomainKeys | MIME-Tools | Libww-Perl |
SpamAssassin | Convery-TNEF | Convert-UUlib | NET-Server | Time-HiRes |
File-Tail | Log-Log4perl | 22.1 Socket6-0.19 |
41.1 PerlMagick |
|
因为这里的安装方式都是采用源码,所以如果系统中存在旧有的版本,则会引起冲突,这里要做的是把一些和源码包冲突的软件卸载.在使用命令进行查询时,当执行完命令后没有提示则表示系统未安装查询的组件,否则请卸载查询出来的组件.
[root@redhat ~]# rpm -qa | grep httpd
//查询是否已安装软件 [root@redhat ~]# rpm -qa | grep mysql [root@redhat ~]# rpm -qa | grep php [root@redhat ~]# rpm -qa |grep sasl cyrus-sasl-md5-2.1.19-5.EL4 //系统已安装有软件 cyrus-sasl-2.1.19-5.EL4 cyrus-sasl-plain-2.1.19-5.EL4 cyrus-sasl-devel-2.1.19-5.EL4 [root@redhat ~]# rpm -e --nodeps cyrus-sasl-md5-2.1.19-5.EL4 cyrus-sasl-2.1.19-5.EL4 \ cyrus-sasl-plain-2.1.19-5.EL4 cyrus-sasl-devel-2.1.19-5.EL4 //卸载SASL [root@redhat ~]# rpm -qa |grep sendmail sendmail-8.13.1-2 [root@redhat ~]# service sendmail stop Shutting down sendmail: [ OK ] Shutting down sm-client: [ OK ] [root@redhat ~]# rpm -e --nodeps sendmail [root@redhat ~]# |
[root@redhat ~]# rpm -qa |grep perl perl-HTML-Tagset-3.03-30 perl-XML-Parser-2.34-5 perl-libxml-enno-1.02-31 perl-Digest-HMAC-1.01-13 perl-XML-NamespaceSupport-1.08-6 perl-XML-Twig-3.13-6 perl-XML-LibXML-1.58-1 perl-5.8.5-12 perl-URI-1.30-4 perl-DateManip-5.42a-3 perl-HTML-Parser-3.35-6 perl-libwww-perl-5.79-5 perl-libxml-perl-0.07-30 perl-XML-Encoding-1.01-26 perl-Digest-SHA1-2.07-5 perl-Net-DNS-0.48-1 perl-Convert-ASN1-0.18-3 perl-XML-Grove-0.46alpha-27 perl-LDAP-0.31-5 perl-XML-LibXML-Common-0.13-7 perl-Filter-1.30-6 perl-Parse-Yapp-1.05-32 perl-XML-Dumper-0.71-2 perl-Time-HiRes-1.55-3 perl-XML-SAX-0.12-7 perl-Crypt-SSLeay-0.51-5 [root@redhat ~]# //卸载perl相关 [root@redhat ~]# rpm -e --nodeps perl-XML-NamespaceSupport-1.08-6 \ perl-XML-Twig-3.13-6 perl-XML-LibXML-1.58-1 perl-URI-1.30-4 \ perl-DateManip-5.42a-3 perl-HTML-Parser-3.35-6 perl-libwww-perl-5.79-5 \ perl-libxml-perl-0.07-30 perl-XML-Encoding-1.01-26 perl-Digest-SHA1-2.07-5 \ perl-Net-DNS-0.48-1 perl-Convert-ASN1-0.18-3 perl-XML-Grove-0.46alpha-27 \ perl-LDAP-0.31-5 perl-XML-LibXML-Common-0.13-7 perl-Filter-1.30-6 \ perl-Parse-Yapp-1.05-32 perl-XML-Dumper-0.71-2 perl-Time-HiRes-1.55-3 \ perl-XML-SAX-0.12-7 perl-Crypt-SSLeay-0.51-5 perl-HTML-Tagset-3.03-30 \ perl-XML-Parser-2.34-5 perl-libxml-enno-1.02-31 perl-Digest-HMAC-1.01-13 |
[root@redhat ~]# groupadd mysql [root@redhat ~]# groupadd vmail [root@redhat ~]# groupadd postfix [root@redhat ~]# groupadd postdrop [root@redhat ~]# groupadd amavis [root@redhat ~]# groupadd clamav [root@redhat ~]# groupmod -g 1001 vmail [root@redhat ~]# useradd mysql -g mysql [root@redhat ~]# useradd vmail -g vmail -u 1001 [root@redhat ~]# useradd postfix -g postfix [root@redhat ~]# useradd amavis -g amavis [root@redhat ~]# useradd clamav -g clamav |
其中用户和组的作用相信大家看了前面的软件相关大概可以看出其作用了,其中vmail是用来登录Webmail的帐号,而postdrop则是在邮件中起postdrop的作用.
1:安装
[root@redhat tmp]# mv mysql-5.0.41-linux-i686
/usr/local/mysql [root@redhat tmp]# cd /usr/local/mysql/ [root@redhat mysql]# chown -R root . //注意这些地方的点号 [root@redhat mysql]# chown -R mysql data [root@redhat mysql]# chown -R mysql data/mysql/. [root@redhat mysql]# chgrp -R mysql . [root@redhat mysql]# cp ./support-files/my-medium.cnf /etc/my.cnf [root@redhat mysql]# ./scripts/mysql_install_db --user=mysql Installing MySQL system tables... OK Filling help tables... OK |
2:启动及共享链接库
[root@redhat mysql]# bin/mysqld_safe --user=mysql &
[root@redhat mysql]#/usr/local/mysql/bin/mysqlshow -p |
3:加入到自动运行队列
[root@redhat mysql]# cp
/usr/local/mysql/support-files/mysql.server
/etc/rc.d/init.d/mysqld [root@redhat mysql]# chmod 700 /etc/rc.d/init.d/mysqld [root@redhat mysql]# chkconfig --add mysqld [root@redhat mysql]# chkconfig --level 345 mysqld on [root@redhat mysql]# export PATH=$PATH:/usr/local/mysql/bin [root@redhat mysql]# //设置mysql的运行路径 |
因为Openssl在这里的作用不是很明显,而且系统中默认一般都自带有,所以这里没有采用源码的方式安装,在这里只是做一次查询,如果想用源码的方式,这个和普通的编译方式一样,没什么特别要求的地方.
[root@redhat tmp]# rpm -qa |grep ssl openssl-devel-0.9.7a-43.1 openssl-0.9.7a-43.1 xmlsec1-openssl-1.2.6-3 |
安装这个软件的原因是因为后面的Perl组件包中必须要有它的支持才能进行下去,所以这个是不能省的.
1:安装
[root@redhat tmp]#tar zxvf db-4.5.20.tar.gz [root@redhat tmp]# cd db-4.5.20/build_unix [root@redhat build_unix]#../dist/configure --prefix=/usr/local/BerkeleyDB [root@redhat build_unix]#make [root@redhat build_unix]#make install |
2:禁用和移除旧版本文件
[root@redhat build_unix]# mv /usr/include/db4
/usr/include/db4.off |
3:链接新文件到动态库
[root@redhat build_unix]# ln -sv
/usr/local/BerkeleyDB/include /usr/include/db4 create symbolic link `/usr/include/db4' to `/usr/local/BerkeleyDB/include' [root@redhat build_unix]# ln -sv /usr/local/BerkeleyDB/include/db.h /usr/include/db.h create symbolic link `/usr/include/db.h' to `/usr/local/BerkeleyDB/include/db.h' [root@redhat build_unix]# ln -sv /usr/local/BerkeleyDB/include/db_cxx.h /usr/include/db_cxx.h create symbolic link `/usr/include/db_cxx.h' to `/usr/local/BerkeleyDB/include/db_cxx.h' [root@redhat build_unix]# echo "/usr/local/BerkeleyDB/lib" >> /etc/ld.so.conf [root@redhat build_unix]# ldconfig -v |
安装Apache有两个要注意的地方,因为我这里用的Postfix的后台管理是extman这个程序,而它是通过CGI的方式来进行管理的,所以这里启用了suexec的功能,还有一个是关于网站的存放路径的,如果不指定,那么在启用suexec后会出现 suexec-docroot的错误.
1:安装
[root@redhat httpd]# tar zxvf
httpd-2.2.4.tar.gz [root@redhat httpd]# cd httpd-2.2.4 [root@redhat httpd-2.2.4]# ./configure --prefix=/usr/local/httpd --syscOnfdir=/etc/httpd \ --enable-so --enable-ssl --enable-track-vars --enable-rewrite \ --with-zlib --enable-mods-shared=most --enable-suexec --with-suexec-caller=daemon \ --with-suexec-docroot=/var/www/ [root@redhat httpd-2.2.4]# make [root@redhat httpd-2.2.4]# make install |
2:加入到自动运行队列
[root@redhat httpd-2.2.4]# echo "/usr/local/httpd/bin/apachectl start" >> /etc/rc.local |
GD库的主要作用是配置相关的图形及字符的正确显示,包括类似验证码的功能和后面的图形日志的显示.
1:安装libpng
[root@redhat php]# tar zxvf
libpng-1.2.16.tar.gz [root@redhat php]# cd libpng-1.2.16 [root@redhat libpng-1.2.16]# ./configure --prefix=/usr/local/png [root@redhat libpng-1.2.16]# make [root@redhat libpng-1.2.16]# make install [root@redhat libpng-1.2.16]# ln -sv /usr/local/png/lib/* /usr/lib/ |
2:安装jpeg
[root@redhat php]#mkdir /usr/local/jpeg |
3:安装freetype
[root@redhat php]# tar zxvf
freetype-2.3.2.tar.gz [root@redhat php]# cd freetype-2.3.2 [root@redhat freetype-2.3.2]# ./configure --prefix=/usr/local/freetype2 [root@redhat freetype-2.3.2]# make [root@redhat freetype-2.3.2]#make install |
4:安装fontconfig
[root@redhat php]# tar zxvf
fontconfig-2.4.0.tar.gz [root@redhat php]# cd fontconfig-2.4.0 [root@redhat fontconfig-2.4.0]# ./configure --prefix=/usr/local/fontconfig \ --with-freetype-cOnfig=/usr/local/freetype2/bin/freetype-config [root@redhat fontconfig-2.4.0]# make [root@redhat fontconfig-2.4.0]# make install |
5:安装xmkmf
//安装xmkmf的原因是编译xpm时要用来这个工具 [root@redhat php]# rpm -ivh freetype-devel-2.1.9-1.i386.rpm warning: freetype-devel-2.1.9-1.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e Preparing... ########################################### [100%] 1:freetype-devel ########################################### [100%] [root@redhat php]# rpm -ivh fontconfig-devel-2.2.3-7.i386.rpm warning: fontconfig-devel-2.2.3-7.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e Preparing... ########################################### [100%] 1:fontconfig-devel ########################################### [100%] [root@redhat php]# rpm -ivh xorg-x11-devel-6.8.1-23.EL.i386.rpm warning: xorg-x11-devel-6.8.1-23.EL.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e Preparing... ########################################### [100%] 1:xorg-x11-devel ########################################### [100%] [root@redhat php]# |
6:安装xpm
//在rhel5中有直接的rpm包,librxpm.rpm
libxpm-devel.rpm [root@redhat php]# tar zxvf xpm-3.4k.tar.gz [root@redhat php]# cd xpm-3.4k [root@redhat xpm-3.4k]# xmkmf -a [root@redhat xpm-3.4k]# make [root@redhat xpm-3.4k]# make install |
7:安装gd
[root@redhat tmp]# tar zxvf
gd-2.0.34.tar.gz [root@redhat php]# cd gd-2.0.34 [root@redhat gd-2.0.34]#./configure --prefix=/usr/local/gd --with-png=/usr/local/png/ \ --with-jpeg=/usr/local/jpeg/ --with-freetyp=/usr/local/freetype2/ \ --with-fOntconfig=/usr/local/fontconfig/--with-xpm [root@redhat gd-2.0.34]# cp /usr/local/png/include/png.h ./ [root@redhat gd-2.0.34]# cp /usr/local/png/include/pngconf.h ./ [root@redhat gd-2.0.34]# make [root@redhat gd-2.0.34]# make install |
1:安装
[root@redhat tmp]# tar jxvf
courier-authlib-0.59.3.tar.bz2 [root@redhat tmp]# cd courier-authlib-0.59.3 [root@redhat courier-authlib-0.59.3]# ./configure --with-redhat --with-authmysql=yes \ --with-mailuser=vmail --with-mailgroup=vmail --with-mysql-libs=/usr/local/mysql/lib \ --with-mysql-includes=/usr/local/mysql/include \ --prefix=/usr/local/authlib --without-stdheaderdir [root@redhat courier-authlib-0.59.3]# make [root@redhat courier-authlib-0.59.3]# make install [root@redhat courier-authlib-0.59.3]# make install-configure [root@redhat courier-authlib-0.59.3]# grep "authdaemonvar" \ /usr/local/authlib/etc/authlib/authdaemonrc //找出配置文件中authdaemonvar的设置 ##NAME: authdaemonvar:2 # authdaemonvar is here, but is not used directly by authdaemond. It's authdaemOnvar=/usr/local/authlib/var/spool/authdaemon |
2:更改相关配置文件
[root@redhat courier-authlib-0.59.3]# vi
/usr/local/authlib/etc/authlib/authdaemonrc authmodulelist="authmysql" //第27行 authmodulelistorig="authmysql" //第34行 DEBUG_LOGIN=2 //第75行 |
//此文件中请不要使用空格符,应使用TAB键 [root@redhat courier-authlib-0.59.3]# vi /usr/local/authlib/etc/authlib/authmysqlrc MYSQL_SERVER localhost //26行 MYSQL_USERNAME extmail //27行 MYSQL_PASSWORD extmail //28行 MYSQL_DATABASE extmail //68行 MYSQL_SOCKET /tmp/mysql.sock //49行 MYSQL_USER_TABLE mailbox //75行 MYSQL_CLEAR_PWFIELD password //84行 DEFAULT_DOMAIN test.com //97行 MYSQL_UID_FIELD '1001' //105行 MYSQL_GID_FIELD '1001' //111行 MYSQL_LOGIN_FIELD username //120行 MYSQL_HOME_FIELD concat('/var/mailbox/',maildir) //125行 MYSQL_NAME_FIELD name //131行 MYSQL_MAILDIR_FIELD concat('/var/mailbox/',maildir) //142行 MYSQL_QUOTA_FIELD concat(quota,'S') //157行 |
3:共享链接库
[root@redhat courier-authlib-0.59.3]# echo
"/usr/local/authlib/lib/courier-authlib" >>
/etc/ld.so.conf |
4:启动及加入到自动运行队列
[root@redhat courier-authlib-0.59.3]# cp
courier-authlib.sysvinit /etc/init.d/courier-authlib [root@redhat courier-authlib-0.59.3]# chmod 755 /etc/init.d/courier-authlib [root@redhat courier-authlib-0.59.3]# chkconfig --add courier-authlib [root@redhat courier-authlib-0.59.3]# chkconfig --level 2345 courier-authlib on [root@redhat courier-authlib-0.59.3]# service courier-authlib start Starting Courier authentication services: authdaemond [root@redhat courier-authlib-0.59.3]# chmod +x /usr/local/authlib/var/spool/authdaemon [root@redhat courier-authlib-0.59.3]# |
1:安装
[root@redhat tmp]# tar zxvf
cyrus-sasl-2.1.21.tar.gz [root@redhat tmp]# cd cyrus-sasl-2.1.21 [root@redhat cyrus-sasl-2.1.21]# ./configure --prefix=/usr/local/sasl2 \ --disable-anon -enable-plain --enable-login --enable-sql \ --with-mysql=/usr/local/mysql --with-mysql-includes=/usr/local/mysql/include \ --with-mysql-libs=/usr/local/mysql/lib \ --with-authdaemOnd=/usr/local/authlib/var/spool/authdaemon/socket [root@redhat cyrus-sasl-2.1.21]# patch -p1 < sasl.patch //只在出现下面的错时才用 [root@redhat cyrus-sasl-2.1.21]# make [root@redhat cyrus-sasl-2.1.21]# make install |
如果在编译的过程中出现如"client.c:64: error: static declaration of 'global_callbacks' follows non-static declaration saslint.h:112…",需要加一个补丁程序,然后再执行编译过程。我的在rhel4下没出现错误,但在rhel5下出现错误.文件的内容如下:
[root@redhat cyrus-sasl-2.1.21]# vi sasl.patch static cmech_list_t *cmechlist; /* global var which holds the list */
-static sasl_global_callbacks_t global_callbacks; static int _sasl_client_active = 0; |
2:共享链接库
[root@redhat cyrus-sasl-2.1.21]# mv /usr/lib/sasl2
/usr/lib/sasl2.OFF |
3:启动及加入到自动运行队列
[root@redhat cyrus-sasl-2.1.21]# echo
"/usr/local/sasl2/sbin/saslauthd -a shadow
pam">>/etc/rc.local [root@redhat cyrus-sasl-2.1.21]# /usr/local/sasl2/sbin/saslauthd -a shadow pam |
4:新建配置文件
[root@redhat cyrus-sasl-2.1.21]# vi
/usr/local/lib/sasl2/smtpd.conf pwcheck_method:authdaemond mech_list:PLAIN LOGIN log_level:3 authdaemond_path:/usr/local/authlib/var/spool/authdaemon/socket |