现在的位置: 首页 > 综合 > 正文

fedora8下,apache2.2.6+mysql5.0.45+php5.2.5+ZendOptimizer-3.3.0a源代码编译安装过程

2013年02月02日 ⁄ 综合 ⁄ 共 10506字 ⁄ 字号 评论关闭

先说点废话:
在windows上安装amp,凭我这将近200的apm,我想我可以边安装边打魔兽了。

其实对于这么牛X的fedora8来说,用yum安装软件包是最简单最快速的方法。yum -y install httpd mysqld php-mysql php输入这条命令后,你就可以去安心的打魔兽了。而且安装非常迅速(当然建议你在使用yum前先装个yum加速插件),装完后phpinfo一下看看,什么都给你装好了,太省事了。可看到yum老是让我想起yumen(郁闷)这个词的拼音缩写,心情一下低落了。

我们80后的一代是不甘心被蒙在谷里的,我们追求的就是过程,我们要明白其中的原理,要个性化安装,要...你不说你要我怎么知道你要,你告诉我你要我才知道你要。所以,我们就不怕困难,自己下载源代码编译,这才像在使用linux。

我自己实际测试过,amp(apache,mysql,php)在linux下的运行速度是windows下的10倍左右,可能我测试的方法不科学,但也说明了一定问题,所以要想玩amp,就要用linux,用了linux保准您身体倍儿棒,吃嘛嘛香,您瞅准了,fedora8!
别看广告,看疗效!

其实说到用linux,最好还是用RHEL这类的企业版比较好。要么就去玩unix的bsd,aix,solaris之类的。fedora与debian这些系列属于桌面操作系统,是想与windows竞争的系统,fedora8的桌面特效可以与vista相提并论了,但说到简单易用,谁比得了windows呢?

自己安装时都是看别人的文章,在google上搜啊搜的,对那些人真是感激不尽,现在自己也熟练了,该为后人做点贡献了。

文归正传:

软件包下载:
apache - http://www.apache.org    # web服务器
mysql - http://www.mysql.org        # 数据库
php - http://www.php.net        # php环境
zend optimizer - http://www.zend.com    # php加速引擎
gd-2.0.33.tar.gz - http://www.libgd.org/releases/    #php的gd库支持
jpegsrc.v6b.tar.gz  - http://www.ijg.org/files/        #gd库的jpeg支持
libpng-1.2.7.tar.tar - http://sourceforge.net/projects/libpng/    #gd库的png支持
zlib-1.2.2.tar.gz - http://sourceforge.net/projects/zlib/        #zlib支持
libxml2-2.6.19.tar.gz - ftp://xmlsoft.org/libxml2-2.6.19.tar.gz    #libxml2支持,php依赖需要它
freetype-2.1.9.tar.gz - http://sourceforge.net/projects/freetype/    #freetype支持

这些软件包的版本随时会更新,上面的下载地址几乎都是官方的,所以会随时更新,可以随时下载最新版本,不过最新的不一定是最好的,经常会出现bug,不求最新,只求最稳定。

安装前要做一些准备,那就是删除掉你先用的amp,不然可能会引起一些冲突。
# rpm -qa |grep httpd
# rpm -qa |grep mysql
# rpm -qa |grep php

每执行一条命令后发现有结果出来,就用rpm -e [名称] --nodeps把它们一个个的强制删除,如果不加--nodeps可能会提示你要删除的包与某些包有一腿(依赖关系),而不让你删除。

还有一点要绝对注意,如果你的SELINUX这个安全机制是打开的,最好关闭它,不然它会时不时的出来骚扰你,如果你安装过程中它的提示突然出现了,那么它就有可能阻止了你的某些操作。你可以点开它按照它说的去做。但是不一定都有效,而且比较麻烦。

如何关闭它?其实很简单,我就不浪费篇幅了。你可以去问google。

下面我都是以root身份登录的,不然安装过程经常要su,太麻烦。

