young_king 发表于 2009-03-02 10:55

[原创]OpenBSD 4.4 + eAccelerator 0.9.5.3 + Zend Optimizer 3.3.0a 安装笔记

作者:yong_king,个人博客:http://onmp.cublog.cn,本文欢迎转载!

OpenBSD以其固有的简洁、安全、高效、稳定,正越来越赢得广大用户的喜爱。但正是因为OpenBSD对安全的近乎偏执的追求,使得很多的软件的安装都会有所不同。

本文就将要讲解在OpenBSD 4.4环境下,安装eAccelerator 0.9.5.3这个PHP加速软件和Zend Optimizer 3.3.0a这个PHP解码软件的方法。

注意,在安装前请su成root。

一、系统环境的准备

这里只介绍基本的PHP环境的安装,其他需要的软件请自行安装。

export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.4/packages/i386/
pkg_add wget autoconf-2.61p3 unzip libtool m4 php5-core php5-fastcgi
(注意上面autoconf的版本,请根据系统环境需求自行修改)

OpenBSD会自动处理好软件的依赖关系,自动安装必须的软件和库等等。OpenBSD下安装软件就是这么简单!

二、修改eAccelerator 0.9.5.3源码,适应OpenBSD环境

cd /tmp
wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.zip
unzip eaccelerator-0.9.5.3.zip
cd eaccelerator-0.9.5.3
vi +110 eaccelerator.h

敲入2dd删除110和111两行内容,删除的内容在下面:

      typedef intptr_t;
      #define _INTPTR_T_DEFINED

删完后插入下面的内容:

typedef int intptr_t;
#define _INTPTR_T_DEFINED
#else
#ifdef HAVE_STDINT_H
#    include <stdint.h>
#elif HAVE_INTTYPES_H
#    include <inttypes.h>
#endif

完成后这段的内容应该是:

if !defined(_INTPTR_T_DEFINED) && ZEND_WIN32
typedef int intptr_t;
#define _INTPTR_T_DEFINED
#else
#ifdef HAVE_STDINT_H
#    include <stdint.h>
#elif HAVE_INTTYPES_H
#    include <inttypes.h>
#endif
#endif

保存退出。

vi +2094 eaccelerator.c

