提问的智慧SVN版 - 提问者必读
返回列表 回复 发帖

[apache配置]启动apache的时候提示 mod_dev_svn.so出错(已解决)

资料上说要添加
LoadModule dav_module         modules/mod_dav.so
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
这三行,其中第一行在原配置文件里面已经有了,后面两行是新增加的

问题一、mod_dav_svn.so和mod_authz_svn.so是不是一定需要从svn的安装目录拷贝到apache的modules目录?
问题二、我拷贝过去了,然后运行apache就出错:
httpd.exe: Syntax error on line 88 of C:/Program Files/Apache Software Foundation/Apache2.2/conf/httpd.conf: API module structure `dav_svn_module' in file C:/Program Files/Apache Software Foundation/Apache2.2/modules/mod_dav_svn.so is garbled - perhaps this is not an Apache module DSO?

难道是我的svn版本有问题?

[ 本帖最后由 郑新星 于 2006-6-21 18:03 编辑 ]
查看了我的svn版本,是基于2.0.58的apache编译的,怀疑是这个问题,因为我安装的apache是2.2版本
重新下载了2.0.58的apache,问题果然消失
本来以为解决了,没想到又出问题了

我在本机上试验完毕,挪到服务器上的时候,apache死活加载不上mod_dav_svn.so

最后查资料(http://subversion.tigris.org/faq.html#mod_dav_svn-win32),查看了这个动态库的支持库,然后才发现,居然放在apache\bin目录下的几个动态库,apache自己都找不到。将找不到的几个库拷贝到modules目录下,问题解决

然后回头看看自己机器上,因为基本相同的配置,所以发现libhttpd.dll模块同样无法找到,但是apache楞是可以正常启动,同样都是win2003系统,真是奇怪了

查看apache文档,说是只要放在apache\bin目录下的东西,应该可以自动找到的。不知道哪里出问题了

apache 2.0.58
svn 1.3.2
还是有问题

apache手动启动没问题,和svn配合的也很好了,但是一旦将apache安装成services,就无法启动,提示“windows 不能在 本地计算机 启动 Apache2。有关更多信息,查阅系统事件日志。如果这是非 Microsoft 服务,请与服务厂商联系,并参考特定服务错误代码 1。”

晕了,没想到apache这么不好安装
呵呵,我安装的时候很顺利的,
我的配置文件LoadModule部分是这样的:

LoadModule access_module modules/mod_access.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_module modules/mod_auth.so
#LoadModule auth_anon_module modules/mod_auth_anon.so
#LoadModule auth_dbm_module modules/mod_auth_dbm.so
#LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
#LoadModule expires_module modules/mod_expires.so
#LoadModule file_cache_module modules/mod_file_cache.so
#LoadModule headers_module modules/mod_headers.so
LoadModule imap_module modules/mod_imap.so
LoadModule include_module modules/mod_include.so
#LoadModule info_module modules/mod_info.so
LoadModule isapi_module modules/mod_isapi.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
#LoadModule mime_magic_module modules/mod_mime_magic.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule negotiation_module modules/mod_negotiation.so
#LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
#LoadModule speling_module modules/mod_speling.so
#LoadModule status_module modules/mod_status.so
#LoadModule unique_id_module modules/mod_unique_id.so
LoadModule userdir_module modules/mod_userdir.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
#LoadModule ssl_module modules/mod_ssl.so
LoadModule dav_svn_module "D:/Program Files/Subversion/bin/mod_dav_svn.so"
LoadModule authz_svn_module "D:/Program Files/Subversion/bin/mod_authz_svn.so"
关于基于apache配置subversion,
TortoiseSVN帮助TortoiseSVN_en.chm中的
Setting Up A Server
->
Apache Based Server
有详细的说明
配置Apache服务器
用文本文件编辑器打开Apache的配置文件httpd.conf。该文件位于C:\Program Files\Apache Group\Apache2\conf目录下。在其中找到这一行:
#LoadModule dav_module modules/mod_dav.so
并将“#”去掉,使该行生效。如果先装Apache后装Subversion,那么“#”已经被Subversion的安装程序去掉了。
在httpd.conf文件中最后一条LoadModule语句所在行的下一行添加:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
并将C:\Program Files\Subversion\bin目录下的mod_dav_svn.so 和mod_authz_svn.so文件拷贝至C:\Program Files\Apache Group\Apache2\modules目录下。如果先装Apache后装Subversion,那么这两行LoadModule已经被Subversion的安装程序添加了。
最后两行
LoadModule dav_svn_module "D:/Program Files/Subversion/bin/mod_dav_svn.so"
LoadModule authz_svn_module "D:/Program Files/Subversion/bin/mod_authz_svn.so"

建议用绝对路径,这样以后svn升级时就不用再把那两个.so拷贝到apache的modules下了,
每次升级时会省事很多
1. 使用Dependency Walker,将mod_dav_svn.so所关联的所有动态库全部找出来,收集到一个目录下,包括
mod_dav.so  libhttpd.dll  libapr.dll  libaprutil.dll  libapriconv.dll  (从 apache\bin 目录拷贝)
libdb43.dll  intl3_svn.dll  ssleay32.dll  libeay32.dll (从 svn-win32-1.3.2\bin 目录拷贝)
共9个动态库,放在 modules\svn 目录下,然后修改 apache2\conf\httpd.conf文件   LoadModule dav_svn_module  modules/svn/mod_dav_svn.so ,终于成功启动apache 的 services

2. 给 httpd.conf 添加如下指令,重启 apache 失败
<Location /svn>
    DAV svn
    SVNParentPath d:\svn_repository
    AuthType Basic
    AuthName "my Subversion Server"
    AuthUserFile d:\svn_repository\passwd.conf
    AuthzSVNAccessFile d:\svn_repository\authz.conf
    Require valid-user
</Location>

3. 将 LoadModule authz_svn_module   modules/svn/mod_authz_svn.so 加入配置,并将mod_authz_svn.so 拷贝入 modules\svn 目录, 再次启动 services 成功

4. 将
LoadModule dav_svn_module     modules/svn/mod_dav_svn.so
LoadModule authz_svn_module   modules/svn/mod_authz_svn.so
改成
LoadModule dav_svn_module "D:\Program Files\svn-win32-1.3.2\bin\mod_dav_svn.so"
LoadModule authz_svn_module "D:\Program Files\svn-win32-1.3.2\bin\mod_authz_svn.so"
重启 apache services 成功。至此,一切顺利,而昨晚出现的问题并没有重现。不死心,继续试验。

5. 设置
LoadModule dav_svn_module     modules/svn/mod_dav_svn.so
LoadModule authz_svn_module   modules/svn/mod_authz_svn.so
但是,将libapr.dll  libaprutil.dll  libapriconv.dll 三个动态库从 svn-win32-1.3.2\bin 目录拷贝过来覆盖,结果还是成功启动apache

认真查看昨晚留下的痕迹,发现原目录没有 intl3_svn.dll 文件。于是准备继续试验

6. 删除 modules\svn 目录下的 intl3_svn.dll,打开dos窗口用 path=%path%;"D:\Program Files\svn-win32-1.3.2\bin" 命令将 D:\Program Files\svn-win32-1.3.2\bin 目录加入本dos窗体的临时 path 内,然后打开dos窗口执行 apache,失败

7. 打开“我的电脑”属性,选“高级”下面的“环境变量”,将系统变量中path内,加入上述内容。然后打开dos窗口执行 apache,哈,成功了。接着启动 apache services ,果然,失败!!


【总结】
1. 在以应用程序模式启动apache的时候,其搜索动态库的路径,与以services方式启动时候的搜索路径不一样。以应用程序模式启动时,其搜索路径为
动态库本地目录-->apache\bin目录-->系统path
而以windows services模式启动时,其搜索路径只有前两项,没有第三项。

所以当你将 subversion\bin 目录设置入系统的环境变量,而没有将相关几个动态库放在apache关联目录下的时候,就会出现apache services启动失败而apache applichation启动成功的情况。

【注:本结论仅适用于将 svn-win32-1.3.2.zip 预编译包解压后就直接使用的情况。对于使用 svn-1.3.2-setup.exe 安装包正规安装的用户,本结论也许不适合。】

2. 当apache抱怨说无法启动,或者无法加载某个动态库的时候,一般先检查该动态库的关联情况。

【结束语】
借用 Subversion FAQ 上面的一段话做结束语:

The error message in this case is a little misleading. Most likely Apache is unable to load one or more DLLs that mod_dav_svn.so relies on. If Apache is running as a service it will not have the same PATH as a regular user. Make sure that libdb4*.dll, libeay32.dll and ssleay32.dll are present in either \Apache\bin or \Apache\modules. You can copy them from your Subversion installation directory if they are not there.

If this still does not resolve the problem, you should use a tool like Dependency Walker on mod_dav_svn.so to see if there are any other unresolved dependencies.

apache 2.2.2与svn 1.3.2

请问能用apache 2.2.2架设svn 1.3.2吗?
我这里照着apache 2.0.58的设置,apache不能启动,错误和版主最上面说的一样,能解决一下吗?
我是新手,最好给点详细的说明,谢谢了!

在线等...
windows的目前不能,除非自己重新编译源码

谢谢管理员

谢谢了,那我还是装apache2.0.58
如果还有问题还需要请教阿

回复 #4 郑新星 的帖子

"windows 不能在 本地计算机 启动 Apache2。有关更多信息,查阅系统事件日志。如果这是非 Microsoft 服务,请与服务厂商联系,并参考特定服务错误代码 1。”
这个问题你有解决吗?我是在安装mod_auth_sspi.so时出现的。
今天在一位热心的网友帮助下,来设置apache和subversion,但是最终未能成功哦。
希望,郑新星和PCplayer 能够指点一下了
我的subversion是直接安装的,版本是1.3.2,那应该怎样设置呢?
今天我也遇到了这个问题,我的配置是apache2.2.11、svn1.6.0,用楼主的方法试了一遍,发现不管用,后来用Dependency Walker查看所有mod_dav_svn.so需要的动态库文件,发现和楼主的不太一致,再次用楼主的方法实验,还是失败,然后把这两个文件都移动到了modules的svn目录下下:
#svn
LoadModule dav_svn_module modules/modules/svn/mod_dav_svn.so
LoadModule authz_svn_module modules/svn/mod_authz_svn.so
成功。


删除modules下的svn目录,还原httpd.conf,复制svn/bin下所有的dll文件到apache的modules目录下,启动apache成功!
把从svn/bin复制过来的所有dll文件移动到apache的bin目录下,重启apache,成功!
youzaichong
你的方法好,我用你的成功了,困扰了我都快一周了
返回列表
订阅 我用Subversion - SVN中文论坛 邮件列表:iUseSVN@googlegroups.com
电子邮件:
网站重要事项将会在这个列表进行通知,点击这里浏览存于列表中的所有邮件