<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[在ARM Linux上使用Apache+PHP]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Tue, 13 Oct 2009 09:23:37 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	在ARM Linux上使用Apache+PHP<br/>我相信这篇文章同样是国内很难搜到的一个HOWTO（呵呵，截至到我写出来之前），我的最初目的是在ARM上使用PHP，尝试了Busybox的httpd，以及boa都没有办法很方便的和PHP接口，因此我狠下心来，编译了Apache。在ARM上使用PHP，好处仅仅是脚本比cgi好写一些，付出的代价是速度和蜗牛一样慢，不要指望很多人同时访问可以响应得过来。<br/>另外说件事，BLOG上的文章多了，经常发现有人转载，但是有的人却不注出处……难道要我吧我的名字和邮件地址写到文章的每一个部分吗？也许国人就是这样缺乏某种精神，在我看到的转载我文章的BLOG中，基本都是网上各种ARM Linux文章的集合，不可否认他们搜集的很好，但是看了这么多文章，连一点心得体会都没有么，写点原创的东西就这么难么？不管怎样，我还是坚持EE小站的风格——原创性。下面开始正题，本文分为三大部分，apache、php和配置。<br/> <br/>编译apache<br/>下载apache 1.3.39（1.3.41有些bug，没有办法交叉编译）<br/>下载地址http://apache.mirror.phpchina.com/httpd/apache_1.3.39.tar.bz2 <br/><br/> <br/>交叉编译apache总体上需要两个步骤：<br/>1.编译本机代码<br/>2.利用本机代码进行交叉编译<br/> <br/>这是因为编译apache时，需要使用编译生成的工具制作后续编译使用的头文件，交叉编译的工具当然没有办法在PC上运行，因此，需要借用本机编译生成的工具。假设为本机编译的apache代码已经解压缩到/home/lxz/apache-1.3.39-i586，为ARM编译的apache代码已经解压缩到/home/lxz/apache-1.3.39，交叉编译器arm-linux-gcc已设缺省路径，具体步骤还是用命令来说明：<br/> <br/># cd /home/lxz/apache-1.3.39-i586<br/># ./configure<br/> <br/>因为仅仅是借用下本机代码，所以不用设置配置参数，然后编译<br/> <br/># make<br/> <br/>等编译完成后，就可以配置交叉编译的apache了。apache的安装位置为/usr/local/apache<br/> <br/># cd /home/lxz/apache-1.3.39<br/># CC=arm-linux-gcc ./configure --prefix=/usr/local/apache<br/> <br/>会出来这样的提示，因为交叉编译的生成的testfunc这个工具不能在PC上执行，但可以不理会它<br/>./helpers/TestCompile: line 294: /home/lxz/apache-1.3.39/src/helpers/testfunc: cannot execute binary file<br/>打开/home/lxz/apache-1.3.39/src/main/Makefile这个文件，找到这两段代码<br/>uri_delims.h: gen_uri_delims<br/> ./gen_uri_delims >uri_delims.h<br/>test_char.h: gen_test_char<br/> ./gen_test_char >test_char.h<br/>修改为<br/>uri_delims.h: gen_uri_delims<br/> /home/lxz/apache-1.3.39-i586/src/main/gen_uri_delims >uri_delims.h<br/>test_char.h: gen_test_char<br/> /home/lxz/apache-1.3.39-i586/src/main/gen_test_char >test_char.h<br/>这里借用了刚才编译生成的本机代码里的工具，然后<br/> <br/># make<br/> <br/>这就编译好了，下面是安装。由于配置apache的时候“prefix”参数指定的安装位置是/usr/local/apache，在PC上，访问/usr/local是需要有root权限的，需要切换到root用户来进行安装。不建议将apache安装到一个随意的目录然后拷贝，因为这样会造成apache中的脚本调用位置的错误。当然，如果想要将apache安装到一个PC和ARM Linux都能访问的固定位置，如/home/lxz/apache也可以。<br/>如果你不明白上面这段话在说什么，那么请按照下面的步骤进行操作。请确认你的PC Linux上的/usr/local/apache这个目录不存在PC上使用的apache，否则下面的步骤会使你PC Linux上的apache不可用。<br/> <br/># su root<br/> <br/>输入密码<br/> <br/># cd /home/lxz/apache-1.3.39/<br/># make install<br/># exit<br/> <br/>别忘了用exit退出root用户模式，这样，apache的文件就被安装到PC上的/usr/local/apache了。接下来所要做的是将apache拷贝到ARM Linux根文件系统，假设ARM Linux根文件系统在PC上的位置为/home/lxz/root，其中已经有/usr/local这个目录<br/> <br/># cp -r /usr/local/apache /home/lxz/root/usr/local<br/> <br/>如果是一路看着我的BLOG建立起根文件系统的，接下来还必须建立nobody用户和nogroup组，因为apache拒绝使用root用户运行。具体来说就是在ARM Linux根文件系统上建立/etc/passwd和/etc/group两个文件，怎么写这两个文件，可以google下。它们的内容可以如下：<br/> <br/>/etc/passwd<br/>root::0:0:root:/:/bin/ash <br/>nobody::65534:65533:nobody:/:/bin/ash<br/>/etc/group<br/>nobody::65533:<br/>nogroup::65534:nobody<br/>root::0:<br/>users::100:<br/>当然，如果你的ARM Linux根文件系统中有这两个文件，那么你需要检查一下是不是有nobody用户和nogroup组。接下来，可以制作文件系统映像并测试apache是否可以正常工作了，还是用命令来说明。<br/> <br/># mkfs.cramfs /home/lxz/root /home/lxz/root.img<br/> <br/>我一直用cramfs，SUSE 10.2自己就带了mkfs.cramfs这个工具。烧写或者加载文件系统映像的步骤我就不说了，需要注意的是如果你使用了不可写的文件系统，如cramfs，需要把apache的日志路径挂载为临时文件目录，下面这几条命令在ARM Linux上执行。<br/> <br/># mount -t tmpfs tmpfs /usr/local/apache/log<br/> <br/>然后就可以启动apache了<br/> <br/># cd /usr/local/apache/bin<br/># ./apachectl start<br/> <br/>假设ARM板的ip地址是192.168.5.118，在浏览器里输入http://192.168.5.118:8080访问ARM板（不修改默认配置，服务端口是8080）。apache的配置一会儿编译了php再说。<br/><br/>编译php<br/>首先下载php-4.4.8，下载地址：http://cn2.php.net/get/php-4.4.8.tar.bz2/from/this/mirror <br/><br/>交叉编译php同样需要两个步骤：<br/>1.编译本机代码<br/>2.利用本机代码进行交叉编译<br/> <br/>原因我就不重复了，假设为本机编译的php代码已经解压缩到/home/lxz/php-4.4.8-i586，为ARM编译的php代码已经解压缩到/home/lxz/php-4.4.8，交叉编译器arm-linux-gcc已设缺省路径，具体步骤还是用命令来说明：<br/> <br/># cd /home/lxz/php-4.4.8-i586<br/># ./configure<br/># make<br/> <br/>在编译的同时，可以打开/home/lxz/php-4.4.8/configure这个文件，搜索“can not run test program while cross compiling”，会搜索到很多个这样的结果：<br/>&#123; echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; &#125;<br/>把它们都改为<br/>&#123; echo "configure: error: can not run test program while cross compiling" 1>&2; &#125;<br/>这样做的目的是直接无视交叉编译测试程序错误。另外，我使用的是arm-linux-gcc 3.4.1版，和代码不太兼容。找到/home/lxz/php-4.4.8/Zend/zend_strtod.c的第238行<br/>#if defined(IEEE_LITTLE_ENDIAN) + defined(IEEE_BIG_ENDIAN) + defined(VAX) + &#92;<br/>&nbsp;&nbsp;&nbsp;&nbsp;defined(IBM) != 1<br/>Exactly one of IEEE_LITTLE_ENDIAN IEEE_BIG_ENDIAN, VAX, or<br/>IBM should be defined.<br/>#endif<br/>把这段改为<br/>#if defined(IEEE_LITTLE_ENDIAN) + defined(IEEE_BIG_ENDIAN) + defined(VAX) + &#92;<br/>&nbsp;&nbsp;&nbsp;&nbsp;defined(IBM) != 1<br/>//Exactly one of IEEE_LITTLE_ENDIAN IEEE_BIG_ENDIAN, VAX, or<br/>//IBM should be defined.<br/>#endif<br/>在本机php编译完后，输入如下命令<br/> <br/># cd /home/lxz/php-4.4.8<br/># CC=arm-linux-gcc ./configure --prefix=/usr/local/php --host=i586-suse-linux --target=arm-linux<br/> <br/>别以为可以编译了，还有东西要修改，真汗啊……打开/home/lxz/php-4.4.8/Makefile，找到这段<br/>install-pear-packages: $(top_builddir)/sapi/cli/php<br/> @$(top_builddir)/sapi/cli/php $(PEAR_INSTALL_FLAGS) /home/lxz/php-4.4.8/pear/install-pear.php -d "$(peardir)" -b "$(bindir)" /home/lxz/php-4.4.8/pear/packages/*.tar<br/>用上我们刚才编译的本机php里的文件，把它改成<br/>install-pear-packages: /home/lxz/php-4.4.8-i586/sapi/cli/php<br/> @/home/lxz/php-4.4.8-i586/sapi/cli/php $(PEAR_INSTALL_FLAGS) /home/lxz/php-4.4.8/pear/install-pear.php -d "$(peardir)" -b "$(bindir)" /home/lxz/php-4.4.8/pear/packages/*.tar<br/>终于可以编译了<br/> <br/># make<br/> <br/>随后和apache一样，需要切换用户，把php的文件安装到/usr/local/php<br/> <br/># su<br/> <br/>输入密码<br/> <br/># cd /home/lxz/php-4.4.8<br/># make install<br/># exit<br/> <br/>这样，php就编译完成了。<br/> <br/>配置Apache和PHP
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 在ARM Linux上使用Apache+PHP]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>