Chinaunix首页 | 论坛 | 博客
  • 博客访问: 341859
  • 博文数量: 69
  • 博客积分: 3077
  • 博客等级: 中校
  • 技术积分: 602
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-11 09:40
个人简介

或以为孤权重,妄相忖度

文章分类

全部博文(69)

文章存档

2012年(1)

2011年(10)

2010年(39)

2009年(19)

我的朋友

分类: LINUX

2009-07-04 13:36:54

apache服务器for ARM Linux

 

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代码,按照上面的方法修改,uidgid必须和你新增的用户nobody的uid和gid保持一致,我这里都是用99.尽管这个方法治标不治本,但如果你不需要在nobody之外的其他用户使用,这个方法值得一试,如果谁知道这是怎么回事,请告诉我一声,谢谢.

阅读(1799) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~