或以为孤权重,妄相忖度
分类: LINUX
2009-07-04 13:36:54
1. 从 (或:)上下载apache_1.3.39.tar.gz,然后解压缩的一个目录,然后转到apache_1.3.39目录。
2. 使用本地的gcc编译这个版本,运行:
./ configure
make 完成后,不需要make install
3. 然后创建一个新的编译arm版本的目录,然后在那个目录下解压缩apache_1.3.39.tar.gz,转到该目录下的apache_1.3.39,运行:
export CC="arm-linux-gcc"
./configure --prefix=/opt/apache/ --without-execstrip --enable-module=so
然后运行make 命令,这时编译会在apache_1.3.39/src/main/gen_test_char处失败,因为arm版本该程序无法在本地机器运行,你需要把前面编译的本地版本的apache_1.3.39/src/main/gen_test_char覆盖这个arm版本,然后转到arm版本的apache_1.3.39下继续make,随后编译到另一个程序apache_1.3.39/src/main/gen_uri_delims也出现相同的问题,也使用本地版本覆盖掉它,继续make,直到最后编译成功。
4. --prefix=/opt/apache /指定了安装的目录为/opt/apache/,运行make install,所有编译好的arm版本的apache程序都安装到了/opt/apache/目录下,把这个目录上传至终端上,注意,不能改变目录路径,然后修改conf/httpd.conf配置文件。
5.注意要修改conf/httpd.conf,增加ServerName www.*.com:80,否则在启动服务时会报一个警告httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
6.执行如下命令判断apache是否安装成功 (开发板IP)如果显示了apache说明页面,则说明安装成功.如果出现403的错误提示,请确认apache的目录权限是否为755,包括apache的上级目录.
7.还有一个很常见,但网上很多人都在搜索的问题: httpd: bad user name nobody.我也曾经遇到这个问题,我的解决也很简单,大概浏览了一下源代码,找到提示这个错误的位置是:/src/main/util.c(h:2006)
API_EXPORT(uid_t) ap_uname2id(const char *name)
{
#if defined(WIN32) || defined(NETWARE)
return (1);
#else
struct passwd *ent;
if (name[0] == '#')
return (atoi(&name[1]));
if (!(ent = getpwnam(name))) {
fprintf(stderr, "%s: bad user name %s\n", ap_server_argv0, name);
exit(1);
}
return (ent->pw_uid);
#endif
}
搜索getpwnam函数,/os/win32目录下的passwd.c找到该函数,但是这个函数在不定义为WIN32时是不会被编译的(参见/os/win32/passwd.c),而且其他地方也找不到getpwnam函数,初步怀疑是已经打包好了的^_^,冲冠一怒为红颜,将上面的代码修改为:
API_EXPORT(uid_t) ap_uname2id(const char *name)
{
#if defined(WIN32) || defined(NETWARE)
return (1);
#else
struct passwd *ent;
static struct passwd pw;
if (name[0] == '#')
return (atoi(&name[1]));
if (!(ent = &pw)) {
// if (!(ent = getpwnam(name))) {
fprintf(stderr, "%s: bad user name %s\n", ap_server_argv0, name);
exit(1);
}
ent->pw_uid=99;
return (ent->pw_uid);
#endif
}
同理,接下来还有一段ap_gname2id代码,按照上面的方法修改,但uid和gid必须和你新增的用户nobody的uid和gid保持一致,我这里都是用99.尽管这个方法治标不治本,但如果你不需要在nobody之外的其他用户使用,这个方法值得一试,如果谁知道这是怎么回事,请告诉我一声,谢谢.