一本文目的
本文旨在详述如何编译Apache,OpenSSL,ModSSL,MM,Mod_Perl,PHP,Zend,MySQL和Oracle支持及其可能遇到的问题,和一些常用的加速编译和提高工作效率的技巧。
二工作环境
RedhatLinuxOS6.x/7.x
三编译过程
1.所需的软件
MM1.1.3https://www.engelschall.com/sw/mm/
OpenSSL0.9.6dwww.openssl.org
ModSSL2.8.10_1.3.26www.modssl.org
Apache1.3.26www.apache.org
MySQL3.23.51www.mysql.com
PHP4.2.1/3.0.18www.php.net
ZendOptimizer1.3.1https://www.zend.com/store/freeware.php
Mod_Perl1.27https://perl.apache.org/dist/
Oracle8.1.7www.oracle.com
2.开始编译
a.首先编译MM(可选)
cd../mm-1.1.3
./configure--prefix=/usr/local/mm(单独的目录便于区别)
make
maketest
makeinstall
b.编译OpenSSL(http:可选https:必需)
cd../openssl-0.9.6d
./configno-threads-fPIC
make
maketest
makeinstall
注:no-threads没有多线程支持,因为Apache1.3.x不用多线程。
c.编译Mod_SSL(http:可选https:必需)
cdmod_ssl-2.8.10-1.3.26
./configure--with-apache=../apache_1.3.26
d.编译Apache
d1最大子进程限制修补(可选)
cd../apache_1.3.26
visrc/include/httpd.h
changevalue256to1024orabove
d2为后来的PHP带Oracle支持作准备(可选)
如果你要编译PHP带Oracle支持,你要修改Apache编译文件configure加下面的行LIBS=-lpthread在
forvarinCFLAGSLDFLAGSLIBSINCLUDESDEPS;do
前面,如下所示
LIBS=-lpthread
forvarinCFLAGSLDFLAGSLIBSINCLUDESDEPS;do
注:忘记了加LIBS=-lpthread,你可以
#cd/usr/src/apache_1.3.26
#makeclean
#LIBS=-lpthread./config.status
#make
#makeinstall
d3编译Apache
EAPI_MM=../mm-1.1.3SSL_BASE=../openssl-0.9.6d./configure
--prefix=/usr/local/apache_ssl--enable-module=most--enable-shared
=max--enable-module=rewrite--enable-shared=rewrite--enable-module
=proxy--enable-shared=proxy--enable-module=ssl--enable-shared=ssl
make
makecertificate(TYPE=testbydefault)
makeinstall
strip/usr/local/apache_ssl/bin/*
注:
d3.1如果你只是为了测试SSL,可用上面的命令,因为默认是为了测试。
d3.2如果你升级正在运行的SSL站点,可用makecertificateTYPE=dummy,最后拷贝已经在用的ssl.crt/server.crt和
ssl.key/server.key。
d3.3在makeinstall之前,可用命令lddsrc/httpd看有没有输出libpthread以确认前面有没有enableLIBS=-lpthread。
d3.4strip所有的apache可执行文件包括httpd以节省内存空间。
e编译MySQL
shell>groupaddmysql
shell>useradd-gmysqlmysql
shell>cd/usr/local
shell>gunzip</path/to/mysql-VERSION-OS.tar.gz|tarxvf-
shell>ln-sfull-path-to-mysql-VERSION-OSmysql
shell>cdmysql
shell>scripts/mysql_install_db
shell>chown-Rroot.
shell>chown-Rmysqldata
shell>chgrp-Rmysql.
shell>bin/safe_mysqld--user=mysql&
shutdownMySQL:cd/usr/local/mysql;bin/mysqladminshutdown
f编译PHP
./configure--with-apxs=/usr/local/apache_ssl/bin/apxs--with-mysql
=/usr/local/mysql--with-zlib--disable-debug--enable-track-vars--with-xml--with
-gdbm--enable-sysvsem--enable-sysvshm--with-openssl
=/usr/local/ssl--with-mm=/usr/local/mm--enable-ftp
如果需要Oracle支持,再加上--with-oracle=/home/oracle/oracle8--with-oci8
=/home/oracle/oracle8--enable-sigchild(假定Oraclehome目录是/home/oracle/oracle8)
make
makeinstall
cpphp.ini-dist/usr/local/apache_ssl/conf/php.ini
加下面的部分到/usr/local/apache_ssl/conf/httpd.conf
AddTypeapplication/x-httpd-php.php
AddTypeapplication/x-httpd-php-source.phps
加下面的部分到/usr/local/apache_ssl/bin/apachectl
PHPRC=/usr/local/apache_ssl/conf
exportPHPRC
LD_LIBRARY_PATH=$ORACLE_HOME/lib
exportLD_LIBRARY
上面的LD_LIBRARY部分如果不加,当你编译PHP带Oracle支持,启动Apache时你可能会得到错误信息如下libclntsh.so.8.0:notfound
如果仍然有oracle问题,可能你需要全部的Oracle环境变量放入apachectl中,如下例:
./etc/profile
TWO_TASK=asdbs;exportTWO_TASK
ORACLE_HOME=/home/oracle/oracle8;exportORACLE_HOME
ORACLE_BASE=/home/oracle;exportORACLE_BASE
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:
$ORACLE_HOME/lib:/usr/local/lib:/usr/lib;exportLD_LIBRARY_PATH
ulimitunlimited
ulimit-n32768
umask002
PATH=$ORACLE_HOME/bin:/usr/local/bin:/usr/bin;exportPATH
g安装ZendOptimizer
#cd/usr/local/apache_ssl/libexec
#cp/path/to/ZendOptimizer-1.1.0-PHP_4.0.5-Linux_glibc21-i386/ZendOptimizer.so.
然后加下面的部分到/usr/local/apache_ssl/conf/php.ini
zend_optimizer.optimization_level=15
zend_extension="/usr/local/apache/libexec/ZendOptimizer.so"
h编译Mod_Perl
#cdmod_perl-1.27
#perlMakefile.PLUSE_APXS=1WITH_APXS
=/usr/local/apache_ssl/bin/apxsEVERYTHING=1
#make
#maketest
#makeinstall
#mkdir/usr/local/apache_ssl/perl
Addthefollowingsinglelineto/usr/local/apache_ssl/conf/httpd.conf
Includeconf/mod_perl.conf
thecontentofmod_perl.confisasfollows:
-------------------------------
#Typicalforplaincgiscripts:
ScriptAlias/cgi-bin//usr/local/apache_ssl/perl/
#TypicalforApache::Registryscripts:
Alias/perl//usr/local/apache_ssl/perl/
#TypicalforApache::PerlRunscripts:
Alias/cgi-perl//usr/local/apache_ssl/perl/
PerlModuleApache::Registry
<Location/perl>
SetHandlerperl-script
PerlHandlerApache::Registry
Options+ExecCGI
PerlSendHeaderOn
allowfromall
</Location>
-------------------------------
注:常见的perlscript问题。
HowtowritePerlscript?
a.standardperlscript
#!/usr/bin/perl
print"Content-Type:text/html\n\n";
b.CGIperlscript
usestrict;
useCGIqw(:all);
printheader;
b.print"Location:URL";andprintheader;problem?
当你要用print"Location:URL"功能时,你不能有任何printheader;语句在print"Location:URL"之前。
usestrict;
useCGIqw(:all);
print"Location:https://www.linuxforum.net";
printheader;
print"Thisisatestinghtmlpage\n\n";
否则象下面这样print"Location:https://www.linuxforum.net";不将工作。
usestrict;
useCGIqw(:all);
printheader;
print"Location:https://www.linuxforum.net";
i修改Apache配置文件中的模块位置
当你编译SSL后再编译PHP和Mod_Perl时,PHP和Mod_Perl模块包含在IfdefineSSL中,也就是只有启动SSL时才会载入PHP和Mod_Perl,让我们修改它如下:
LoadModulephp4_modulelibexec/libphp4.so
LoadModuleperl_modulelibexec/libperl.so
<IfDefineSSL>
LoadModulessl_modulelibexec/libssl.so
</IfDefine>
AddModulemod_php4.c
AddModulemod_perl.c
<IfDefineSSL>
AddModulemod_ssl.c
</IfDefine>
j配置及启动Apache
#/usr/local/apache_ssl/bin/apachectlstart
#/usr/local/apache_ssl/bin/apachectlst
(举报)