免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1859 | 回复: 0
打印 上一主题 下一主题

[Web] 从代码安装完整的http+ftp+mail的linux server [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-05-24 01:43 |只看该作者 |倒序浏览
菜鸟花了大约两个月装了一台linux server,包括kernel/apache2/PHP(GD)/MYSQL/qmail(smtp用户认证)/pureftp等,现在贴出来让大家分享,有问题请到http://www.garhee.com/bbs/的linux论坛提问(转贴别删)

1、安装linux和重编译linux内核

        先到redhat.com下载linux 7.3, 和kernel.org下载需要的linux kernel版本
       
        为什么选择7.3?因为简单,集成的东西少,我只需要http ftp mysql mail,而且为了发扬diy精神,我全部软件都从源代码安装。
       
        安装linux时,注意不要把不要的东西安装
       
        到kernel.org下载你需要的kernel代码包,我下载的是2.4.20  25在linux7.3上我没有编译通过,不知哪位大侠编译通过的,劳驾到我的论坛http://www.garhee.com/bbs/告诉我一声,谢谢!
       
        进入到linux kernel代码的目录,
        更改Makefile文件中的EXTRAVERSION = minikernel,并且把安装时装进去的linux kernel0的源代码的config文件拷贝过来用,在redhat最好使用redhat自己提供的config文件
        执行下面的命令:
        make menuconfig
        make dep
        make bzImage
        make modules
        make modules_install
       
        在make menuconfig时,可以去掉这些没必要的东西:
        Plug and Play configuration
        Telephony Support
        IEEE 1394 (FireWire) support (EXPERIMENTAL)
        Amateur Radio support
        IrDA (infrared) support
        ISDN subsystem
        Multimedia devices
        Sound
        USB support
        Bluetooth support
       
        其他的子选项请读者自己斟酌去掉以缩小内核大小,还有记得另存为自己知道的config文件
       
        由于我用的是scsi(aix79xx)硬盘,所以到http://adaptec.com下载了最新版本的驱动aic79xx-2.0.2-source.tar.gz,覆盖了drivers/scsi/aic79xx目录,再编译。
       
        这样,硬盘哗啦哗啦的转了一大段时间后,终于编译完成了,该执行如下步骤:
        cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.20minikernel
        cp vmlinux /boot/vmlinux-2.4.20minikernel
        cp System.map /boot/System.map-2.4.20minikernel
       
        cd /lib/modules
        mkinitrd /boot/initrd-2.4.20minikernel.img  2.4.20minikernel
       
        这时候编译好的内核就拷贝到/boot目录下了,更改/boot/grub/grub.conf或/etc/lilo.conf,增加一条启动项目指向编译好的新内核。lilo启动的话还有执行/sbin/lilo -v。重启后就可以选择新内核了。
       
        另外,一定要ntsysv禁用掉telnet,用ssh
       
        参考文章:《浅谈Linux安全》 http://www.phpx.com/index.php?itemid=227
                  《linux下SSH配合SecureCRT的密匙完美使用方法》 http://www.5ilinux.com/ssh01.html

2、安装apache2

        到apache.org下载最新的apache2版本,解压并执行:
        ./configure --prefix=/server/apache2 --enable-so \
        --enable-mods-shared=most
        make
        make install
       
        参考文章:《apache的静态/动态编译在apache+php+mysql的应用》http://www.5ilinux.com/apache01.html

3、安装mysql

        到mysql.com下载,编译命令:
        ./configure --prefix=/server/mysql
        make
        make install
        在/etc/ld.so.conf增加一行:
        /server/mysql/lib/mysql
        执行ldconfig

4、安装php+gd+zlib+freetype2+mmcache

        freetype2
        到http://www.freetype.org/下载最新版本的freetype2,编译命令:
        ./configure --prefix=/server/freetype2
        make
        make install
       
        zlib
        到http://www.zlib.org/或http://www.gzip.org/zlib/下载最新版本的zlib,编译命令:
        ./configure --prefix=/server/zlib
        make
        make install

        gd
        到http://www.boutell.com/gd/下载最新版本
        ./configure  --prefix=/server/gdlib \
                --with-png=/usr \
                --with-jpeg=/usr \
                --with-freetype=/server/freetype
        make
        make install
        在/etc/ld.so.conf增加一行:
        /server/gdlib/lib
        执行ldconfig

        php
        到php.net下载php4,我安装时php5用不了mmcache,新版本不知出来了没有
        ./configure --prefix=/server/php \
                --with-config-file-path=/server/php/etc \
                --with-mysql=/server/mysql \
                --with-apxs2=/server/apache2/bin/apxs \
                --with-gd=/server/gdlib \
                --enable-gd-native-ttf \
                --enable-gd-imgstrttf \
                --with-jpeg-dir=/usr/lib \
                --with-png-dir=/usr/lib \
                --with-zlib-dir=/server/zlib \
                --with-freetype-dir=/server/freetype2

        mmcache
        到http://turck-mmcache.sourceforge.net下载
        export PHP_PREFIX="/server/php"
         $PHP_PREFIX/bin/phpize
        ./configure --enable-mmcache=shared --with-php-config=$PHP_PREFIX/bin/php-config
        make
        make install
        在php.ini文件Dynamic Extensions中增加:
          extension="/server/php/lib/php/extensions/mmcache.so"
          mmcache.shm_size="16"
          mmcache.cache_dir="/tmp/mmcache"
          mmcache.enable="1"
          mmcache.optimizer="1"
          mmcache.check_mtime="1"
          mmcache.debug="0"
          mmcache.filter=""
          mmcache.shm_max="0"
          mmcache.shm_ttl="0"
          mmcache.shm_prune_period="0"
          mmcache.shm_only="0"
          mmcache.compress="1"
        建目录:
        mkdir /tmp/mmcache
        chmod 0777 /tmp/mmcache

参考文章:《PHP 利器一箩筐》http://www.phpx.com/index.php?itemid=237

5、安装qmail
        到http://www.qmail.org/下载qmail最新版本和ucspi-tcp daemontools
        到http://www.inter7.com/下载vpopmail qmailadmin sqwebmail最新版本
       
        qmail
        安装文档qmail        http://www.lifewithqmail.org/lwq.html#installation-issues
                ucspi        http://cr.yp.to/ucspi-tcp.html
                daemontools  http://cr.yp.to/daemontools.html

        安装ucspi-tcp:
        make
        make setup check

        安装deamontools:
        package/install
       
        mkdir /var/qmail
        groupadd nofiles
        useradd qmaild -g nofiles -d /var/qmail -s /bin/false
        useradd alias -g nofiles -d /var/qmail/alias -s /bin/false
        useradd qmaill -g nofiles -d /var/qmail -s /bin/false
        useradd qmailp -g nofiles -d /var/qmail -s /bin/false
        groupadd qmail
        useradd qmailq -g qmail -d /var/qmail -s /bin/false
        useradd qmailr -g qmail -d /var/qmail -s /bin/false
        useradd qmails -g qmail -d /var/qmail -s /bin/false

        make setup check

        生成文件/var/qmail/rc
                #!/bin/sh
                # Using stdout for logging
                # Using control/defaultdelivery from qmail-local to deliver message by default
                exec env - PATH="/var/qmail/binPATH" \
                qmail-start " cat /var/qmail/control/defaultdelivery "

        chmod 755 /var/qmail/rc
        mkdir /var/log/qmail

        echo ./Mailbox >;/var/qmail/control/defaultdelivery

        生成文件/var/qmail/bin/qmailctl
                #!/bin/sh
               
                # description: the qmail MTA
               
                PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
                export PATH
               
                QMAILDUID=`id -u qmaild`
                NOFILESGID=`id -g qmaild`
               
                case "$1" in
                  start)
                    echo "Starting qmail"
                    if svok /service/qmail-send ; then
                      svc -u /service/qmail-send /service/qmail-send/log
                    else
                      echo "qmail-send supervise not running"
                    fi
                    if svok /service/qmail-smtpd ; then
                      svc -u /service/qmail-smtpd /service/qmail-smtpd/log
                    else
                      echo "qmail-smtpd supervise not running"
                    fi
                    if svok /service/qmail-pop3d ; then
                      svc -u /service/qmail-pop3d /service/qmail-pop3d/log
                    else
                      echo qmail-pop3d supervise not running
                    fi
                    if [ -d /var/lock/subsys ]; then
                      touch /var/lock/subsys/qmail
                    fi
                    ;;
                  stop)
                    echo "Stopping qmail..."
                    echo "  qmail-smtpd"
                    svc -d /service/qmail-smtpd /service/qmail-smtpd/log
                    echo "  qmail-send"
                    svc -d /service/qmail-send /service/qmail-send/log
                    echo "  qmail-pop3d"
                    svc -d /service/qmail-pop3d /service/qmail-pop3d/log
                    if [ -f /var/lock/subsys/qmail ]; then
                      rm /var/lock/subsys/qmail
                    fi
                    ;;
                  stat)
                    svstat /service/qmail-send
                    svstat /service/qmail-send/log
                    svstat /service/qmail-smtpd
                    svstat /service/qmail-smtpd/log
                    svstat /service/qmail-pop3d
                    svstat /service/qmail-pop3d/log
                    qmail-qstat
                    ;;
                  doqueue|alrm|flush)
                    echo "Flushing timeout table and sending ALRM signal to qmail-send."
                    /var/qmail/bin/qmail-tcpok
                    svc -a /service/qmail-send
                    ;;
                  queue)
                    qmail-qstat
                    qmail-qread
                    ;;
                  reload|hup)
                    echo "Sending HUP signal to qmail-send."
                    svc -h /service/qmail-send
                    ;;
                  pause)
                    echo "ausing qmail-send"
                    svc -p /service/qmail-send
                    echo "ausing qmail-smtpd"
                    svc -p /service/qmail-smtpd
                    echo "ausing qmail-pop3d"
                    svc -p /service/qmail-pop3d
                    ;;
                  cont)
                    echo "Continuing qmail-send"
                    svc -c /service/qmail-send
                    echo "Continuing qmail-smtpd"
                    svc -c /service/qmail-smtpd
                    echo "Continuing qmail-pop3d"
                    svc -c /service/qmail-pop3d
                    ;;
                  restart)
                    echo "Restarting qmail:"
                    echo "* Stopping qmail-smtpd."
                    svc -d /service/qmail-smtpd /service/qmail-smtpd/log
                    echo "* Sending qmail-send SIGTERM and restarting."
                    svc -t /service/qmail-send /service/qmail-send/log
                    echo "* Restarting qmail-smtpd."
                    svc -u /service/qmail-smtpd /service/qmail-smtpd/log
                    echo "* Restarting qmail-pop3d."
                    svc -t /service/qmail-pop3d /service/qmail-pop3d/log
                    ;;
                  cdb)
                    tcprules /etc/qmail/tcp.smtp.cdb /etc/qmail/tcp.smtp.tmp < /etc/qmail/tcp.smtp
                    chmod 644 /etc/qmail/tcp.smtp.cdb
                    echo "Reloaded /etc/qmail/tcp.smtp."
                    tcprules /etc/qmail/tcp.pop3.cdb /etc/qmail/tcp.pop3.tmp < /etc/qmail/tcp.pop3
                    chmod 644 /etc/qmail/tcp.smtp.cdb
                    echo "Reloaded /etc/qmail/tcp.pop3."
                    ;;
                  help)
                    cat <<HELP
                   stop -- stops mail service (smtp connections refused, nothing goes out)
                  start -- starts mail service (smtp connection accepted, mail can go out)
                  pause -- temporarily stops mail service (connections accepted, nothing leaves)
                   cont -- continues paused mail service
                   stat -- displays status of mail service
                    cdb -- rebuild the tcpserver cdb file for smtp
                restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it
                doqueue -- schedules queued messages for immediate delivery
                 reload -- sends qmail-send HUP, rereading locals and virtualdomains
                  queue -- shows status of queue
                   alrm -- same as doqueue
                  flush -- same as doqueue
                    hup -- same as reload
                HELP
                    ;;
                  *)
                    echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}"
                    exit 1
                    ;;
                esac
               
                exit 0

        mkdir -p /var/qmail/supervise/qmail-send/log
        mkdir -p /var/qmail/supervise/qmail-smtpd/log

        生成/var/qmail/supervise/qmail-send/run
                #!/bin/sh
                exec /var/qmail/rc

        生成/var/qmail/supervise/qmail-send/log/run
                #!/bin/sh
                exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail

        生成/var/qmail/supervise/qmail-smtpd/run
                #!/bin/sh
               
                QMAILDUID=`id -u vpopmail`
                NOFILESGID=`id -g vpopmail`
                MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
                LOCAL=`head -1 /var/qmail/control/me`
               
                if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
                    echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
                    echo /var/qmail/supervise/qmail-smtpd/run
                    exit 1
                fi
               
                if [ ! -f /var/qmail/control/rcpthosts ]; then
                    echo "No /var/qmail/control/rcpthosts!"
                    echo "Refusing to start SMTP listener because it'll create an open relay"
                    exit 1
                fi
               
                exec /usr/local/bin/softlimit -m 5000000 \
                        /usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/qmail/tcp.smtp.cdb -c "$MAXSMTPD" \
                                -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>;&1
               

        生成/var/qmail/supervise/qmail-smtpd/log/run
                #!/bin/sh
                exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd

        生成/var/qmail/supervise/qmail-pop3d/run

                #!/bin/sh
               
                QMAILDUID=`id -u vpopmail`
                NOFILESGID=`id -g vpopmail`
                LOCAL=`head -1 /var/qmail/control/me`
               
                if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$LOCAL" ]; then
                    echo QMAILDUID, NOFILESGID, or LOCAL is unset in
                    echo /var/qmail/supervise/qmail-pop3d/run
                    exit 1
                fi
               
                exec /usr/local/bin/softlimit -m 5000000 \
                    /usr/local/bin/tcpserver -R -H -x /etc/qmail/tcp.pop3.cdb \
                        -u "$QMAILDUID" -g "$NOFILESGID" 0 110 /var/qmail/bin/qmail-popup \
                        "$LOCAL" /server/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir  2>;&1

        生成/var/qmail/supervise/qmail-pop3d/log/run
                #!/bin/sh
                exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t \
                    /var/log/qmail/pop3d

        echo 20 >; /var/qmail/control/concurrencyincoming
        chmod 644 /var/qmail/control/concurrencyincoming

        chmod 755 /var/qmail/supervise/qmail-send/run
        chmod 755 /var/qmail/supervise/qmail-send/log/run
        chmod 755 /var/qmail/supervise/qmail-smtpd/run
        chmod 755 /var/qmail/supervise/qmail-smtpd/log/run

        mkdir -p /var/log/qmail/smtpd
        chown qmaill /var/log/qmail /var/log/qmail/smtpd
        mkdir -p /var/log/qmail/pop3d
        chown qmaill /var/log/qmail /var/log/qmail/pop3d

        mkdir  /etc/qmail
        echo '127.:allow,RELAYCLIENT=""' >;>;/etc/qmail/tcp.smtp
        echo ':allow' >;>;/etc/qmail/tcp.pop3
        qmailctl cdb

        vpopmail
        groupadd -g 89 vchkpw
        useradd -g vchkpw -u 89 vpopmail

        用/server/mysql/bin/mysql登录进mysql,建vpopmail数据库
                CREATE DATABASE vpopmail;
                GRANT select,insert,update,delete,create,drop ON vpopmail.*
                TO vpopmailuser@localhost IDENTIFIED BY 'vpoppasswd';

        ./configure   \
                --prefix=/server/vpopmail \
                --enable-qmaildir=/var/qmail \
                --enable-vpopuser=vpopmail \
                --enable-vpopgroup=vchkpw \
                --enable-roaming-users \
                --enable-tcprules-prog=/usr/local/bin/tcprules \
                --enable-tcpserver-file=/etc/qmail/tcp.smtp \
                --enable-relay-clear-minutes=20 \
                --enable-auth-logging \
                --enable-mysql-logging \
                --enable-clear-passwd  \
                --disable-sqwebmail-pass \
                --enable-log-name=vpopmail \
                --enable-incdir=/server/mysql/include/mysql \
                --enable-libdir=/server/mysql/lib/mysql \
                --enable-libs=mysqlclient \
                --enable-auth-module=mysql \
                --enable-ip-alias-domains \
                --enable-mysql-limits \
                --enable-many-domains \
                --disable-passwd \
                --enable-mysql-limits

        make
        make install-strip

        echo "localhost|0|vpopmailuser|vpoppasswd|vpopmail" >; /server/vpopmail/etc/vpopmail.mysql
        chown vpopmail.vchkpw /server/vpopmail/etc/vpopmail.mysql
        chmod 640 ~vpopmail/etc/vpopmail.mysql

        echo  'mydomain.com' >;/var/qmail/control/rcpthosts
        /var/qmail/bin/vadddomain mydomain.com
       
        qmailadmin
        ./configure --enable-cgibindir=/server/apache2/cgi-bin \
                --enable-htmldir=/server/apache2/htdocs
        make
        make install

        sqwebmail
        ./configure \
               --prefix=/server/sqwebmail \
               --with-cachedir=/server/sqwebmail/cachetmp \
               --enable-imagedir=/server/apache2/htdocs/webmail \
               --enable-cgibindir=/server/apache2/cgi-bin \
               --enable-softtimeout=1200 \
               --enable-hardtimeout=1800 \
               --with-fcgi
        make
        make install

        ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /var/qmail/supervise/qmail-pop3d /service
       
        启动apache,就可以从qmailadmin用 postmaster@mydomain.com 来登录管理mydomain.com。增加一个email地址test@mydomain.com后,就可以用outlook和test@mydomain.com用户进行收发email了。