注意安装顺序不要出错,尤其是gd一定要装在jpeg那些东西的后面,因为编译gd依赖于那些包。首先把那些乱七八糟的库先装上,因为那些大型软件编译的时候需要指定这些库的位置。还要说明一点,其实系统本身已经带这些库文件了,位于/usr/lib下,尤其是fedora8带的都是很新的,其实可以将这些库文件的位置指向那里,但有些软件包的库文件不完全在这里面,比如jpeg,虽然/usr/lib下有一些jpeg的so文件,但我编译gd的时候指定这里,装完php后还是不支持jpg。所以决定还是自己安装吧。

安装zlib:
# tar -zxvf zlib-1.2.2.tar.gz
# cd zlib-1.2.2
# ./configure --prefix=/usr/local/zlib
# make
# make install

--prefix是指定他的安装目录,我把他装到/usr/lamp/libs/zlib下面

安装jpeg支持:
首先要为jpeg建立一些目录,这个软件包比较缺心眼儿,不会自己创建目录,不然执行make install的时候就提示你error。
# mkdir -p /usr/lamp/libs/jpeg
# mkdir -p /usr/lamp/libs/jpeg/bin
# mkdir -p /usr/lamp/libs/jpeg/lib
# mkdir -p /usr/lamp/libs/jpeginclude
# mkdir -p /usr/lamp/libs/jpeg/man
# mkdir -p /usr/lamp/libs/jpeg/man1
# mkdir -p //usr/lamp/libs/jpeg/man/man1
# tar -zxvf jpegsrc.v6b.tar.gz
# cd jpeg-6b
# ./configure --prefix=/usr/lamp/libs/jpeg --enable-shared --enable-static

安装png支持:
# tar -zxvf libpng-1.2.23.tar.gz 
# cd libpng-1.2.23
# cp scripts/makefile.linux makefile
# make (若是提示找不到zlib库文件或者头文件,多半是makefile文件里zlib的默认路径有误。可编辑makefile文件,找到zlib项并重新指定路径到/usr/lamp/libs/zlib/lib和/usr/lamp/libs/zlib/include)。
# make install

安装freetype支持:(这个东西是画图时在图片上写字所用到的ttf系列函数所依赖的库)
# tar -zvxf freetype-2.1.9.tar.gz
# cd freetype-2.1.9
也要手动建下目录
# mkdir -p /usr/lamp/libs/freetype
# ./configure --prefix=/usr/lamp/libs/freetype
# make
# make install

安装libxml2-2.6.19
# tar -zxf libxml2-2.6.19.tar.gz
# cd libxml2-2.6.19
# mkdir -p /usr/local/libxml2
# ./configure --prefix=/usr/lamp/libs/libxml2
# make
# make install
# cp xml2-config /usr/bin

现在安装GD,GD一定要装在那些软件的后面,GD最好也装在php的前面(这两个顺序颠倒不知道会不会有问题,好像是没问题,我的php装上后发现没有GD库,后来重装的GD库,似乎没什么问题)
# tar -zvxf gd-2.0.33.tar.gz
# mkdir -p /usr/lamp/libs/gd2
# cd gd-2.0.33
# ./configure --prefix=/usr/lamp/libs/gd2 --with-jpeg=/usr/lamp/libs/jpeg6 --with-png=/usr/local/lib --with-zlib=/usr/lamp/libs/zlib --with-freetype=/usr/lamp/libs/freetype
# make
# make install

那些杂七杂八的终于装上了,现在该安装老大们了,叫他们老大,不光是因为他们体积大,而是因为编译时间长,编译参数众多,且非常容易出错,尤其是mysql,我曾经是装了2,3天才装上,总是有一些莫名其妙的问题出现。搞的我头发掉了十几根,眼睛酸疼了好几天,幼小的心灵受到了摧残!一会儿我会介绍mysql安装应该注意的细节,希望别人别与我犯同样的错误。

安装apache:
# tar -zxvf httpd-2.2.6.tar.gz
# cd httpd-2.2.6
# ./configure --prefix=/usr/lamp/apache2 --sysconfdir=/etc --enable-so --enable-track-vars --enable-rewrite --with-z-dir=/usr/lamp/libs/zlib
# make
# make install