敲入16dd将这行及接下来的16行删除,删除的内容在下面:

      }

      /*
         * Initialization on first call, comes from eaccelerator_zend_startup().
         */
      if (eaccelerator_global_function_table.nTableSize == 0) {
                zend_function tmp_func;
                zend_class_entry tmp_class;

                zend_hash_init_ex(&eaccelerator_global_function_table, 100, NULL, NULL, 1, 0);
                zend_hash_copy(&eaccelerator_global_function_table, CG(function_table), NULL,
                        &tmp_func, sizeof(zend_function));

                zend_hash_init_ex(&eaccelerator_global_class_table, 10, NULL, NULL, 1, 0);
                zend_hash_copy(&eaccelerator_global_class_table, CG(class_table), NULL,
                        &tmp_class, sizeof(zend_class_entry));

删完后跳到2516行,敲入8dd将这行及接下来的8行删除,删除的内容在下面:

/*
   * HOESH: on apache restart there was some
   * problem with CG(class_table) in the latest PHP
   * versions. Initialization moved to eaccelerator_compile_file()
   * depends on the value below.
   */
eaccelerator_global_function_table.nTableSize = 0;

保存退出。

至此,对代码的修改已经完成。

三、编译环境的设定

vi +103 /usr/local/bin/phpize

为autoconf加入版本号,将这两行改成:

test -z "$PHP_AUTOCONF" && PHP_AUTOCONF=autoconf-2.61
test -z "$PHP_AUTOHEADER" && PHP_AUTOHEADER=autoheader-2.61

注意此处为开始准备环境时安装的autoconf版本号,请根据系统情况自行修改。

保存退出。

好了,eAccelerator所需的编译环境已经全部妥当。

四、安装eAccelerator

接下来的过程就是官方的过程了,很简单:

phpize
./configure
make && make install

等到上面的步骤完成,然后要修改php.ini文件,将eAccelerator的设置加进去。

vi /var/www/conf/php.ini

跳到最后,加入下面的内容:


extension="eaccelerator.so"
eaccelerator.shm_size="8"
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="1"
eaccelerator.compress_level="9"

注意:上面eaccelerator.shm_size="8"这行是指定eAccelerator所用缓存的大小,偶这里只指定了8M,你可以根据你的情况自行修改。这个缓存最大可以设置到32M(修改/etc/sysctl.conf文件中kern.shminfo.shmmax的值可以再调大,注意是字节)。

保存退出,然后建立eAccelerator工作目录:

mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator

完成后用下面的命令验证安装是否成功:

php -v
php-fastcgi -v

如果在输出的部分能够看到包含eAccelerator的内容,就表示eAccelerator的安装基本成功。



注意:上面将eAccelerator的工作目录建立在/tmp中,而OpenBSD默认启动的时候会清空/tmp中的内容。

所以,请在/etc/rc.local启动脚本的最前面加入创建目录的命令,确保eAccelerator可以正常工作!

mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator

做个好事,方便机器上没有编译器的朋友。偶把已经编译好的eaccelerator.so打包放在这里,有需要的朋友下载了改名为eaccelerator.tar.gz,解压后可以得到eaccelerator.so这个文件,将eaccelerator.so传到服务器的/var/www/lib/php/modules/目录中即可使用,没必要下载源码修改再编译了!
MD5 (eaccelerator.so) = dcc511f611f4046fdbf22d60485e3e1d。





五、下载Zend Optimizer软件包

因为在zend.com下载需要注册,这里就不给出具体下载地址,可以自行用电邮地址注册,然后登录下载并上传到服务器临时目录中,下面的示例为/tmp目录。

假若你真的不想去注册,可以在本帖的后面找到偶已经打包的两个文件,下载改名并解压后上传到服务器/var/www/lib/php/modules/目录即可使用了!

cd /tmp
tar xzvf ZendOptimizer-3.3.0a-openbsd3.4-i386.tar.gz

六、检验并创立Zend Optimizer工作环境

不知何故,目前Zend Optimizer只有for OpenBSD 3.4的版本,由于OpenBSD版本变化的缘故,原来需要的一些库文件已经有了很大的变化,直接安装无法通过,会提示缺少库文件,那么就需要做下连接,将Zend Opitimizer指向新库。

运行下面的命令建立连接:

ln -s /usr/lib/libutil.so.11.0 /usr/lib/libutil.so.9.0
ln -s /usr/lib/libc.so.48.0 /usr/lib/libc.so.30.1
ln -s /usr/lib/libm.so.3.0 /usr/lib/libm.so.1.0

七、将正确的模块文件拷贝到PHP模块目录

所谓的模块文件,就是Zend Opitimizer压缩包中后缀为.so的文件,一共有两个:(注意,不是带_TS的两个!)
/tmp/ZendOptimizer-3.3.0a-openbsd3.4-i386/data/ZendExtensionManager.so
/tmp/ZendOptimizer-3.3.0a-openbsd3.4-i386/data/5_2_x_comp/ZendOptimizer.so

将这两个文件拷贝到PHP模块目录中(OpenBSD默认为/var/www/lib/php/modules),注意不要改变文件名!:
cp /tmp/ZendOptimizer-3.3.0a-openbsd3.4-i386/data/ZendExtensionManager.so /var/www/lib/php/modules/
cp /tmp/ZendOptimizer-3.3.0a-openbsd3.4-i386/data/5_2_x_comp/ZendOptimizer.so /var/www/lib/php/modules/

八、在php.ini中加载Zend Opitimizer

需要注意的是,在php.ini文件中,为了避免冲突,Zend Optimizer加载的部分一定要在eAcceleratro的后面!

vi /var/www/conf/php.ini

跳到最后,加入下面这段:

zend_optimizer.optimization_level=0
zend_optimizer.version=3.3.0a
zend_extension=/var/www/lib/php/modules/ZendExtensionManager.so
zend_extension=/var/www/lib/php/modules/ZendOptimizer.so

注意上面zend_optimizer.optimization_level=这行,是指加速(缓冲)代码的级别,可选值有:0(关闭),1,3,15,1023(最大)。不过根据本人的简单测试,Zend Optimizer加速(缓冲)代码的作用并不是很明显,最大值1023也无甚效果。上面我们已经装上了eAccelerator这个PHP加速软件,为了不影响速度,这里就用0关闭。

保存退出,命令行下输入php -v检验Zend Opitimizer是否安装正确,如果在输出的信息中有Zend Opitimizer的相关信息,则说明安装成功!



手动重启Web Server,就可以使用eAccelerator和Zend Optimizer了!



再次做个好事,方便没有在zend.com注册的朋友,把Zend Optimizer所需的文件打包放在这里。请于下载后改名为Zend.tar.gz,解压后可以得到ZendExtensionManager.so和ZendOptimizer.so两个文件,上传到服务器/var/www/lib/php/modules/目录,再在php.ini文件中引用即可!下面是md5值:
MD5 (ZendExtensionManager.so) = 373fdd267e4ab51be56915cca351035b
MD5 (ZendOptimizer.so) = 57ff1dd95817268469b76e2391cf33eb





写在最后

OpenBSD软件包里面的PHP因为安全的关系,集成了suhosin这个补丁,而据说eAccelerator和suhosin不兼容,会导致内存泄漏。地址在下面,大家可以自行去看:
http://groups.google.com/group/eaccelerator/browse_thread/thread/bf98b6c5eee9d69b

仅仅是需要PHP加速(缓存)代码的话,偶强烈推荐使用OpenBSD软件包中的pecl-APC,性能、兼容性和稳定性都比eAccelerator要好一些。偶并不推荐在OpenBSD环境下使用eAccelerator和Zend Optimizer的组合。除非你的PHP环境要求你必须支持Zend Optimizer!

用了eAccelerator以后,为了避免内存泄漏,临时的解决办法就是每隔一段时间用eaccelerator_clear()函数清空eAccelerator中缓存的内容。方法在下面(假定网站根目录是/var/nginx/html):

在php.ini文件中引用eAccelerator的最后加入:
eaccelerator.allowed_admin_path="/var/nginx/html/"
(或者用你网站的根目录替换上面的/var/nginx/html/部分)

完成后,关于eAccelerator的部分就如下示:


extension="eaccelerator.so"
eaccelerator.shm_size="8"
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="1"
eaccelerator.compress_level="9"
eaccelerator.allowed_admin_path="/var/nginx/html/"

然后写一个清除缓存的PHP小程序:

vi /var/nginx/html/clear.php

很简单的,只有一行:

<?php eaccelerator_clear(); ?>

这就行了,在需要清理缓存的时候,就用浏览器打开http://xxx.xxx.xxx.xxx/clear.php即可!

PS.上面的清除办法还不是智能的,需要手动运行。希望哪位大牛可以说个自动化的方法,每隔一小时自动清除cache中缓存的内容。偶在命令行下试了N久都不成功,都无法清除cache中的内容,只有在浏览器中才可以!难道是权限的问题(偶的php-fastcgi是用www用户启动的)?

相关博文

[原创]OpenBSD.Nginx.MySQL.PHP.环境搭建手册[第一版]

[原创]OpenBSD环境下eAccelerator、pecl-APC和Zend Optimizer的对比测试

OpenBSD环境下安装PHP加速软件eAccelerator的方法[原创]

OpenBSD环境下安装Zend Optimizer的通用万能方法![原创]

list(,$temp) leak with eacc+suhosin

OpenBSD 4.3 + eAccelerator 0.9.5.3 + Zend Optimizer 3.3.0a

摸索了两天,终于搞定了OpenBSD 4.3和Zend Optimizer 3.3.0a(最终版)

[ 本帖最后由 young_king 于 2009-3-4 09:28 编辑 ]

wosl2001 发表于 2009-03-02 10:58

Solution for ZendOptimizer to work under
OpenBSD 4.1/i386
1. Download the file for OpenBSD 3.x as distributed by Zend
currently ZendOptimizer-3.2.8-openbsd3.4-i386.tar.gz
2. Untar (tar -xzf ZendOpt*), and fetch the files
-> ZendOptimizer*/data/ZendExtensionManager.so
-> ZendOptimizer*/data/5_1_x_comp/ZendOptimizer.so
where 5_1_x is the php you have installed
3. Put those file somewhere clean like
-> /var/www/lib/php/ZendExtensionManager.so
-> /var/www/lib/php/ZendOptimizer.so
you NEED to keep the names unchanged
4. Simulate old libs (here's the magic)
type in the console the following command
# ln -s libm.so.2.3 /usr/lib/libm.so.1.0
Alternatively, if you don't like symlinking you can edit the binaries and cha
string 'libm.so.1.0' into 'libm.so.2.3' in both of Zend*.so files
- change 0x -> 0x in ZendExtensionManager.so at offset 0x
- change 0x -> 0x in ZendOptimizer.so at offset 0xCEAE
5. Edit your /var/www/conf/php.ini and add the section

zend_extension=/var/www/lib/php/ZendExtensionManager.so
zend_extension=/var/www/lib/php/ZendOptimizer.so
6. Test
Reboot your webserver
# apachectl stop
# apachectl start
Write down one php page containing <? phpinfo(); ?> and browse it !

young_king 发表于 2009-03-02 11:02

原帖由 wosl2001 于 2009-3-2 10:58 发表 http://bbs3.chinaunix.net/images/common/back.gif
Solution for ZendOptimizer to work under
OpenBSD 4.1/i386
1. Download the file for OpenBSD 3.x as distributed by Zend
currently ZendOptimizer-3.2.8-openbsd3.4-i386.tar.gz
2. Untar (tar -xzf ZendOpt*), and fetch the files
-> ZendOptimizer*/data/ZendExtensionManager.so
-> ZendOptimizer*/data/5_1_x_comp/ZendOptimizer.so
where 5_1_x is the php you have installed
3. Put those file somewhere clean like
-> /var/www/lib/php/ZendExtensionManager.so
-> /var/www/lib/php/ZendOptimizer.so
you NEED to keep the names unchanged
4. Simulate old libs (here's the magic)
type in the console the following command
# ln -s libm.so.2.3 /usr/lib/libm.so.1.0
Alternatively, if you don't like symlinking you can edit the binaries and cha
string 'libm.so.1.0' into 'libm.so.2.3' in both of Zend*.so files
- change 0x -> 0x in ZendExtensionManager.so at offset 0x
- change 0x -> 0x in ZendOptimizer.so at offset 0xCEAE
5. Edit your /var/www/conf/php.ini and add the section

zend_extension=/var/www/lib/php/ZendExtensionManager.so
zend_extension=/var/www/lib/php/ZendOptimizer.so
6. Test
Reboot your webserver
# apachectl stop
# apachectl start
Write down one php page containing <? phpinfo(); ?> and browse it !

呵呵~~~

速度真快!

偶的方法就是在上面这个E文的基础上做出来的,曾经走了些弯路,才把ZO给解决掉。

写出来方便其他的朋友!

wosl2001 发表于 2009-03-02 11:06

我感觉e文的更明确一点 能清楚安装的原理

young_king 发表于 2009-03-02 11:16

原帖由 wosl2001 于 2009-3-2 11:06 发表 http://bbs3.chinaunix.net/images/common/back.gif
我感觉e文的更明确一点 能清楚安装的原理

谢谢你的补充!

这下大家都可以知道安装的方法和原理了!

czjin 发表于 2009-03-02 16:53

顶。太好了。马上安装测试。

young_king 发表于 2009-03-03 09:02

原帖由 czjin 于 2009-3-2 16:53 发表 http://bbs3.chinaunix.net/images/common/back.gif
顶。太好了。马上安装测试。

如在安装过程中有什么问题,欢迎及时跟帖反馈!

czjin 发表于 2009-03-03 15:18

我安装测试完成.

suhosin是个什么问题,在phpMyAdmin登录时也有这个提示,是很严重吗?

young_king 发表于 2009-03-03 15:40

原帖由 czjin 于 2009-3-3 15:18 发表 http://bbs3.chinaunix.net/images/common/back.gif
我安装测试完成.
318803
suhosin是个什么问题,在phpMyAdmin登录时也有这个提示,是很严重吗?
318804

suhosin是个PHP的补丁,用来加强PHP的安全性。

这个提示是说某些操作可能会受到suhosin的影响。

一般来说,是不会有什么影响的,可以无视。

czjin 发表于 2009-03-03 16:12

谢谢。楼主你太棒了。
页: [1] 2
查看完整版本: [原创]OpenBSD 4.4 + eAccelerator 0.9.5.3 + Zend Optimizer 3.3.0a 安装笔记