脚本在Linode CentOS 5.6 32位中通过测试,注意将hostname改成你本机名
php和apache使用源码安装,版本:php-5.3.15.tar.gz,httpd-2.2.22.tar.gz,其他使用EMOS_1.5_i386.iso中rpm包。
使用方法:
wget //linuxeye.com/wp-content/uploads/extmail.zip unzip -qo extmail.zip cd extmail sh extmail_install.sh
文章参考:http://wiki.extmail.org,本文没有安装邮件病毒检查和垃圾邮件过滤
以下是脚本内容:
#1. 安装完系统后,执行初始化脚本地址://linuxeye.com/wp-content/uploads/init.sh,开启iptables 25、110端口,设置hostname wget //linuxeye.com/wp-content/uploads/init.sh #初始化脚本 sh init.sh sed -i 's@COMMIT@-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT n-A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT nCOMMIT@g' /etc/sysconfig/iptables service iptables restart if [ -z $(grep HOSTNAME /etc/sysconfig/network) ];then echo 'HOSTNAME=mail.linuxeye.com' >> /etc/sysconfig/network; else sed -i 's@HOSTNAME.*@HOSTNAME=mail.linuxeye.com@g' /etc/sysconfig/network; fi hostname mail.linuxeye.com source /etc/profile #2. 配置yun echo '# EMOS-Base.repo [EMOS-base] name=EMOS-Base baseurl=http://mirror.extmail.org/yum/emos/1.5/os/$basearch/ gpgcheck=0 priority=0 protect=0 [EMOS-update] name=EMOS-Updates baseurl=http://mirror.extmail.org/yum/emos/1.5/updates/$basearch/ gpgcheck=0 priority=0 protect=0' > /etc/yum.repos.d/EMOS-Base.repo yum clean all #3. 源码安装apache、php,rpm安装mysql-server cd /root wget //linuxeye.com/wp-content/uploads/lamp.zip #lamp源码安装脚本,不用安装mysql unzip lamp.zip cd lamp yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel nss_ldap openldap openldap-devel openldap-clients openldap-servers libxslt-devel libevent-devel ntp libtool-ltdl bison libtool vim-enhanced gd gd-devel if [ -e "/root/lamp" ];then echo -e "e[0;34m start installe[0m" cd /root/lamp/apache else echo -e "e[1;31mPlease send lamp directory moved to /roote[0m" exit 1 fi tar xzf pcre-8.31.tar.gz cd pcre-8.31 ./configure make && make install cd ../ useradd -M -s /sbin/nologin www tar xzf httpd-2.2.22.tar.gz cd httpd-2.2.22 ./configure --prefix=/usr/local/apache --enable-so --enable-deflate=shared --enable-ssl=shared --enable-expires=shared --enable-headers=shared --enable-rewrite=shared --enable-static-support --with-included-apr --with-mpm=worker make && make install /bin/cp /usr/local/apache/bin/apachectl /etc/init.d/httpd sed -i '2a # chkconfig: - 85 15' /etc/init.d/httpd sed -i '3a # description: Apache is a World Wide Web server. It is used to serve' /etc/init.d/httpd chmod 755 /etc/init.d/httpd chkconfig --add httpd chkconfig httpd on cd .. yum -y install mysql-server #rpm安装mysql service mysqld restart mysql -e "grant all privileges on *.* to root@'%' identified by 'admin' with grant option;" mysql -e "flush privileges;" mysql -e "delete from mysql.user where password='';" service mysqld restart #安装php cd /root/lamp/php tar xzf libiconv-1.14.tar.gz cd libiconv-1.14 ./configure --prefix=/usr/local make && make install cd ../ tar xzf libmcrypt-2.5.8.tar.gz cd libmcrypt-2.5.8 ./configure make && make install /sbin/ldconfig cd libltdl/ ./configure --enable-ltdl-install make && make install cd ../../ tar xzf mhash-0.9.9.9.tar.gz cd mhash-0.9.9.9 ./configure make && make install cd ../ if [ -e "/lib64" ];then ln -s /usr/local/lib/libmcrypt.la /usr/lib64/libmcrypt.la ln -s /usr/local/lib/libmcrypt.so /usr/lib64/libmcrypt.so ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib64/libmcrypt.so.4 ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib64/libmcrypt.so.4.4.8 ln -s /usr/local/lib/libmhash.a /usr/lib64/libmhash.a ln -s /usr/local/lib/libmhash.la /usr/lib64/libmhash.la ln -s /usr/local/lib/libmhash.so /usr/lib64/libmhash.so ln -s /usr/local/lib/libmhash.so.2 /usr/lib64/libmhash.so.2 ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib64/libmhash.so.2.0.1 ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config else ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4 ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8 ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2 ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1 ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config fi echo '/usr/lib/mysql/' >> /etc/ld.so.conf ldconfig yum -y install mysql-devel #不然安装php找不到mysql头文件 tar xzf mcrypt-2.6.8.tar.gz cd mcrypt-2.6.8 /sbin/ldconfig ./configure make && make install cd ../ tar xzf php-5.3.15.tar.gz cd php-5.3.15 ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --with-mysql --with-mysqli --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-ftp --enable-zip --enable-soap --disable-debug make ZEND_EXTRA_LIBS='-liconv' && make install cp php.ini-production /usr/local/php/lib/php.ini cd ../ tar xzf memcache-2.2.6.tgz cd memcache-2.2.6 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make && make install cd ../ tar xjf eaccelerator-0.9.6.1.tar.bz2 cd eaccelerator-0.9.6.1 /usr/local/php/bin/phpize ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config make && make install cd ../ tar xzf PDO_MYSQL-1.0.2.tgz cd PDO_MYSQL-1.0.2 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql make && make install cd ../ tar xzf ImageMagick-6.6.7-10.tar.gz cd ImageMagick-6.6.7-10 ./configure make && make install cd ../ tar xzf imagick-2.3.0.tgz cd imagick-2.3.0 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make && make install cd ../ #修改php.ini mkdir /tmp/eaccelerator sed -i 's@expose_php = On@expose_php = Off@g' /usr/local/php/lib/php.ini #隐藏php版本信息 sed -i '808a extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20090626/"' /usr/local/php/lib/php.ini sed -i '809a extension = "memcache.so"' /usr/local/php/lib/php.ini sed -i '810a extension = "pdo_mysql.so"' /usr/local/php/lib/php.ini sed -i '811a extension = "imagick.so"' /usr/local/php/lib/php.ini sed -i '134a output_buffering = On' /usr/local/php/lib/php.ini sed -i '847a cgi.fix_pathinfo=0' /usr/local/php/lib/php.ini sed -i 's@;date.timezone [email protected] = Asia/Shanghai@g' /usr/local/php/lib/php.ini echo '[eaccelerator] zend_extension="/usr/local/php/lib/php/extensions/no-debug-zts-20090626/eaccelerator.so" eaccelerator.shm_size="64" eaccelerator.cache_dir="/tmp/eaccelerator" eaccelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="0" eaccelerator.shm_prune_period="0" eaccelerator.shm_only="0" eaccelerator.compress="0" eaccelerator.compress_level="9" eaccelerator.keys = "disk_only" eaccelerator.sessions = "disk_only" eaccelerator.content = "disk_only"' >> /usr/local/php/lib/php.ini #修改apache配置文件 if [ "$(hostname -i)" == "127.0.0.1" ];then echo "OK" else sed -i "s/127.0.0.1.*$/127.0.0.1 `hostname` localhost.localdomain localhost/g" /etc/hosts fi sed -i 's/User daemon/User www/g' /usr/local/apache/conf/httpd.conf sed -i 's/Group daemon/Group www/g' /usr/local/apache/conf/httpd.conf sed -i 's/#ServerName www.example.com:80/ServerName 127.0.0.1:80/g' /usr/local/apache/conf/httpd.conf sed -i '288a AddType application/x-httpd-php .php .phtml' /usr/local/apache/conf/httpd.conf sed -i '289a AddType application/x-httpd-php-source .phps' /usr/local/apache/conf/httpd.conf sed -i 's@DirectoryIndex index.html@DirectoryIndex index.html index.php@g' /usr/local/apache/conf/httpd.conf cat >> /usr/local/apache/conf/httpd.conf <<EOF #隐藏apache版本信息 ServerTokens ProductOnly ServerSignature Off EOF #3. 安装配置postfix yum -y install postfix #安装前删除sendmail,初始化脚本中已经删除 postconf -n > /etc/postfix/main.cf #编辑main.cf echo '# hostname mynetworks = 127.0.0.1 myhostname = mail.linuxeye.com mydestination = $mynetworks $myhostname # banner mail_name = Postfix smtpd_banner = $myhostname ESMTP $mail_name # response immediately smtpd_error_sleep_time = 0s # Message and return code control message_size_limit = 15360000 mailbox_size_limit = 1024000000 show_user_unknown_table_name = no alias_maps = hash:/etc/aliases # Queue lifetime control bounce_queue_lifetime = 1d maximal_queue_lifetime = 1d' >> /etc/postfix/main.cf chkconfig postfix on #postfix开机自启 #4. 安装Courier-imap yum -y install courier-imap sed -i 's/^IMAPDSTART=.*/IMAPDSTART=NO/g' /usr/lib/courier-imap/etc/imapd sed -i 's/^IMAPDSSLSTART=.*/IMAPDSSLSTART=NO/g' /usr/lib/courier-imap/etc/imapd-ssl service courier-imap start #5. 安装配置courier-authlib yum -y install courier-authlib yum -y install courier-authlib-mysql #编辑 /etc/authlib/authmysqlrc cat > /etc/authlib/authmysqlrc << EOF MYSQL_SERVER localhost MYSQL_USERNAME extmail MYSQL_PASSWORD extmail MYSQL_SOCKET /var/lib/mysql/mysql.sock MYSQL_PORT 3306 MYSQL_OPT 0 MYSQL_DATABASE extmail MYSQL_USER_TABLE mailbox MYSQL_CRYPT_PWFIELD password MYSQL_UID_FIELD uidnumber MYSQL_GID_FIELD gidnumber MYSQL_LOGIN_FIELD username MYSQL_HOME_FIELD homedir MYSQL_NAME_FIELD name MYSQL_MAILDIR_FIELD maildir MYSQL_QUOTA_FIELD quota MYSQL_SELECT_CLAUSE SELECT username,password,"",uidnumber,gidnumber,CONCAT('/home/domains/',homedir),CONCAT('/home/domains/',maildir),quota,name FROM mailbox WHERE username = '$(local_part)@$(domain)' EOF #修改authdaemonrc文件 sed -i 's/authmodulelist=.*$/authmodulelist="authmysql"/g' /etc/authlib/authdaemonrc sed -i 's/authmodulelistorig=.*$/authmodulelistorig="authmysql"/g' /etc/authlib/authdaemonrc #修改authdaemon socket目录权限,如果该目录权限不正确修改,maildrop及postfix等将无法正确获取用户的信息及密码认证 chmod 755 /var/spool/authdaemon/ service courier-authlib start #6. 安装cyrus-sasl rpm -e cyrus-sasl --nodeps yum -y install cyrus-sasl cat >> /etc/postfix/main.cf << EOF # smtpd related config smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_non_fqdn_hostname,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unauth_destination,reject_unauth_pipelining,reject_invalid_hostname # SMTP sender login matching config smtpd_sender_restrictions = permit_mynetworks,reject_sender_login_mismatch,reject_authenticated_sender_login_mismatch,reject_unauthenticated_sender_login_mismatch smtpd_sender_login_maps = mysql:/etc/postfix/mysql_virtual_sender_maps.cf,mysql:/etc/postfix/mysql_virtual_alias_maps.cf # SMTP AUTH config here broken_sasl_auth_clients = yes smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_sasl_security_options = noanonymous EOF cat > /usr/lib/sasl2/smtpd.conf << EOF pwcheck_method: authdaemond log_level: 3 mech_list: PLAIN LOGIN authdaemond_path:/var/spool/authdaemon/socket EOF #7. 安装配置maildrop yum -y install maildrop #配置master.cf 为了使Postfix支持Maildrop,必须修改/etc/postfix/master.cf文件,flags前面有"两个空格" echo 'maildrop unix - n n - - pipe flags=DRhu user=vuser argv=maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension} {nexthop}' >> /etc/postfix/master.cf #测试maildrop对authlib支持,必须出现Courier Authentication Library extension enabled。 maildrop -v #8. exmail依赖关系解决和extman验证码图片不显示 cd /root wget //linuxeye.com/wp-content/uploads/extmail.zip unzip -qo extmail.zip cd extmail #wget http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.021.tar.gz tar xzf DBD-mysql-4.021.tar.gz cd DBD-mysql-4.021 perl Makefile.PL make && make install cd ../ #wget http://search.cpan.org/CPAN/authors/id/M/MH/MHARNISCH/Unix-Syslog-1.1.tar.gz tar xzf Unix-Syslog-1.1.tar.gz cd Unix-Syslog-1.1 perl Makefile.PL make && make install cd ../ #extman验证码图片不显示 #wget http://packages.sw.be/perl-GD/perl-GD-2.43-1.el5.rf.i386.rpm rpm -ivh perl-GD-2.43-1.el5.rf.i386.rpm #9. 安装配置extmail、extman tar xzf extman-1.1.tar.gz tar xzf extmail-1.2.tar.gz mkdir -p /var/www/extsuite mv extmail-1.2 /var/www/extsuite/extmail cp /var/www/extsuite/extmail/webmail.cf.default /var/www/extsuite/extmail/webmail.cf sed -i 's@^SYS_MYSQL_USER.*@SYS_MYSQL_USER = extmail@g' /var/www/extsuite/extmail/webmail.cf sed -i 's@^SYS_MYSQL_PASS.*@SYS_MYSQL_PASS = extmail@g' /var/www/extsuite/extmail/webmail.cf #sed -i 's/^SYS_G_ABOOK_FILE_CHARSET.*/SYS_G_ABOOK_FILE_CHARSET = gb2312/g' /var/www/extsuite/extmail/webmail.cf #sed -i 's/^SYS_USER_LANG.*/SYS_USER_LANG = zh_CN/g' /var/www/extsuite/extmail/webmail.cf mv extman-1.1 /var/www/extsuite/extman cp /var/www/extsuite/extman/webman.cf.default /var/www/extsuite/extman/webman.cf sed -i 's@^SYS_MYSQL_USER.*@SYS_MYSQL_USER = extmail@g' /var/www/extsuite/extman/webman.cf sed -i 's@^SYS_MYSQL_PASS.*@SYS_MYSQL_PASS = extmail@g' /var/www/extsuite/extman/webman.cf #sed -i 's/^SYS_G_ABOOK_FILE_CHARSET.*/SYS_G_ABOOK_FILE_CHARSET = gb2312/g' /var/www/extsuite/extman/webman.cf #sed -i 's/^# SYS_LANG.*/SYS_LANG = zh_CN/g' /var/www/extsuite/extman/webman.cf cp /var/www/extsuite/extman/docs/mysql_virtua* /etc/postfix/ #虚拟域和虚拟用户的配置文件 sed -i 's/TYPE=MyISAM//g' /var/www/extsuite/extman/docs/extmail.sql mysql -uroot -padmin < /var/www/extsuite/extman/docs/extmail.sql sed -i 's/extmail.org/linuxeye.com/g' /var/www/extsuite/extman/docs/init.sql mysql -uroot -padmin < /var/www/extsuite/extman/docs/init.sql mysql -uroot -padmin -e "grant all privileges on extmail.* to extmail@localhost identified by 'extmail' with grant option;" mysql -uroot -padmin -e "delete from mysql.user where password='';" mkdir /tmp/extman chown -R vuser:vgroup /tmp/extman chown -R vuser.vgroup /var/www cat >> /etc/postfix/main.cf << EOF # extmail config here virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_transport = maildrop: EOF newaliases service postfix restart #10. 配置apache sed -i 's@/usr/local/apache/htdocs@/var/www@g' /usr/local/apache/conf/httpd.conf sed -i 's/User www/User vuser/g' /usr/local/apache/conf/httpd.conf sed -i 's/Group www/Group vgroup/g' /usr/local/apache/conf/httpd.conf echo 'Include conf/extra/httpd-vhosts.conf' >> /usr/local/apache/conf/httpd.conf cat > /usr/local/apache/conf/extra/httpd-vhosts.conf << EOF <VirtualHost *:80> ServerName mail.linuxeye.com DocumentRoot "/var/www/extsuite/extmail/html" ErrorLog "/usr/local/apache/logs/mail_error.log" CustomLog "/usr/local/apache/logs/mail_access.log" common ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi <Directory /var/www/extsuite/extman/cgi> Options +ExecCGI AddHandler cgi-script .cgi </Directory> Alias /extmail /var/www/extsuite/extmail/html <Directory /var/www/extsuite/extmail/html> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> ScriptAlias /extman/cgi /var/www/extsuite/extman/cgi Alias /extman /var/www/extsuite/extman/html </VirtualHost> EOF chown -R vuser.vgroup /tmp/eaccelerator/ service httpd restart