在这里老大们当中,apache算是最容易安装的,不知该说它的地位属于这三个当中最小的,还是apache开发组对它们的东西比较负责。一般来说这个过程是没什么问题的,应该很顺利。--sysconfdir=/etc这个参数作用是将apache的配置文件httpd.conf放在/etc这个目录,如果你不指定它,它会默认在你apache的安装目录下的conf目录里面。比如/usr/lamp/apache2/conf/httpd.conf。--enable-rewrite这个参数是开启apache的rewrite支持。这个功能现在比较常用,所以您就把它开开吧。剩下那两个不知道干什么用的,我也是抄别人的:)

安装mysql:
痛苦的回忆阿,这个家伙差点把我整死。
mysql的版本一定要注意下,因为同一篇文章如果你使用了不同的版本可能你就怎么也装不上,www.mysql.org,打开后点developer zone,点子菜单的downloads,找下面的mysql5.0,建议不要使用5.1和6.0很多人的结论是它们不稳定,有bug。页面往下拉,找到针对不同系统的下载版本,如果你是INTEL的cpu和芯片组,选择下载:Linux (non RPM, Intel C/C++ compiled, glibc-2.3)这个版本。然后又出现三个版本,选择x86的那个,点击Pick a mirror(从一个镜像下载,因为人家牛X啊,全世界都有服务器为其分流),下面那个是64位cpu的版本。如果你是64位的cpu可以下那个。第三个不知道是什么。这个版本是针对INTEL芯片做了优化的。注意这个版本是mysql官方编译好的。所以你不用再编译了。不用再执行那个configure了,不要下载那些rpm的版本,我对rpm真的没什么好感。

点开后出现一个废话页面,让你登录,真tnnd麻烦。点No thanks, just take me to the downloads!下载列表终于出现了。下面是不同的洲和国家,找到Asia也就是亚洲,然后找到台湾的几个下载地址,或者鬼子的也行。速度应该是最快的,至于http或ftp随你了。
很多人都是按照mysql的官方文档安装的mysql,所以就都给自己系统加了个mysql的系统帐户和组用来管理mysql,这里要举一反三,我就不喜欢给我的系统加个mysql的用户,用的是我安装fedora时注册的帐户。所以一些useradd,groupadd的命令就没使用。事实证明一样可以成功安装mysql。

# tar zxvf mysql-5.0.45-linux-i686-icc-glibc23.tar.gz
# mv mysql-5.0.45-linux-i686-icc-glibc23 /usr/lamp/mysql5
# cd /usr/lamp/mysql5
# chown -R root .
# chown -R xxx data
这两句是设置用户目录权限,xxx是你登录系统的用户名,也就是你这个系统除root外的其他帐户中的一个,注意root的后面有个空格,空格后面有个".",不要漏掉,否则提示错误的命令。
# chgrp -R xxx .
这句是设置xxx这个用户组的权限。xxx后面的.同样不要漏掉。
# ./scripts/mysql_install_db --user=xxx
这句的作用是给mysql初始化,让它把自己的那些库装上,就是information_schema,mysql,test这三个库。
# cd /support-files
# ls
可以看到my-huge.cnfmy-innodb-heavy-4G.cnfmy-large.cnfmy-medium.cnfmy-small.cnf这几个文件,选一个适合你的(针对你服务器的用途),把它copy到/etc下。我选的是my-medium.cnf。
# cp ./my-medium.cnf /etc/my.cnf
这句是将mysql的配置文件copy到/etc下面并且命名为my.cnf,mysql在启动的时候默认会先读取这里面的信息,所以以后如果想对mysql做优化啊,自定义之类的就改这个文件。
# ./bin/mysqld_safe --user=xxx &
执行这句之后,mysql就应该已经启动了。说明一切正常,用ps -l命令看一下进程列表,然后用kill mysql的进程id杀掉mysql的进程先。如果提示出什么错误信息,那您就去问问google老师吧。肯定有像您一样的可怜虫。

安装php:
终于到了老大中的老大出场了,不过说实话,你php也是以模块方式加载在人家apache上面的,应该算是apache的小弟才对。但php说,靠,你们谁有我configure的时候参数多?谁有我make的时间长???apache本想说点什么,顿时感到语塞...

