今天天气不太好,没有出去,借着好节日自我娱乐一番…………
记得以前做过一个开发板系统,开发板上编写一个服务端,然后pc上又编写一个客户端,以后需要控制开发板的时候,需要在pc上运行客服端连接到服务端之后才能操作,这里面主要采用的是socket通信。但是自仔细推敲发现很不方便使用,假如换台pc还得去拷个客户端才能操作? 由于哥对网页情有独钟,设想只要有个浏览器,打开网页控制开发板,岂不更简单,连手机都可以省去客户端了,这个完全值得探究一番。
做网页自然要搭建服务器,linux下莫过于apache了,这真是个强大的玩意儿,刚开始采用的apache2,linux标准三大步:.configure,make,make install。直接出来错误,安装apr,继续下去还是错误,再安装apr_util,继续下去还是错误,再安装pcre,这下倒是好了又来了个一个错误:交叉编译工具无法使用,这个问题好奇葩,一番尝试之后,放弃了。采用apache1,看来最新的并不一定是最好用的啊,下面贴上这次的操作过程,以方便以后使用。
1.编译本机代码
# tar xvzf apache_1.3.39.tar.gz
# mv apache-1.3.39-i586 apache-1.3.39
# cd apache-1.3.39
# ./configure
# make
这个执行到这里就行了,至于为啥下面就明白了。
执行.configure可能会出现Syntax error错误,并出现一堆乱码,可能是由于某些shell脚本文件使用了错误的interpreter,使用下面的命令就可以解决。
# rm -f /bin/sh
# ln -s /bin/bash /bin/sh
2.进行交叉编译
# tar xvzf apache_1.3.39.tar.gz
# mv apache-1.3.39-i586/ apache-arm
# cd apache-arm
# CC=arm-linux-gcc CFLAGS+=-DBIG_SECURITY_HOLE ./configure --prefix=/usr/local/apache
# make
这时会出错,因为交叉编译的生成的testfunc这个工具不能在PC上执行,如下操作即可:
打开apache-arm/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/yichen/apache-1.3.39/src/main/gen_uri_delims >uri_delims.h
test_char.h: gen_test_char
/home/yichen/apache-1.3.39/src/main/gen_test_char >test_char.h
这里借用了刚才1中编译生成的本机代码里的工具,然后继续
# make
# make install
这就编译好了!
在make的时候出现个和stdio.h文件中某函数声明冲突的错误,暂时注掉stdio.h里的那一个函数的声明继续make下去。
结果再下去出现util.c的错误,make clean一下,再次make顺利通过了。
3 移植到rootfs中
由于配置apache的时候“prefix”参数指定的安装位置是/usr/local/apache,所以制作好的文件在/usr/local/apache,将apache拷贝到rootfs中的usr/local/apache中
#cp /usr/local/apache /nfsroot/usr/local/ -rf
因为之前configure的时候配置了CFLAGS+=-DBIG_SECURITY_HOLE,所以此apache可以以root运行,无需再创建nobody用
户和nogroup组。这意味着什么?直接网页可以open设备进行write了,人生一大喜事啊。。。
/* 追求安全的请绕过,看下面的安全配法。。
编辑/etc/passwd
和
/etc/group
两个文件,它们的内容可以如下:
/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
如果
rootfs
中有这两个文件,那么就只需要检查一下是不是有
nobody
用户和
nogroup
组。
*/
4.配置apache
配置文件为apache/conf/httpd.conf
apache默认就可以使用,基本无需过多的使用,我只配置了下面的四项:
Port 80
User root
Group root
ServerName www.example.com(不打开这个注视每次启动apache会出现一个提示,随意自定义主机名即可)
因为我的目的是执行cgi,所以主要的是关注一下cgi的设置。
配置cgi:在httpd.conf中ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"下面就是关于cgi的配置,默认已经是开启的。
在cgi-bin中已经有一个test-cgi文件,可以直接用来访问测试是否正常,如果不能访问多半是权限问题,最简单粗暴的方法是chmod 777。
5.自动启动apache
将 httpd 应用程序 拷贝到 /usr/sbin 文件夹下并 设置其为 开机自启动。向 /etc/init.d/rc 文件 最后 添加 命令 httpd。
不用拷贝直接指定httpd路径添加也是可行的。
6.测试
启动开发板,然后开启apache服务:
进入apachebin/bin文件夹,执行./httpd
重启apache可以用./httpd restart
我的开发板ip为192.168.1.6,所以
测试主机 http://192.168.1.6 ; 看是否能打开网页,说明apache正常工作了!
测试主机 http://192.168.1.6/cgi-bin/my.cgi ; 看是否能打开网页,说明cgi可以正常执行了!
附件:一个纯c的简单例子:
#include <stdio.h>
int main(int argc, char **argv)
{
printf("Content-type:text/html");
printf("");
printf("<b>CGI: Hello World!</b>");
return 0;
}
可能有人不明白这有什么用, 难道您不觉得这样就可以直接用网页就可以执行纯c编写的相关程序了?