如何在apache下配置subversion的经验总结。
1. 使用Dependency Walker,将mod_dav_svn.so所关联的所有动态库全部找出来,收集到一个目录下,包括
mod_dav.so libhttpd.dll libapr.dll libaprutil.dll libapriconv.dll (从 apachebin 目录拷贝)
libdb43.dll intl3_svn.dll ssleay32.dll libeay32.dll (从 svn-win32-1.3.2bin 目录拷贝)
共9个动态库,放在 modulessvn 目录下,然后修改 apache2confhttpd.conf文件 LoadModuledav_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_repositorypasswd.conf
AuthzSVNAccessFile d:svn_repositoryauthz.conf
Require valid-user
</Location>
3. 将 LoadModule authz_svn_module modules/svn/mod_authz_svn.so 加入配置,并将mod_authz_svn.so 拷贝入 modulessvn 目录, 再次启动 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 Filessvn-win32-1.3.2binmod_dav_svn.so"
LoadModule authz_svn_module "D:Program Filessvn-win32-1.3.2binmod_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.2bin 目录拷贝过来覆盖,结果还是成功启动apache
认真查看昨晚留下的痕迹,发现原目录没有 intl3_svn.dll 文件。于是准备继续试验
6. 删除 modulessvn 目录下的 intl3_svn.dll,打开dos窗口用 path=%path%;"D:ProgramFilessvn-win32-1.3.2bin" 命令将 D:Program Filessvn-win32-1.3.2bin目录加入本dos窗体的临时 path 内,然后打开dos窗口执行 apache,失败
7. 打开“我的电脑”属性,选“高级”下面的“环境变量”,将系统变量中path内,加入上述内容。然后打开dos窗口执行 apache,哈,成功了。接着启动 apache services ,果然,失败!!
【总结】
1. 在以应用程序模式启动apache的时候,其搜索动态库的路径,与以services方式启动时候的搜索路径不一样。以应用程序模式启动时,其搜索路径为
动态库本地目录-->apachebin目录-->系统path
而以windows services模式启动时,其搜索路径只有前两项,没有第三项。
所以当你将 subversionbin 目录设置入系统的环境变量,而没有将相关几个动态库放在apache关联目录下的时候,就会出现apache services启动失败而apache applichation启动成功的情况。
【注:本结论仅适用于将 svn-win32-1.3.2.zip 预编译包解压后就直接使用的情况。对于使用 svn-1.3.2-setup.exe 安装包正规安装的用户,本结论也许不适合。】
2. 当apache抱怨说无法启动,或者无法加载某个动态库的时候,一般先检查该动态库的关联情况。
1. 使用Dependency Walker,将mod_dav_svn.so所关联的所有动态库全部找出来,收集到一个目录下,包括
mod_dav.so libhttpd.dll libapr.dll libaprutil.dll libapriconv.dll (从 apachebin 目录拷贝)
libdb43.dll intl3_svn.dll ssleay32.dll libeay32.dll (从 svn-win32-1.3.2bin 目录拷贝)
共9个动态库,放在 modulessvn 目录下,然后修改 apache2confhttpd.conf文件 LoadModuledav_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_repositorypasswd.conf
AuthzSVNAccessFile d:svn_repositoryauthz.conf
Require valid-user
</Location>
3. 将 LoadModule authz_svn_module modules/svn/mod_authz_svn.so 加入配置,并将mod_authz_svn.so 拷贝入 modulessvn 目录, 再次启动 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 Filessvn-win32-1.3.2binmod_dav_svn.so"
LoadModule authz_svn_module "D:Program Filessvn-win32-1.3.2binmod_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.2bin 目录拷贝过来覆盖,结果还是成功启动apache
认真查看昨晚留下的痕迹,发现原目录没有 intl3_svn.dll 文件。于是准备继续试验
6. 删除 modulessvn 目录下的 intl3_svn.dll,打开dos窗口用 path=%path%;"D:ProgramFilessvn-win32-1.3.2bin" 命令将 D:Program Filessvn-win32-1.3.2bin目录加入本dos窗体的临时 path 内,然后打开dos窗口执行 apache,失败
7. 打开“我的电脑”属性,选“高级”下面的“环境变量”,将系统变量中path内,加入上述内容。然后打开dos窗口执行 apache,哈,成功了。接着启动 apache services ,果然,失败!!
【总结】
1. 在以应用程序模式启动apache的时候,其搜索动态库的路径,与以services方式启动时候的搜索路径不一样。以应用程序模式启动时,其搜索路径为
动态库本地目录-->apachebin目录-->系统path
而以windows services模式启动时,其搜索路径只有前两项,没有第三项。
所以当你将 subversionbin 目录设置入系统的环境变量,而没有将相关几个动态库放在apache关联目录下的时候,就会出现apache services启动失败而apache applichation启动成功的情况。
【注:本结论仅适用于将 svn-win32-1.3.2.zip 预编译包解压后就直接使用的情况。对于使用 svn-1.3.2-setup.exe 安装包正规安装的用户,本结论也许不适合。】
2. 当apache抱怨说无法启动,或者无法加载某个动态库的时候,一般先检查该动态库的关联情况。