# tar -zxvf php-5.2.5.tar.gz
# cd php-5.2.5
# ./configure --prefix=/usr/lamp/php5 --with-apxs2=/usr/lamp/apache2/bin/apxs --enable-trace-avrs --enable-calendar  --disable-debug --enable-ftp --enable-gd-imgstrttf --enable-gd-native-ttf --with-ttf --enable-magic-quotes --enable-memory-limit --enable-shmop --enable-sigchild --enable-sysvsem --enable-sysvshm --enable-track-vars --enable-trans-sid --enable-wddx --enable-yp --with-ftp --with-config-file-path=/etc --with-mysql=/usr/lamp/mysql5 --with-zlib --with-libxml --enable-shared --with-gd=/usr/lamp/libs/gd2 --with-jpeg-dir=/usr/lamp/libs/jpeg --with-png  --with-freetype-dir=/usr/lamp/libs/freetype --with-curl --enable-zend-multibyte --enable-exif  --with-bz2 --enable-pcntl  --with-iconv --enable-xslt=/usr/lib with-xslt=/usr/lib --with-mysql-sock=/tmp/mysql.sock --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql-pdo-mysql --enable-soap --enable-mbstring=all --enable-mbregex --enable-so
# cp php.ini-dist /etc/php.ini
这是我php的configure参数,当然您可以不用那么多,当然我这些也仅仅是全部的1/5左右。挑您认为长的漂亮的,心思细腻的,温柔的,可爱的...(用的到的)。至于这里面每一项具体是干什么的,我就不一一解释了,因为口渴了也没人给买水喝,手疼了也没人给揉揉。您可以用configure --help命令查询一下,只不过全是E文的,如果E文不好就去问问我们最好的老师google。参数加的越多,出错的几率就越大,如果configure的时候出错还好说,查看一下configure.log就能找到问题,要是make的时候出错您又要去麻烦google老师了,老问问题也不送点礼,多不好意思啊,记得明年教师节一定要好好表现表现。有一些参数是最好不要加的,比如--enable-debug,如果你加了它php就运行为调试模式了,那zend optimizer就哭了。因为它失业了。--with-config-file-path=/etc是指定php.ini的位置,但有时这个参数会失效。一会儿配置php的时候我再说解决办法。
最后一句cp那个文件可以是php.ini-dist也可以是php.ini-recommended这两个都是php.ini的样例文件。php.ini-recommended比前者更加严格,是官方做了修改的配置。有助于规范全球的php代码,我一直用它,因此我写出的php代码可以通过ISOxxxx的认证~~~但是注意,如果你配置这个php环境是为了装那些开源程序,建议你还是使用前者吧,因为有很多开源程序的代码都不规范,尤其是很多国内的,比如discuz,phpwind。不然你会发现这些开源程序根本运行不了。

这里再总结一下出错的排错方法:
1 ./configure的时候出错,一般是因为你的一些编译参数造成的,某个目录指定的不正确。比如编译GD时,你的--with-freetype=/dir,dir这个路径它找不到freetype的文件。根据提示信息或者在当前目录下less configure.log,就能查到出错原因,再或者俺们不加这个参数了。俺们的php就不支持freetype了怎么地?
2 make的时候出错,一般可能是因为编译时需要链接某个.h文件找不到之类的。这种情况你可以去vi它的Makefile一系列文件,修改源代码。如果你懂linux下的c就更好办了。
3 make install的时候出错,这种情况一般是因为创建目录的问题,它创建不了自己的安装目录。这种情况你就根据它的错误提示手动去创建那些目录。

配置apache:
# vi /etc/httpd.conf
要改的有如下几处:
找到LoadModule php5_module modules/libphp5.so
让php5以动态模块方式(DSO)加载在apache上。apache在启动后去加载php。
前面的#号去掉(默认已去掉注释)
#AddType application/x-gzip .gz .tgz
下面加二行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
第一句是让apache在遇到.php文件后缀的时候,调用php模块解释php里面的代码。第二句是在遇到.phps文件后缀的时候以语法高亮方式显示php源代码。这里可以做很多文章,比如AddType application/x-httpd-php .html,这样apache会把.html文件也通过php去解释,很多网站的"伪静态"就是这里做的手脚。
找到DirectoryIndex index.html
改为 DirectoryIndex index.html index.htm index.php,这是在给apache设置默认首页。并且是有先后顺序的。
# cp /usr/lamp/apache2/bin/apachectl /etc/rc.d/init.d/httpd
设置开机自启动
# chkconfig --add httpd
将apache添加为系统服务
# service httpd start
就会开启服务了,同理service httpd stop就是停止服务。还可以service httpd restart。不过这个没有什么提示信息,你可以自己编写个shell脚本,加入一些提示信息就显得好看多了。
插播个广告:
for more and strong commands,login www.apache.org please!