其他安装文章:《基于qmail的完整WEBMAIL解决方案安装详解》http://www.phpx.com/index.php?itemid=130

6、smtpd用户认证功能
        http://www.garhee.com/bbs/下载qmail-smtpd.c,这个是从netqmail-1.05版本更改过来的,如果要改新版本,请对照更改
        覆盖1.05的qmail-smtpd.c,重新编译qmail

        /var/qmail/bin/qmailctl stop
        更改/var/qmail/supervise/qmail-smtpd/run中的
                exec /usr/local/bin/softlimit -m 5000000 \
                        /usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/qmail/tcp.smtp.cdb -c "$MAXSMTPD" \
                                -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>;&1
        为
                exec /usr/local/bin/softlimit -m 5000000 \
                    /usr/local/bin/tcpserver -v -H -R -l "$LOCAL" -x /etc/qmail/tcp.smtp.cdb -c "$MAXSMTPD" \
                        -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd \
                             /server/vpopmail/bin/vchkpw /bin/true 2>;&1
        /var/qmail/bin/qmailctl start

7、安装pureftpd
        到http://mirrors.sunsite.dk/pure-ftpd/下载(pureftp.org给封掉了)
        http://home.9812.net/linux/article/pureftpd/下载安装配置文件
        ./configure --prefix=/server/pureftp \
                --with-boring \
                --with-throttling \
                --with-ratios \
                --with-virtualhosts \
                --with-virtualchroot \
                --with-peruserlimits \
                --with-mysql=/server/mysql \
                --with-ftpwho \
                --with-language=simplified-chinese \
                --without-inetd \
                --without-shadow \
                --with-diraliases \
                --with-sysquotas \
                --with-altlog \
                --with-quotas \
                --with-privsep
        make
        make install

        cp pureftpd-mysql.conf /server/pureftp/etc/
        cp configuration-file/pure-ftpd.conf /server/pureftp/etc/
        修改两个configure文件直到满意

        cp configuration-file/pure-config.pl /server/pureftp/bin/
        增加一行/server/pureftp/sbin/pure-ftpd到:
                -x && ($PUREFTPD=$_, last) for qw(
                        ${exec_prefix}/sbin/pure-ftpd
                        /usr/local/pure-ftpd/sbin/pure-ftpd
                        /usr/local/pureftpd/sbin/pure-ftpd
                        /usr/local/sbin/pure-ftpd
                        /usr/sbin/pure-ftpd
                        /server/pureftp/sbin/pure-ftpd
                );
       
        useradd ftp -u 1111 -g proftpgroup -s /bin/false -d /bin/null -c "pureftpd user"

        登录mysql执行sql语句:
                create database pureftp;
                GRANT ALL ON pureftp.* TO pureftp@localhost IDENTIFIED BY 'purepasswd';
                CREATE TABLE `users` (
                  `id` int(32) unsigned NOT NULL auto_increment,
                  `User` varchar(16) NOT NULL default '',
                  `Password` varchar(64) NOT NULL default '',
                  `Uid` varchar(11) NOT NULL default '-1',
                  `Gid` varchar(11) NOT NULL default '-1',
                  `Dir` varchar(12 NOT NULL default '',
                  `QuotaSize` smallint(5) NOT NULL default '0',
                  `QuotaFiles` int(11) NOT NULL default '0',
                  `ULBandwidth` smallint(5) NOT NULL default '0',
                  `DLBandwidth` smallint(5) NOT NULL default '0',
                  `ULRatio` smallint(6) NOT NULL default '0',
                  `DLRatio` smallint(6) NOT NULL default '0',
                  `comment` tinytext NOT NULL,
                  `ipaccess` varchar(15) NOT NULL default '*',
                  `status` enum('0','1') NOT NULL default '0',
                  `create_date` datetime NOT NULL default '0000-00-00 00:00:00',
                  `modify_date` datetime NOT NULL default '0000-00-00 00:00:00',
                  PRIMARY KEY  (`id`,`User`),
                  UNIQUE KEY `User` (`User`)
                ) TYPE=MyISAM AUTO_INCREMENT=5 ;
                INSERT INTO users VALUES (5, 'test', MD5('test'), '505', '505', '/tmp', 0, 0, 0, 0, 0, 0, '', '*', '1', '2003-06-26 18:04:33', '2003-06-26 18:04:33');

        启动pureftpd
        /server/pureftp/bin/pure-config.pl /server/pureftp/etc/pure-ftpd.conf
        停止pureftpd
        kill -INT `cat /var/run/pure-ftpd.pid | sed 1q`

参考文章:《Pure-FTPd + LDAP + MySQL + PGSQL + Virtual-Users + Quota How To》http://www.chinaunix.net/jh/15/102137.html


参考网站:
        中国unix技术社区 http://www.chinaunix.net/
        永远的unix       http://www.fanqiang.com/
        中国PHP联盟   http://www.phpx.com/
        张微波的linux学习笔记 http://www.5ilinux.com/
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP