信任这篇文章相同是国内很难搜到的一个HOWTO(,到到我写出来之前),我的开端意图是在ARM上运用PHP,尝试了Busybox的httpd,以及boa都没有方法很便利的和PHP接口,因而我狠下心来,编译了Apache。在ARM上运用PHP,优点仅仅是脚本比cgi好写一些,支付的价值是速度和蜗牛相同慢,不要盼望很多人一同拜访能够呼应得过来。
别的说件事,BLOG上的文章多了,常常发现有人转载,可是有的人却不注出处……莫非要我吧我的姓名和邮件地址写到文章的每一个部分吗?或许国人便是这样缺少某种精力,在我看到的转载我文章的BLOG中,根本都是网上各种ARM Linux文章的调集,不行否认他们收集的很好,可是看了这么多文章,连一点心得体会都没有么,写点原创的东西就这么难么?不管怎样,我仍是坚持EE小站的风格——原创性。下面开端正题,本文分为三大部分,apache、php和装备。
编译apache
下载apache 1.3.39(1.3.41有些bug,没有方法穿插编译)
下载地址http://apache.mirror.phpchina.com/httpd/apache_1.3.39.tar.bz2
穿插编译apache总体上需求两个进程:
1.编译本机代码
2.运用本机代码进行穿插编译
这是由于编译apache时,需求运用编译生成的东西制造后续编译运用的头文件,穿插编译的东西当然没有方法在PC上运转,因而,需求借用本机编译生成的东西。假定为本机编译的apache代码现已解压缩到/home/lxz/apache-1.3.39-i586,为ARM编译的apache代码现已解压缩到/home/lxz/apache-1.3.39,穿插编译器arm-linux-gcc已设缺省途径,具体进程仍是用指令来阐明:
# cd /home/lxz/apache-1.3.39-i586
# ./configure
由于仅仅是借用下本机代码,所以不必设置装备参数,然后编译
# make
等编译完成后,就能够装备穿插编译的apache了。apache的装置方位为/usr/local/apache
# cd /home/lxz/apache-1.3.39
# CC=arm-linux-gcc ./configure –prefix=/usr/local/apache
会出来这样的提示,由于穿插编译的生成的testfunc这个东西不能在PC上履行,但能够不理睬它
./helpers/TestCompile: line 294: /home/lxz/apache-1.3.39/src/helpers/testfunc: cannot execute binary file
翻开/home/lxz/apache-1.3.39/src/main/Makefile这个文件,找到这两段代码
uri_delims.h: gen_uri_delims
./gen_uri_delims >uri_delims.h
test_char.h: gen_test_char
./gen_test_char >test_char.h
修正为
uri_delims.h: gen_uri_delims
/home/lxz/apache-1.3.39-i586/src/main/gen_uri_delims >uri_delims.h
test_char.h: gen_test_char
/home/lxz/apache-1.3.39-i586/src/main/gen_test_char >test_char.h
这儿借用了方才编译生成的本机代码里的东西,然后
# make
这就编译好了,下面是装置。由于装备apache的时分“prefix”参数指定的装置方位是/usr/local/apache,在PC上,拜访/usr/local是需求有root权限的,需求切换到root用户来进行装置。不主张将apache装置到一个随意的目录然后复制,由于这样会形成apache中的脚本调用方位的过错。当然,假如想要将apache装置到一个PC和ARM Linux都能拜访的固定方位,如/home/lxz/apache也能够。
假如你不明白上面这段话在说什么,那么请按照下面的进程进行操作。请承认你的PC Linux上的/usr/local/apache这个目录不存在PC上运用的apache,不然下面的进程会使你PC Linux上的apache不行用。
# su root
输入暗码
# cd /home/lxz/apache-1.3.39/
# make install
# exit
别忘了用exit退出root用户形式,这样,apache的文件就被装置到PC上的/usr/local/apache了。接下来所要做的是将apache复制到ARM Linux根文件体系,假定ARM Linux根文件体系在PC上的方位为/home/lxz/root,其间现已有/usr/local这个目录
# cp -r /usr/local/apache /home/lxz/root/usr/local
假如是一路看着我的BLOG树立起根文件体系的,接下来还必须树立nobody用户和nogroup组,由于apache回绝运用root用户运转。具体来说便是在ARM Linux根文件体系上树立/etc/passwd和/etc/group两个文件,怎样写这两个文件,能够google下。它们的内容能够如下:
/etc/passwd
root::0:0:root:/:/bin/ash
nobody::65534:65533:nobody:/:/bin/ash
/etc/group
nobody::65533:
nogroup::65534:nobody
root::0:
users::100:
当然,假如你的ARM Linux根文件体系中有这两个文件,那么你需求检查一下是不是有nobody用户和nogroup组。接下来,能够制造文件体系映像并测验apache是否能够正常作业了,仍是用指令来阐明。
# mkfs.cramfs /home/lxz/root /home/lxz/root.img
我一向用cramfs,SUSE 10.2自己就带了mkfs.cramfs这个东西。烧写或许加载文件体系映像的进程我就不说了,需求留意的是假如你运用了不行写的文件体系,如cramfs,需求把apache的日志途径挂载为临时文件目录,下面这几条指令在ARM Linux上履行。
# mount -t tmpfs tmpfs /usr/local/apache/log
然后就能够发动apache了
# cd /usr/local/apache/bin
# ./apachectl start
假定ARM板的ip地址是192.168.5.118,在浏览器里输入http://192.168.5.118:8080拜访ARM板(不修正默许装备,服务端口是8080)。apache的装备一瞬间编译了php再说。
编译php
首要下载php-4.4.8,下载地址:http://cn2.php.net/get/php-4.4.8.tar.bz2/from/this/mirror
穿插编译php相同需求两个进程:
1.编译本机代码
2.运用本机代码进行穿插编译
原因我就不重复了,假定为本机编译的php代码现已解压缩到/home/lxz/php-4.4.8-i586,为ARM编译的php代码现已解压缩到/home/lxz/php-4.4.8,穿插编译器arm-linux-gcc已设缺省途径,具体进程仍是用指令来阐明:
# cd /home/lxz/php-4.4.8-i586
# ./configure
# make
在编译的一同,能够翻开/home/lxz/php-4.4.8/configure这个文件,查找“can not run test program while cross compiling”,会查找到很多个这样的成果:
{ echo “configure: error: can not run test program while cross compiling” 1>&2; exit 1; }
把它们都改为
{ echo “configure: error: can not run test program while cross compiling” 1>&2; }
这样做的意图是直接无视穿插编译测验程序过错。别的,我运用的是arm-linux-gcc 3.4.1版,和代码不太兼容。找到/home/lxz/php-4.4.8/Zend/zend_strtod.c的第238行
#if defined(IEEE_LITTLE_ENDIAN) + defined(IEEE_BIG_ENDIAN) + defined(VAX) + \
Exactly one of IEEE_LITTLE_ENDIAN IEEE_BIG_ENDIAN, VAX, or
IBM should be defined.
#endif
把这段改为
#if defined(IEEE_LITTLE_ENDIAN) + defined(IEEE_BIG_ENDIAN) + defined(VAX) + \
//Exactly one of IEEE_LITTLE_ENDIAN IEEE_BIG_ENDIAN, VAX, or
//IBM should be defined.
#endif
在本机php编译完后,输入如下指令
# cd /home/lxz/php-4.4.8
# CC=arm-linux-gcc ./configure –prefix=/usr/local/php –host=i586-suse-linux –target=arm-linux
别以为能够编译了,还有东西要修正,真汗啊……翻开/home/lxz/php-4.4.8/Makefile,找到这段
install-pear-packages: $(top_builddir)/sapi/cli/php
@$(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
用上咱们方才编译的本机php里的文件,把它改成
install-pear-packages: /home/lxz/php-4.4.8-i586/sapi/cli/php
@/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
总算能够编译了
# make
随后和apache相同,需求切换用户,把php的文件装置到/usr/local/php
# su
输入暗码
# cd /home/lxz/php-4.4.8
# make install
# exit
这样,php就编译完成了。
装备Apache和PHP
接下来就需求修正装备文件,让apache和php能够链接起来作业。这个装备进程和Windows下运用apache+php的进程相似,由于我不是把apache和php一同编译的,仅仅让apache知道“.php”这个扩展名,然后调用php。为了便利,直接给出apache的装备文件,装备文件的方位在ARM Linux文件体系的/usr/local/apache/conf/httpd.conf,其间赤色字是在默许装备文件基础上修正或增加的内容。
ServerType standalone
ServerRoot “/usr/local/apache”
PidFile /usr/local/apache/logs/httpd.pid
ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 5
MaxSpareServers 10
StartServers 5
MaxClients 150
MaxRequestsPerChild 0
Port 80
User nobody
Group nobody
ServerAdmincosine@126.com
DocumentRoot “/home/webroot”
AccessFileName .htaccess
UseCanonicalName On
DefaultType text/plain
HostnameLookups Off
ErrorLog /usr/local/apache/logs/error_log
LogLevel warn
LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined
LogFormat “%h %l %u %t \”%r\” %>s %b” common
LogFormat “%{Referer}i -> %U” referer
LogFormat “%{User-agent}i” agent
CustomLog /usr/local/apache/logs/access_log common
ServerSignature On
Action application/x-httpd-php “/php4/php”
php也有装备文件,可是修正起来比较简单,只需求把/home/lxz/php-4.4.8/php.ini-dist到ARM Linux文件体系的/usr/local/php/lib,并改名为php.ini,找到
register_globals = Off
修正为
register_globals = On
保存就能够了。
假如你觉得上面的全部都很费事,能够在EE小站的SkyDrive下载我制造好的压缩包,地址http://cid-4201fdc93932ddaf.skydrive.live.com/self.aspx/EE小站琐碎文件/armv4-apache-php.tar.bz2,解压缩到ARM Linux根文件体系的/。这个压缩包包括apache 1.3.39和php 4.4.8,默许的网页服务器根目录为/home/webroot,默许监听端口为80。