配置mysql:
# cd /usr/lamp/mysql5
# cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
这一句的作用是将mysql加入开机启动服务。进入linux后就自动开启mysql
# chmod 700 /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
这个命令的作用是把mysql添加为系统服务,服务名为mysqld。
# export PATH="/usr/lampp/mysql5/bin"
给mysql加入系统环境变量,这样在打开终端后,无论处于哪一个目录都可以直接mysql -uxxx -p了
# service mysqld start
就应该能看到mysql的启动信息了,这是人家编写好的shell脚本,所以会显示开启和停止的提示信息,你也可以参照mysql.server的源代码自己编写一个shell脚本。service mysqld stop就是停止mysql服务。
给root用户改密码,改密码有多种方式。具体可以去问那谁。这里只说一种:

如果root用户没密码
mysqladmin -uroot  password 'newpassword'
如果root用户有密码:
mysqladmin -uroot -poldpasword password 'newpassword'
关于my.cnf如何配置,请去问mysql的官方文档。

配置php:
linux跟wndows下不一样,linux下php基本已经在安装的过程中把那些链接库文件链接完了,而windows下基本是解压后去配置php.ini来决定加载哪个dll。不过还是有几个需要改的
# vi /etc/php.ini
命令模式下:
/session.save_path,找到session.save_path = "/tmp"那一项,把它前面的";"去掉。
其他的还要改什么您去问php手册吧。

好了,看一下我们的劳动成果吧。
# service httpd start
# service mysqld start
# cd /var/www/html
默认情况下,你的网页文件都被指定在这个目录,如果你觉得不满意,去修改/etc/httpd.conf,把Documentroot后面那个目录改成你想指定的。
# vi phpinfo.php
里面写入:
<?php
phpinfo();
?>
打开firefox,输入http://localhost/phpinfo.php
如果看到了那熟悉的phpinfo界面~~~~~先别高兴太早。嘿嘿,逐一检查gd库啊,xsl啊,jpeg阿,freetype啊之类的有没有。没有的话你还得重新编译php或者gd库或者检查哪个模块没有就得检查编译php时指定的目录是否正确。然后重新编吧,相信很多人都是给这样折磨过来的。精神的摧残啊。

但不管怎样,第一步成功了,首先检查phpinfo的第六行Configuration File (php.ini) Path,看看是不是在/etc下面,我们编译的时候指定的是/etc下面,但有时那个参数会失效。如果不是的话,两个选择,重新编译php,或者去修改/etc/httpd.conf,在中间部分(其实哪里都行)加入一行PHPIniDir /etc,然后重启apache。

安装zend optimizer:
之所以最后安装它,并不是因为它是隐藏boss,而因为他是php的小弟,没有php给它撑腰,它不敢现身,apache和mysql都不鸟它,平时也就欺负下jpeg,png,gd这些小字辈的。
# tar -zxvf ZendOptimizer-3.3.0a-linux-glibc21-i386.tar.gz
# cd ZendOptimizer-3.3.0a-linux-glibc21-i386
# ./install

然后您就跟着提示一步步走吧,这初中的英文水平也能看懂了吧,何况您还是个it人士呢。其实是因为上班时间快到了,我没时间写了哈哈
装完后重启apache,再打开http://localhost/phpinfo.php,在页面搜索zend,如果能搜到一个大标题的zend,恭喜你zend optimizer装上了。如果没有,检查下编译php时是否--enable-debug,检查phpinfo第六行php.ini所在目录里面有没有php.ini,检查php.ini的文件尾有没有zend加入的信息。

好累啊~~~
这个过程可能要重复N次,相信很多人都是。需要的是耐心,是毅力,在生活中亦是如此!我们80后的一代能否战胜自身那叛逆和浮躁的性格吗?在linux下配一遍php就知道了。

nothing impossble!

抱歉!评论已关闭.